¿Qué necesita para enviar un correo electrónico con Python? Algunos conocimientos básicos de programación y web junto con las habilidades elementales de Python. Suponemos que ya ha tenido una aplicación web construida con este idioma y ahora necesita ampliar su funcionalidad con notificaciones u otros correos electrónicos de envío. Este tutorial lo guiará a través de los pasos más esenciales para enviar correos electrónicos a través de un servidor SMTP:

  1. configurar un servidor para probar (¿sabe por qué es importante?,)
    • servidor SMTP Local
    • Mailtrap servidor SMTP falso
  2. Diferentes tipos de correos electrónicos: HTML, con imágenes y archivos adjuntos
  3. envío de múltiples correos electrónicos personalizados (Python es invaluable para la automatización del correo electrónico)
  4. Algunas opciones populares de envío de correo electrónico como Gmail y servicios de correo electrónico transaccional

servido con numerosos ejemplos de código!

Nota: escrito y probado en Python 3.7.2.

enviar un correo electrónico usando SMTP

La primera buena noticia sobre Python es que tiene un Módulo incorporado para enviar correos electrónicos a través de SMTP en su biblioteca estándar., No se requieren instalaciones o trucos adicionales. Puede importar el módulo utilizando la siguiente instrucción:

import smtplib

para asegurarse de que el módulo se ha importado correctamente y obtener la descripción completa de sus clases y argumentos, escriba en una sesión interactiva de Python:

help(smtplib)

en nuestro siguiente paso, hablaremos un poco sobre los servidores: elegir la opción correcta y configurarla.,

servidor SMTP para probar correos electrónicos en Python

al crear una nueva aplicación o agregar cualquier funcionalidad, especialmente cuando lo hace por primera vez, es esencial experimentar en un servidor de prueba. Aquí hay una breve lista de razones:

  1. no llegarás a las bandejas de entrada de tus amigos y clientes. Esto es vital cuando prueba el envío masivo de correo electrónico o trabaja con una base de datos de correo electrónico.
  2. No inundará su propia bandeja de entrada con correos electrónicos de prueba.
  3. tu dominio no estará en la lista negra de spam.,

servidor SMTP Local

si prefiere trabajar en el entorno local, el servidor de depuración SMTP local puede ser una opción. Para este propósito, Python ofrece un módulo smtpd. Tiene una función de servidor de depuración, que descartará los mensajes que está enviando y los imprimirá en stdout. Es compatible con todos los sistemas de operaciones.,

Establezca su servidor SMTP en localhost: 1025

python -m smtpd -n -c DebuggingServer localhost:1025

para ejecutar el servidor SMTP en el puerto 25, necesitará permisos de root:

sudo python -m smtpd -n -c DebuggingServer localhost:25

le ayudará a verificar si su código está funcionando y señalar los posibles problemas si hay alguno. Sin embargo, no le dará la oportunidad de comprobar cómo se representa su plantilla de correo electrónico HTML.,

Falso servidor SMTP

Falso servidor SMTP imita el trabajo de un verdadero 3ª parte del servidor web. En otros ejemplos en este post, usaremos Mailtrap. Más allá de probar el envío de correo electrónico, nos permitirá verificar cómo se renderizará y mostrará el correo electrónico, revisar los datos sin procesar del mensaje y nos proporcionará un informe de spam., Mailtrap es muy fácil de configurar: solo tendrá que copiar las credenciales generadas por la aplicación y pegarlas en su código.

así es como se ve en la práctica:

Mailtrap que hace las cosas aún más fácil. Vaya a la sección integraciones en la pestaña Configuración de SMTP y obtenga la plantilla lista para usar del mensaje simple, con sus credenciales de Mailtrap., Es la opción más básica de instruir su script Python sobre quién envía qué a quién es el método de instancia sendmail ():

pruebe Mailtrap gratis

el código parece bastante sencillo, ¿verdad? Echemos un vistazo más de cerca y agreguemos un poco de manejo de errores (vea las #explicaciones intermedias). Para detectar errores, usamos los bloques» try «y» except». Consulte la documentación para obtener la lista de excepciones aquí.,

una vez que obtenga el resultado enviado en Shell, debería ver su mensaje en su bandeja de entrada de Mailtrap:

enviando correo electrónico HTML

en algunos casos, debe agregar algún formato, enlaces o imágenes a sus notificaciones por correo electrónico. Podemos simplemente poner todo esto con el contenido HTML. Para este propósito, Python tiene un paquete de correo electrónico.

nos ocuparemos del tipo de mensaje MIME, que es capaz de combinar HTML y texto plano. En Python, es manejado por el correo electrónico.módulo mime.,

Es mejor escribir una versión de texto y una versión HTML por separado, y luego combinarlas con la instancia MIMEMultipart(«alternativa»). Esto significa que dicho mensaje tiene dos opciones de representación en consecuencia. En caso de que un HTML no se procese correctamente por alguna razón, una versión de texto seguirá estando disponible.

Input:

Output:

envío de correos electrónicos con archivos adjuntos en Python

el siguiente paso para dominar el envío de correos electrónicos con Python es adjuntar archivos., Los archivos adjuntos siguen siendo los objetos MIME, pero necesitamos codificarlos con el módulo base64. Un par de puntos importantes sobre los archivos adjuntos:

  1. Python le permite adjuntar archivos de texto, imágenes, archivos de audio e incluso aplicaciones. Solo necesita usar la clase de correo electrónico adecuada, como correo electrónico.mímica.audio.MIMEAudio o correo electrónico.mímica.imagen.MIMEImage. Para obtener la información completa, consulte esta sección de la documentación de Python. Además, puede consultar los ejemplos proporcionados por Python para una mejor comprensión.
  2. recuerde sobre el tamaño del archivo: enviar archivos de más de 20MB es una mala práctica.,

en los correos electrónicos transaccionales, los archivos PDF son los más utilizados: generalmente obtenemos recibos, boletos, tarjetas de embarque, confirmaciones de pedidos, etc. Así que vamos a revisar cómo enviar una tarjeta de embarque como un archivo PDF.

Entrada:

adjuntar varios archivos, puede llamar al mensaje.attach() método varias veces.

cómo enviar un correo electrónico con imágenes

Las imágenes, incluso si forman parte del cuerpo del mensaje, también son archivos adjuntos., Hay tres tipos de ellos: archivos adjuntos CID (incrustados como un objeto MIME), imágenes base64 (incrustación en línea) e imágenes vinculadas. Hemos descrito sus peculiaridades, pros y contras, y la compatibilidad con la mayoría de los clientes de correo electrónico en este post.

saltemos a ejemplos.

Para añadir un CID apego, vamos a crear un mensaje de varias partes MIME con MIMEImage componente:

Salida:

El CID imagen se muestra como parte del mensaje HTML y como un archivo adjunto., Los mensajes con este tipo de imagen a menudo se consideran spam: consulte la pestaña Analytics en Mailtrap para ver la tasa de spam y las recomendaciones sobre su mejora. Muchos clientes de correo electrónico, Gmail en particular, no muestran imágenes CID en la mayoría de los casos. Así que vamos a revisar cómo incrustar una imagen codificada base64.

Aquí vamos a utilizar base64 módulo y experimentar con el mismo archivo de imagen:

Resultado:

Ahora la imagen está incrustado en el código HTML del mensaje y no está disponible como archivo adjunto., Python ha codificado nuestra imagen jpg, y si vamos a la pestaña fuente HTML, veremos la cadena de datos de imagen larga en el img src.

cómo enviar varios correos electrónicos en Python

enviar varios correos electrónicos a diferentes destinatarios y hacerlos personales es lo especial de los correos electrónicos en Python.

para agregar varios destinatarios más, puede escribir sus direcciones separadas por una coma, agregar CC y BCC. Pero si trabajas con un envío masivo de correo electrónico, Python te ahorrará con bucles.

Una de las opciones es crear una base de datos en un .,formato csv (Suponemos que se guarda en la misma carpeta que su script Python).

a menudo vemos nuestros nombres en ejemplos transaccionales o incluso promocionales. Así es como podemos hacerlo con Python.

vamos a organizar la lista en una tabla simple con solo dos columnas: Nombre y dirección de correo electrónico. Debería verse como el siguiente ejemplo:

#name,emailJohn Johnson,[email protected] Peterson,[email protected]

el siguiente código abrirá el archivo y loop sobre sus filas línea por línea, reemplazando el {nombre} con el valor de la columna «Nombre».,

Input:

después de ejecutar el script, obtenemos la siguiente respuesta:

Sent to John JohnsonSent to Peter Peterson>>> 

Output

en nuestra bandeja de entrada de Mailtrap, vemos dos mensajes: uno para John Johnson y otro para Peter Peterson, entregados simultáneamente:

envío de correos electrónicos con python a través de Gmail

Cuando esté listo para enviar correos electrónicos a destinatarios reales, puede configurar su servidor de producción. También depende de sus necesidades, objetivos y preferencias: su host local o cualquier SMTP externo.,

Una de las opciones más populares es Gmail, así que echémosle un vistazo más de cerca.

a menudo podemos ver títulos como»Cómo configurar una cuenta de Gmail para el desarrollo». De hecho, significa que creará una nueva cuenta de Gmail y la usará para un propósito particular.

para poder enviar correos electrónicos a través de su cuenta de Gmail, debe proporcionar acceso a ella para su aplicación. Puede Permitir aplicaciones menos seguras o aprovechar el protocolo de autorización OAuth2. Es una manera más difícil pero recomendable debido a las razones de seguridad.,

Además, para usar un servidor de Gmail, debe saber:

  • El nombre del servidor = smtp.gmail.com
  • port = 465 para conexión SSL / TLS (preferido)
  • O port = 587 para conexión STARTTLS.
  • username = your Gmail email address
  • password = your password.

si tiendes a la simplicidad, entonces puedes usar Yagmail, el dedicado Gmail / SMTP. Hace que el envío de correo electrónico sea realmente fácil., Simplemente compare los ejemplos anteriores con estas varias líneas de código:

Transactional email services

Gmail es gratuito y ampliamente utilizado, pero todavía tiene limitaciones para el envío de correo electrónico. Si sus necesidades van mucho más allá de las reglas de Gmail, elija una de las opciones de servicios transaccionales, o como también se les llama, servicios de API de correo electrónico.

Python es compatible con la gran mayoría de las API de correo electrónico de confianza para que pueda elegir de acuerdo con sus preferencias y presupuesto.,

Aquí hay algunas guías sobre el envío de correos electrónicos con Python a través de la lista de los servicios más populares:

  • Amazon SES
  • Mailgun
  • Mandrill
  • matasellos
  • Sendgrid
  • SocketLabs

próximos pasos con correos electrónicos en Python

hemos demostrado solo opciones básicas de envío de correos electrónicos con Python, para describir la lógica y una gama de sus capacidades. Para obtener excelentes resultados, recomendamos revisar la documentación de Python y experimentar con su propio código.,

hay un montón de varios frameworks y bibliotecas de Python, que hacen que la creación de aplicaciones sea más elegante y dedicada. En particular, algunos de ellos pueden ayudar a mejorar su experiencia con la creación de la funcionalidad de envío de correos electrónicos:

los marcos más populares son:

  1. Flask, que ofrece una interfaz simple para el envío de correo electrónico— Flask Mail.
  2. Django, que puede ser una gran opción para crear plantillas HTML. (Y aquí está nuestro tutorial sobre cómo enviar correos electrónicos con Django).
  3. Zope es útil para el desarrollo de sitios web.,
  4. Marrow Mailer es un marco de entrega de correo dedicado que agrega varias configuraciones útiles.
  5. Plotly y su guión pueden ayudar con gráficos de correo e informes.