Uno de los principales intereses de los lenguajes de programación, como Python, es automatizar tareas como el envío de correo. En este tutorial veremos cómo escribir un programa en Python para enviar un correo electrónico desde una cuenta de Gmail.
Este tutorial se puede aplicar a cualquier ordenador, incluido un Raspberry Pi.
Para enviar correos desde un microcontrolador compatible con Arduino. Puedes leer este tutorial.
Material
- Ordenador o Raspberry Pi
- Cuenta de Gmail
Cómo funciona
Para enviar un correo con Python, utilizaremos el protocolo SMTP (Simple Mail Transfer Protocol), por lo que utilizaremos un servidor que gestione el envío de correo. Como el servidor smtp de Gmail. Para utilizar este servidor, necesitas una cuenta de Gmail (creación gratuita) y activar la validación en dos pasos.
Configuración de la cuenta de Gmail
En la página de gestión de la cuenta, ve a la pestaña «Seguridad» y busca la casilla «Acceder a Google».
Añade la validación en dos pasos.
Generar una contraseña de acceso a la cuenta para una aplicación determinada
Todo lo que tienes que hacer es copiar el ID de usuario (la dirección de Gmail) y la contraseña emitida por Google (inserto amarillo de arriba) en el código Python de abajo.
Esta función está deliberadamente simplificada para mostrar el envío del correo, pero es posible modificarla para enviar un asunto, cuerpo del mensaje e información diferentes.
Código
Para gestionar el protocolo STMP, utilizaremos la biblioteca stmplib que puedes instalar con el comando
pip install smtplib
Para facilitar la reutilización del código, hemos creado la EmailSenderClass para facilitar el envío de correo. No olvide sustituir la dirección del destinatario «destinataire@email.com» por la suya propia en la parte inferior de la secuencia de comandos en el
email.sendHtmlEmailTo("Admin","destinataire@email.com","Ceci est un mail automatique envoyé à partir d'un script Python.")
#!/usr/bin/env python # -*- coding: utf-8 -*- #Libraries import sys import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders from email.header import Header from email.utils import formataddr EMAIL_HTML_TEMPLATE="""<html> <head> </head> <body> <p style ="margin: 5px 0;line-height: 25px;">Bonjour {},<br> <br> Ceci est un mail au format html. <br> {} <br> Bien à vous,<br> {} <br> </p> </body> </html> """ class EmailSenderClass: def __init__(self): """ """ self.logaddr = "<gmail address>" self.fromaddr = "contact@domaine.com"# alias self.password = "<gmail app password"# def sendMessageViaServer(self,toaddr,msg): # Send the message via local SMTP server. server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(self.logaddr, self.password) text = msg.as_string() server.sendmail(self.fromaddr, toaddr, text) server.quit() def sendHtmlEmailTo(self,destName,destinationAddress,msgBody): #Message setup msg = MIMEMultipart() msg['From'] = "Me<"+self.fromaddr+">" msg['To'] = destinationAddress msg['Subject'] = "Hello mail" hostname=sys.platform txt = EMAIL_HTML_TEMPLATE txt=txt.format(destName,msgBody,hostname) #Add text to message msg.attach(MIMEText(txt, 'html')) print("Send email from {} to {}".format(self.fromaddr,destinationAddress)) self.sendMessageViaServer(destinationAddress,msg) if __name__ == "__main__": email= EmailSenderClass() email.sendHtmlEmailTo("Admin","destinataire@email.com","Ceci est un mail automatique envoyé à partir d'un script Python.")
Resultado
Después de ejecutar el script, debería recibir en su bandeja de entrada el correo electrónico descrito en el programa.