Estoy usando el siguiente método para enviar correo desde Python usando SMTP. ¿Es el método correcto para usar o hay problemas que me faltan?
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()
Respuestas:
El guión que utilizo es bastante similar; Lo publico aquí como un ejemplo de cómo usar los módulos email. * Para generar mensajes MIME; por lo que este script se puede modificar fácilmente para adjuntar imágenes, etc.
Confío en mi ISP para agregar el encabezado de fecha y hora.
Mi ISP requiere que use una conexión smtp segura para enviar correo, confío en el módulo smtplib (descargable en http://www1.cs.columbia.edu/~db2501/ssmtplib.py )
Como en su secuencia de comandos, el nombre de usuario y la contraseña, (dados los valores ficticios a continuación), que se utilizan para autenticarse en el servidor SMTP, están en texto sin formato en la fuente. Esta es una debilidad de seguridad; pero la mejor alternativa depende del cuidado que necesite (¿quiere?) protegerlos.
=====================================
fuente
from ssmtplib import SMTP_SSL as SMTP
confrom smtplib import SMTP_SSL as SMTP
, y este ejemplo funcionaría desde la biblioteca estándar de Python.msg['To'] = ','.join(destination)
, de lo contrario, el destino no se ve en gmailEl método que uso comúnmente ... no muy diferente pero un poco
Eso es
fuente
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
Además, si desea realizar la autenticación smtp con TLS en lugar de SSL, solo tiene que cambiar el puerto (use 587) y hacer smtp.starttls (). Esto funcionó para mí:
fuente
El problema principal que veo es que no está manejando ningún error: .login () y .sendmail () ambos tienen excepciones documentadas que pueden lanzar, y parece que .connect () debe tener alguna forma de indicar que fue no se puede conectar, probablemente una excepción lanzada por el código de socket subyacente.
fuente
Asegúrese de no tener ningún firewall que bloquee SMTP. La primera vez que intenté enviar un correo electrónico, fue bloqueado tanto por Firewall de Windows como por McAfee; me tomó una eternidad encontrarlos a ambos.
fuente
¿Qué pasa con esto?
fuente
El siguiente código funciona bien para mí:
Ref: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
fuente
smtpserver.close()
Debe ser:, ¡smtpserver.quit()
porqueclose()
no terminará la conexión TLS correctamente!close()
será llamado durantequit()
.Debe asegurarse de formatear la fecha en el formato correcto: RFC2822 .
fuente
El código de ejemplo que hice para enviar correo usando SMTP.
fuente
¿Ves todas esas extensas respuestas? Permítanme autopromocionarme haciéndolo todo en un par de líneas.
Importar y conectar:
Entonces es solo una frase:
De hecho, se cerrará cuando salga del alcance (o se puede cerrar manualmente). Además, le permitirá registrar su nombre de usuario en su llavero de modo que no tenga que escribir su contraseña en su script (¡realmente me molestó antes de escribir
yagmail
!)Para el paquete / instalación, consejos y trucos, consulte git o pip , disponibles para Python 2 y 3.
fuente
puedes hacer así
fuente
Aquí hay un ejemplo de trabajo para Python 3.x
fuente
Basado en este ejemplo hice la siguiente función:
si solo pasa
body
, se enviará un correo de texto sin formato, pero si pasa unhtml
argumento junto con unbody
argumento, se enviará un correo electrónico html (con respaldo al contenido de texto para los clientes de correo electrónico que no admiten los tipos html / mime).Uso de ejemplo:
Por cierto. Si desea utilizar gmail como servidor SMTP de prueba o producción, habilite el acceso temporal o permanente a aplicaciones menos seguras:
fuente