Icono del sitio AranaCorp

Enviar un correo electrónico desde un script de Python

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

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.

Fuentes

Salir de la versión móvil