Cómo enviar mensajes de correo electrónico automatizados en Python

Si bien los clientes de correo electrónico comercial ofrecen la conveniencia de una GUI fácil de usar, a menudo carecen de la flexibilidad y personalización que muchos desarrolladores o creadores de contenido desean para sus necesidades de envío de correos electrónicos.

Ya sea para enviar un correo electrónico de agradecimiento a un nuevo suscriptor en su canal de redes sociales o agregar la funcionalidad de correo electrónico a su último proyecto, la capacidad de enviar mensajes automatizados usando SMTP en Python es algo que seguramente será útil.

Siga leyendo para descubrir cómo puede obtener una secuencia de comandos de Python para enviar correos electrónicos que se ejecutan en su máquina hoy.

¿Qué es SMTP?

En pocas palabras, SMTP, o Simple Mail Transfer Protocol, es un protocolo de comunicación para que los servidores de correo transmitan correo electrónico a través de Internet.

Es una parte integral de la capa de aplicación de la suite TCP / IP, que es un conjunto de protocolos que se utilizan para la comunicación a través de Internet u otras redes similares. En una red donde se implementa SMTP, un proceso conocido como almacenar y reenviar ayuda a mover el correo a través de las redes.

En cada punto final, el software conocido como Agente de transferencia de correo (MTA) utiliza el almacenamiento y el reenvío para facilitar la comunicación entre los servidores SMTP participantes. La función principal de SMTP, por lo tanto, es simplemente dictar dónde y cómo se mueve el correo de un punto a otro en una red.

Empezando

Necesita tener una cuenta de correo electrónico para usarla para enviar correos electrónicos usando este programa. Esto se debe a que utilizaremos el servicio SMTP del cliente de correo electrónico para enviar correos electrónicos. Para este tutorial, usaremos Gmail.

También puede usar un servidor de depuración SMTP local para enviar correos electrónicos de prueba, pero por ahora usaremos una cuenta de correo electrónico para enviar correos electrónicos, ya que es más intuitivo.

Es posible simplemente usar una cuenta de Gmail existente, pero mientras juegas con tu programa, es posible que pronto se llene de correos electrónicos de prueba. Es por eso que recomendamos crear una cuenta 'desechable' con el propósito de realizar pruebas.

Ahora, active la opción para permitir que aplicaciones menos seguras accedan a su cuenta de Gmail. Esta es otra razón para usar un correo electrónico desechable, ya que no se recomienda jugar con la configuración de privacidad de su correo electrónico principal.

Escribir el correo electrónico en Python

Python 3 viene preinstalado con un módulo llamado smtplib (abreviatura de biblioteca smtp), que se puede usar para trabajar con servidores SMTP.

Como cualquier otro módulo de Python, lo primero que debe hacer es importar smtplib.

 import smtplib

Inicializar un objeto SMTP

Ahora, puede utilizar smtplib para crear un objeto SMTP, que le proporcionará la mayor parte de la funcionalidad de un cliente de correo electrónico convencional. Sin embargo, las funciones de un objeto SMTP solo se pueden utilizar mediante métodos de instancia. Entonces, naturalmente, el siguiente paso es declarar una instancia de objeto.

 mySMTP = smtplib.SMTP("smtp.google.com")

Esto configura el objeto SMTP para enviar correos electrónicos utilizando el servidor SMTP de Google.

Después de esto, especificamos los correos electrónicos del remitente y el destinatario. Aquí es donde la cuenta de Gmail que creó anteriormente es útil.

 emailSender = “senderMail@sender.com”
myThroaway = "myEmail@gmail.com"
emailRecipients = [myThroaway]

Una cosa a tener en cuenta aquí es que la lista de destinatarios es en realidad una matriz, lo que significa que está diseñada para almacenar valores no atómicos. Como resultado, ¡incluso puede especificar una lista de correo completa en este campo!

Escribir el mensaje

Podría decirse que la parte más sencilla del proceso, aquí debe ingresar valores que normalmente agregaría al redactar un nuevo correo electrónico. Esto incluye:

  • Datos del remitente
  • Datos del destinatario
  • Sujeto
  • Cuerpo del mensaje

Estos campos se ponen juntos dentro de comillas triples y se delimitan de la siguiente manera:

 newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""

Envío del correo electrónico

Finalmente, podemos usar el comando sendmail para enviar el correo desde su servidor SMTP al servidor del destinatario.

 mySMTP.sendmail(emailSender, emailRecipients, newEmail)

Ahora, solo hay un paso final: reorganizar el código para evitar fallas previsibles del programa.

Solución de problemas de su programa de correo electrónico de Python

A veces, su servidor SMTP puede fallar al establecer una conexión con el del destinatario, o puede haber un problema al enviar un correo electrónico de un puerto SMTP a otro. En tal caso, su programa podría fallar inesperadamente.

Para tener en cuenta estas posibilidades, puede utilizar un bloque try-except y colocar las declaraciones propensas a errores dentro del bloque try . Todo el programa, junto con el bloque try-except, debería verse así:

 import smtplib
emailSender = “senderMail@sender.com”
myThroaway = 'my_email@gmail.com'
emailRecipients = [myThroaway]
newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""
try:
smtpObj = smtplib.SMTP('smtp.gmail.com')
mySMTP.sendmail(emailSender, emailRecipients, newEmail)
print (“Email sent successfully!”)
except SMTPException:
print ("Error: There was an error in sending your email.")

Asegurar sus correos electrónicos

Si tiene la intención de utilizar Python en un entorno del mundo real para enviar correos electrónicos, es importante asegurarse de que la comunicación sea segura en ambos extremos.

El uso de un servidor SMTP simple con el puerto predeterminado no proporciona ninguna capa de cifrado a la comunicación. Esto significa que si un tercero está escuchando en su red, puede acceder a sus credenciales de inicio de sesión y a la información contenida en su correo electrónico.

Una forma de evitar este problema es utilizar el protocolo TLS (Transport Layer Security) para cifrar su comunicación. Este es el mismo protocolo utilizado por los principales clientes de correo electrónico, como Gmail y Outlook, para garantizar que sus correos electrónicos nunca caigan en las manos equivocadas.

Para hacerlo, necesitamos realizar algunos cambios menores en el programa que creamos anteriormente.

El primer paso, por supuesto, es importar la biblioteca ssl junto con smtplib . La biblioteca ssl le brinda la capacidad de crear un contexto SSL seguro y comunicarse a través de una red encriptada conectándose a puertos específicos en ambos extremos.

Un contexto SSL seguro no es más que una colección de cifrados, versiones de protocolo, certificados confiables, opciones TLS y extensiones TLS.

Después de esto, podemos especificar el puerto TLS y agregar algunas funciones de la biblioteca ssl para crear un correo electrónico seguro.

El código, con todos los cambios realizados, se parece a esto:

 import smtplib, ssl
smtpServer = "smtp.gmail.com"
port = 587
myEmail = "my_email@gmail.com"
password = "my_password"
#email and password can also be user input fields
context = ssl.create_default_context()
newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""
try:
server = smtplib.SMTP(smtpServer,port)
server.starttls(context=context)
server.login(newEmail, password)
except Exception as e:
print("the email could not be sent.")
finally:
server.quit()

Como antes, debe crear y usar la instancia SMTP en un bloque try-except para evitar bloqueos abruptos del programa.

Qué puede hacer con este script de Python

Ahora que ha adquirido la habilidad asombrosa y sorprendentemente útil de automatizar correos electrónicos usando código, puede aplicarlo a cualquier plataforma que requiera enviar correos electrónicos a una lista de correo diversa.

Desde usarlo en su sitio web personal para enviar correos electrónicos de reconocimiento automatizados hasta usarlo para enviar tarjetas de Navidad o invitaciones a su familia y amigos, los usos de este pequeño script de Python están limitados solo por su propia creatividad.

Además, esta es solo una de las muchas cosas increíbles que puede hacer con Python. Con su soporte omnipresente para desarrolladores y su sintaxis fácil de aprender, adquirir una habilidad en Python nunca ha sido tan fácil.

Para seguir creando cosas interesantes con código, consulte nuestra guía sobre cómo crear su propio bot de Telegram con Python 3 .