Estou usando o seguinte método para enviar e-mail de Python usando SMTP. É o método certo a ser usado ou estou perdendo algumas pegadinhas?
from smtplib import SMTP
import datetime
debuglevel = 0
smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('YOUR.MAIL.SERVER', 26)
smtp.login('USERNAME@DOMAIN', 'PASSWORD')
from_addr = "John Doe <[email protected]>"
to_addr = "[email protected]"
subj = "hello"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )
message_text = "Hello\nThis is a mail from your server\n\nBye\n"
msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s"
% ( from_addr, to_addr, subj, date, message_text )
smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()
Respostas:
O script que uso é bastante semelhante; Eu o posto aqui como um exemplo de como usar os módulos email. * Para gerar mensagens MIME; portanto, este script pode ser facilmente modificado para anexar imagens, etc.
Conto com meu ISP para adicionar o cabeçalho de data e hora.
Meu ISP exige que eu use uma conexão smtp segura para enviar e-mail, conto com o módulo smtplib (para download em http://www1.cs.columbia.edu/~db2501/ssmtplib.py )
Como em seu script, o nome de usuário e a senha (dados valores fictícios abaixo), usados para autenticar no servidor SMTP, estão em texto simples na fonte. Esta é uma falha de segurança; mas a melhor alternativa depende de quão cuidadoso você precisa (deseja?) para protegê-los.
===============================================
fonte
from ssmtplib import SMTP_SSL as SMTP
porfrom smtplib import SMTP_SSL as SMTP
, e este exemplo funcionaria com a biblioteca Python padrão.msg['To'] = ','.join(destination)
, caso contrário, o destino não será visualizado no GmailO método que normalmente uso ... não muito diferente, mas um pouco
É isso aí
fonte
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
Além disso, se você quiser fazer autenticação smtp com TLS ao invés de SSL, então você só precisa mudar a porta (use 587) e fazer smtp.starttls (). Isso funcionou para mim:
fonte
O principal problema que vejo é que você não está lidando com nenhum erro: .login () e .sendmail () têm exceções documentadas que podem lançar e parece que .connect () deve ter alguma forma de indicar que foi incapaz de conectar - provavelmente uma exceção lançada pelo código de soquete subjacente.
fonte
Certifique-se de não ter nenhum firewall bloqueando o SMTP. A primeira vez que tentei enviar um e-mail, ele foi bloqueado pelo Firewall do Windows e pela McAfee - demorou uma eternidade para encontrar os dois.
fonte
Que tal isso?
fonte
o código a seguir está funcionando bem para mim:
Ref: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
fonte
smtpserver.close()
Deve ser:,smtpserver.quit()
porqueclose()
não encerrará a conexão TLS corretamente!close()
será chamado durantequit()
.Você deve certificar-se de formatar a data no formato correto - RFC2822 .
fonte
O código de exemplo que fiz para enviar e-mail usando SMTP.
fonte
Veja todas aquelas respostas demoradas? Permita que eu me autopromova fazendo tudo isso em algumas linhas.
Importar e conectar:
Então é apenas uma linha:
Na verdade, ele fechará quando sair do escopo (ou poderá ser fechado manualmente). Além disso, permitirá que você registre seu nome de usuário em seu chaveiro, de forma que você não precise escrever sua senha em seu script (realmente me incomodou antes de escrever
yagmail
!)Para o pacote / instalação, dicas e truques, por favor, dê uma olhada em git ou pip , disponível para Python 2 e 3.
fonte
você pode fazer assim
fonte
Aqui está um exemplo funcional para Python 3.x
fonte
Com base neste exemplo , criei a seguinte função:
se você passar apenas
body
, o e-mail em texto simples será enviado, mas se você passar ohtml
argumento junto com obody
argumento, o e-mail html será enviado (com fallback para o conteúdo de texto para clientes de e-mail que não suportam os tipos html / mime).Exemplo de uso:
Btw. Se você deseja usar o gmail como servidor SMTP de teste ou produção, habilite o acesso temporário ou permanente a aplicativos menos seguros:
fonte