Jump to content
Giuliano Santos

Envio de e-mail com Python

Recommended Posts

Estou tentando enviar e-mails pelo Python com dados de um banco de dados, mais esta ocorrendo um erro que eu não estou conseguindo entender.

O sistema faz a conexão com o banco, envia o primeiro e-mail e quando vai enviar o segundo e-mail da um erro.

Alguem poderia me ajudar com esse código por favor?

Segue o código que tenho:

 

#!/usr/bin/python

import MySQLdb
import smtplib
import time

smtp = smtplib.SMTP_SSL('email-ssl.com.br', 465)
email = 'intranet@email.com.br'
senha = '1234'

# Abre o banco de dados
db = MySQLdb.connect("localhost","root","1234","intranet" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = " SELECT  e.id,e.email_destino,e.titulo,e.mensagem,e.email_respondepara FROM envia_email e WHERE e.enviado = 'F'"

try:
   # executa o SQL
   cursor.execute(sql)
   # lista a base.
   results = cursor.fetchall()
   for row in results:
        #id = row[0]
        email_destino = row[1]
        titulo = row[2]
        mensagem = row[3]
        #email_respondepara = row[4]
        
        time.sleep(40)
        smtp.login(email,senha)

        de = 'intranet@email.com.br'
        para = [email_destino]
        
        msg = '''Subject: %s \n
        %s''' % (titulo, ' ' + mensagem)
        
        smtp.sendmail(de, para, msg)
        smtp.quit()
except:
   print "Error"

# desconecta do servidor
db.close()

 

Share this post


Link to post
Share on other sites

Resolvi o problema dessa forma:

    import MySQLdb
    import smtplib
    import time

    smtp = smtplib.SMTP_SSL('email-ssl.com.br', 465)
    email = 'intranet@email.com.br'
    senha = '1234'

    # Abre o banco de dados
    db = MySQLdb.connect("localhost","root","1234","intranet" )

    # prepare a cursor object using cursor() method
    cursor = db.cursor()

    sql = " SELECT  e.id,e.email_destino,e.titulo,e.mensagem,e.email_respondepara FROM envia_email e WHERE e.enviado = 'F'"

    # executa o SQL
    cursor.execute(sql)
    # lista a base.
    results = cursor.fetchall()

    #loga no SMTP
    smtp.login(email,senha)

    for row in results:
        #id = row[0]
        email_destino = row[1]
        titulo = row[2]
        mensagem = row[3]
        #email_respondepara = row[4]

        #aguarda 20 segundo para enviar o proximo email
        time.sleep(20)

        de = email
        para = [email_destino]

        msg = '''Subject: %s \n
        %s''' % (titulo, ' ' + mensagem)
        #envia o e-mail
        smtp.sendmail(de, para, msg)
    #desconecta do SMTP
    smtp.quit()

    # desconecta do servidor
    db.close()

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By clayton.lima2020
      Bom dia!
       
      Pessoal estou com um problema estou tentando enviar um e-mail através de um formulário que criei no site da empresa que eu trabalho, porém na hora de enviar está dando erro.
       
      Obs: a hospedagem do site está na Locaweb
       
      Segue abaixo o erro:
       
      Fatal error: Uncaught Error: Call to undefined function eregi() in /home/storage/2/a8/c3/odontosmilesfran1/public_html/class.phpmailer.php:593 Stack trace: #0 /home/storage/2/a8/c3/odontosmilesfran1/public_html/class.phpmailer.php(518): PHPMailer->SmtpConnect() #1 /home/storage/2/a8/c3/odontosmilesfran1/public_html/class.phpmailer.php(410): PHPMailer->SmtpSend('Date: Sat, 5 Ju...', '--b1_b48d510d23...') #2 /home/storage/2/a8/c3/odontosmilesfran1/public_html/envio-franqueador.php(55): PHPMailer->Send() #3 {main} thrown in /home/storage/2/a8/c3/odontosmilesfran1/public_html/class.phpmailer.php on line 593
       
      Segue o código do script de envio:
       

        <? require_once("class.phpmailer.php"); //Nova instância do PHPMailer $mail = new PHPMailer; //Informa que será utilizado o SMTP para envio do e-mail $mail->IsSMTP(); //Informa que a conexão com o SMTP será autênticado $mail->SMTPAuth   = true; //Configura a segurança para SSL $mail->SMTPSecure = "ssl"; $mail->Port       = 465; $mail->Host       = "email-ssl.com.br"; //Usuário para autênticação do SMTP $mail->Username =   "sejaumfranqueado@odontosmilesfranchising.com.br"; //Senha para autênticação do SMTP $mail->Password =   "12345678"; // senha ficticia //Titulo do e-mail que será enviado $mail->Subject  =   "PEDIDO PARA SER UM FRANQUEADOR"; //Preenchimento do campo FROM do e-mail $mail->From = $mail->Username; $mail->FromName = $_POST['nome']; // Nome do remetente //E-mail para a qual o e-mail será enviado $mail->AddAddress("sejaumfranqueado@odontosmilesfranchising.com.br"); //Conteúdo do e-mail //$mail->Body = "Novo contato feito através do site Araújo Imóveis.";      $mail->From     = $_POST['email']; // E-mail do remetente         $mail->Body .= "Modelo de Franquia: ".$_POST['modelo']."<br>";         $mail->Body .= "Nome: ".$_POST['nome']."<br>";     $mail->Body .= "Email: ".$_POST['email']."<br>";      $mail->Body .= "Fone Móvel: ".$_POST['fone']."<br>";     $mail->Body .= "Fone Fixo: ".$_POST['movel']."<br>";     $mail->Body .= "Estado: ".$_POST['estado']."<br>";     $mail->Body .= "Cidade: ".$_POST['cidade']."<br>";           $mail->Body .= "Mensagem: ".nl2br($_POST['mensagem'])."";                        $mail->AltBody = $mail->Body; //Dispara o e-mail $enviado = $mail->Send(); //Imprime sucesso. if($enviado)   echo "<script>alert('Sua mensagem foi enviada com sucesso!')</script>"; echo "<meta http-equiv='refresh' content='2;URL=index.php'>"; ?>  
      Segue o trecho do código do arquivo class.phpmailer.php onde está dando o erro
       

         /* Choose the mailer */     switch($this->Mailer) {       case 'sendmail':         $result = $this->SendmailSend($header, $body);         break;       case 'smtp': [b][color=red]         $result = $this->SmtpSend($header, $body); // nessa linha 410 está dando erro [/color][/b]         break;       case 'mail':         $result = $this->MailSend($header, $body);         break;       default:         $result = $this->MailSend($header, $body);         break;         //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported'));         //$result = false;         //break;     }     return $result;   }   /**   Aqui está outro trecho do código:    /* Retry while there is no connection */     while($index < count($hosts) && $connection == false) {       $hostinfo = array(); [b][color=red]      if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo)) { // aqui está dando erro linha 593[/color][/b]         $host = $hostinfo[1];         $port = $hostinfo[2];       } else {         $host = $hosts[$index];         $port = $this->Port;       }       $tls = ($this->SMTPSecure == 'tls');       $ssl = ($this->SMTPSecure == 'ssl');       if($this->smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $this->Timeout)) {         $hello = ($this->Helo != '' ? $this->Hello : $this->ServerHostname());         $this->smtp->Hello($hello);         if($tls) {           if(!$this->smtp->StartTLS()) {             $this->SetError($this->Lang("tls"));             $this->smtp->Reset();             $connection = false;           }           //We must resend HELLO after tls negociation           $this->smtp->Hello($hello);         }         $connection = true;         if($this->SMTPAuth) {           if(!$this->smtp->Authenticate($this->Username, $this->Password)) {             $this->SetError($this->Lang('authenticate'));             $this->smtp->Reset();             $connection = false;           }         }       }       $index++;     }     if(!$connection) {       $this->SetError($this->Lang('connect_host'));     }     return $connection;   }    

      Obrigado a todos que puderem ajudar
       
       
    • By BiancaVale
      Tenho um input em que o usuário pode inserir nomes de animais:
      lista = [] animais = input('Nome do animal: ') lista.append(animais) Como faço para obter dessa lista os elementos que mais se repetem?
      lista = ['gato', 'cobra', 'gato', 'coruja'] Saída:
      gato Porém, preciso contar essas ocorrências sem utilizar as funções disponíveis para listas como count, set, e etc.
      Já busquei em vários fóruns alguma ajuda, pelo menos uma ideia de como começar o código, mas não achei nada que pudesse me ajudar.
    • By Algorithm
      Olá.
       
      Eu estou desenvolvendo um site utilizando o Flask e banco de dados SqlLite, mas me surgiu uma dúvida que eu não consigo sanar utilizando o Google.
       
      Eu preciso pegar os dados de uma Select que esta armazenado em uma variavel e enviar a uma pagina HTML e dentro do HTML fazer um For para ir coletando todos os resultados que o Select retorna, como fazer isso ?
       
      Alguem conhece algum tutorial objetivo e simples de entender ou algum exemplo ?
       
      Obrigado
    • By luigiferrari
      Gostaria de fazer um programa onde o usuário digitaria o tamanho de conjuntos e quantas linhas possui os conjuntos, exemplo:

      Seguindo, o programa perguntaria qual conjunto o usuário quer adicionar o valor, e então o valor seria adicionado nas linhas, e qnd cheio, seria o FIFO.
      Mas minhas principais duvidas seriam:
      1- Como eu crio um vetor dentro de outro (não necessariamente precisa ser um vetor, aceito sugestões de como fazer isso)
      2- Caso eu faça com o vetor, teria que gerar x vetores, por exemplo, caso o usuário colocasse em "qts conjuntos: 5" teria que criar 5 conjuntos(vetores) diferentes. Como faço isso?!
      Lembrando aceito qualquer sugestão, estou fazendo em C# mas tbm entendo de Python e PHP caso tenha alguma ideia.
    • By rafaelmoreira78
      Boa tarde!
      Estou querendo fazer um select a partir da seleção de um combobox. Nesse combobox o usuário escolhe o tipo de busca que ele quer. Se é por nome, por id, por data etc. E depois, exibe os dados nos campos. Porém, não estou conseguindo e não sei como resolver isso.
      public void consultar(){ String sql ="select * from tbcertificados where ?=?"; try{ pst=conexao.prepareStatement(sql); pst.setString(1,cbConsulta.getSelectedItem().toString()); pst.setString(2,txtBusca.getText()); rs=pst.executeQuery(); if (rs.next()){ lblID.setText(rs.getString(1)); txtNome.setText(rs.getString(2)); comboCursos.setSelectedItem(rs.getString(3)); txtData.setText(rs.getString(4)); txtCH.setText(rs.getString(5)); txtEmpresa.setText(rs.getString(6)); txtObs.setText(rs.getString(7)); }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.