Esta es una guía rápida, completa y precisa de cómo enviar emails utilizando Python para automatizar este proceso. Aprenderá a enviar un correo electrónico desde su servidor de correo electrónico a cualquier dirección. Comencemos.
Contenido
Enviando un email con Python
Paso 1: Importar librerías
Python cuenta con algunas librerías integradas que facilitan el envío de correos. Para esta guía estaremos utilizando particularmente smtplib
y email.message
SMTP es un protocolo de comunicación utilizado para enviar correos electrónicos. El módulo de Python smtplib nos permite definir un cliente SMTP desde el que podemos usar para enviar correos electrónicos.
El módulo email.message se utiliza para ensamblar la estructura del correo electrónico que incluye el asunto, la dirección y el contenido del correo electrónico. Desde el módulo email.message, solo necesitaremos la clase EmailMessage.
Para hacer uso de las funciones necesarias, declare lo siguiente en la parte superior del archivo Python.
import smtplib
from email.message import EmailMessage
Paso 2: Configurar campos de encabezado de correo electrónico
Primero, usando la clase EmailMessage()
crearemos un objeto que contendrá todos los detalles del mensaje de correo electrónico.
# Create an email message object
message = EmailMessage()
A continuación, podemos agregar los detalles del encabezado del mensaje de correo electrónico para especificar el asunto, la dirección de envío y la dirección de recepción como se muestra a continuación.
email_subject = "Email test from Python"
sender_email_address = "your_email@gmail.com"
receiver_email_address = "receiver_email@address.com"
# Configure email headers
message['Subject'] = email_subject
message['From'] = sender_email_address
message['To'] = receiver_email_address
Paso 3: Configurar el cuerpo del mensaje
Para este ejemplo, el contenido del mensaje será un mensaje de texto sin formato. El cuerpo del correo electrónico se establece mediante el método set_content
en el objeto de correo electrónico de la siguiente manera.
# Set email body text
message.set_content("Hello from Python!")
Paso 4: Configurar el servidor de correo
Un servidor de correo electrónico es una aplicación que se utiliza para enviar y recibir correos electrónicos. Dichos servidores utilizan el protocolo SMTP para enviar correos electrónicos a otros servidores.
El servidor a utilizar dependerá de su proveedor de correo electrónico. Para gmail, el servidor de correo es smtp.gmail.com o para hotmail es smtp.live.com.
Si no está utilizando gmail o hotmail, puede buscar en esta lista de servidores de correo electrónico smtp para encontrar el servidor correcto para su proveedor de correo electrónico.
En nuestro ejemplo, diremos que el correo electrónico se envía desde una cuenta de Gmail, por lo que debemos usar smtp.gmail.com como nuestro servidor.
Nota: De forma predeterminada, Gmail bloquea el acceso a clientes de terceros desconocidos que acceden a su cuenta de Gmail, como nuestro programa Python. Si está utilizando gmail, para que este programa de Python funcione, vaya a la configuración de seguridad de su cuenta de Gmail y active el acceso a aplicaciones menos seguras. Puede leer más sobre esta configuración en la página de soporte de Gmail.
Otra configuración que debemos configurar para nuestro servidor SMTP es el puerto de correo. Este es el puerto de red que será utilizado por nuestra aplicación Python cliente para enviar correos electrónicos a otro servidor. Usaremos el puerto SMTP 587, que es el puerto predeterminado que se usa para manejar el envío de correos electrónicos a través de SMTP. También utiliza el cifrado TLS para garantizar que el correo electrónico se entregue de forma segura.
A continuación, se muestra cómo configurar el servidor de correo SMTP y el número de puerto. Si su cuenta de correo electrónico no es de Gmail, debe reemplazar el valor de email_smtp con su propio servidor de cuenta de correo electrónico.
# Set smtp server and port
email_smtp = "smtp.gmail.com"
server
= smtplib.SMTP(email_smtp, '587')
Después de declarar el servidor, necesitamos algunos pasos adicionales para realizar la conexión al servidor SMTP.
Esto implica identificarnos en el servidor usando la función ehlo()
y luego iniciar la conexión TLS segura al servidor usando starttls()
.
email_smtp = "smtp.gmail.com"
# Set smtp server and port
server = smtplib.SMTP(email_smtp, '587')
# Identify this client to the SMTP server
server.ehlo()
# Secure the SMTP connection
server.starttls()
Paso 5: Enviar el email
El último paso es enviar el correo electrónico.
Primero, debemos iniciar sesión en nuestro correo electrónico SMTP utilizando la función de inicio de sesión. Pasamos la dirección de correo electrónico y la contraseña que usamos al iniciar sesión en nuestra cuenta de correo electrónico.
Después de esto, simplemente podemos iniciar el envío del correo electrónico usando send_message
y pasar el objeto que contiene el contenido del mensaje que configuramos previamente.
Finalmente usamos quit()
para finalizar la conexión al servidor SMTP.
sender_email_address = "your_email@gmail.com"
email_password = "your_email_password"
# Login to email account
server.login(sender_email_address, email_password)
# Send email
server.send_message(message)
# Close connection to server
server.quit()
Paso 6: Uniendo todo
Para finalizar, así es como se verá su archivo de Python cuando se combinen los fragmentos de código anteriores.
import smtplib
from email.message import EmailMessage
email_subject = "Email test from Python"
sender_email_address = "your_email@gmail.com"
receiver_email_address = "receiver_email@address.com"
email_smtp = "smtp.gmail.com"
email_password = "your_email_password"
# Create an email message object
message = EmailMessage()
# Configure email headers
message['Subject'] = email_subject
message['From'] = sender_email_address
message['To'] = receiver_email_address
# Set email body text
message.set_content("Hello from Python!")
# Set smtp server and port
server = smtplib.SMTP(email_smtp, '587')
# Identify this client to the SMTP server
server.ehlo()
# Secure the SMTP connection
server.starttls()
# Login to email account
server.login(sender_email_address, email_password)
# Send email
server.send_message(message)
# Close connection to server
server.quit()
Ejecute su aplicación Python y la dirección de correo electrónico del destinatario debería recibir el mensaje de la cuenta de correo electrónico del remitente.
Bonus: Añade contenido HTML al mensaje
Lo siguiente es para demostrar cómo configurar el cuerpo de su correo electrónico para contenido HTML. El procedimiento de configuración del servidor de correo electrónico sigue siendo el mismo.
Primero leeremos el contenido de un archivo que contiene HTML y luego enviaremos el contenido por correo electrónico.
Un archivo llamado message.html contendrá algo de HTML simple, aquí está el contenido.
<!DOCTYPE html>
<head>
</head>
<body>
<h1>Sending an HTML email from Python</h1>
<p>Hello there,</p>
<a href="https://loopgk.com/">Here's a link to an awesome dev community</a>
</body>
</html>
Nuestro programa Python primero leerá el contenido del archivo. Luego agregamos el contenido al objeto de mensaje usando el método set_content como hicimos cuando configuramos el texto sin formato. La única diferencia es que especificamos que el contenido es de tipo HTML usando la opción subtype = ’html’.
# Create an email message object
message = EmailMessage()
# Read file containing html
with open('message.html', 'r') as file:
file_content = file.read()
# Add message content as html type
message.set_content(file_content, subtype='html')
Todas las demás partes del programa siguen siendo las mismas. Ejecute el programa Python y la dirección de correo electrónico del destinatario recibirá el mensaje, ¡esta vez en formato HTML!
Bonus: Enviando una imagen como archivo adjunto
Veamos cómo enviar una imagen adjunta con su correo electrónico.
Primero necesitamos abrir la imagen y leerla en formato binario. La imagen que queremos enviar como adjunto se llama image.jpg
Lo siguiente leerá la imagen como binaria y la almacenará en la variable image_data.
# Open image as a binary file and read the contents
with open('image.jpg', 'rb') as file:
image_data = file.read()
Para agregar un archivo adjunto al objeto de correo electrónico, usamos la función add_attachment
y pasamos los datos de la imagen que leemos en formato binario.
También necesitamos agregar algunas opciones para especificar el tipo de imagen. Agregue la opción maintype = ’image’
y también agregue la opción subtype = imghdr.what(None, image_data).
La opción de subtipo usa el módulo imghdr para determinar el tipo de nuestra imagen. Para usar este módulo, necesitamos agregar una importación de módulo adicional en la parte superior de nuestro programa Python.
import imghdr
El código Python se verá de la siguiente manera para leer los datos de la imagen, establecer un cuerpo de correo electrónico de texto sin formato y adjuntar la imagen al correo electrónico.
# Create an email message object
message = EmailMessage()
# Open image as a binary file and read the contents
with open('image.jpg', 'rb') as file:
image_data = file.read()
message.set_content("Email from Python with image attachment")
# Attach image to email
message.add_attachment(image_data, maintype='image', subtype=imghdr.what(None, image_data))
Todas las demás partes del programa siguen siendo las mismas. Ejecute el programa Python y la dirección de correo electrónico del destinatario recibirá el mensaje de texto sin formato junto con la imagen como archivo adjunto.
Conclusión
¡Esperamos que ahora esté familiarizado con el proceso de envío de correos electrónicos con Python! Siga estas instrucciones paso a paso y podrá ejecutar su propia aplicación para enviar correos electrónicos a una dirección de recepción.
Si tiene alguna pregunta, no dude en comentar a continuación.
Me ha funcionado perfecto, muchas gracias
Buenas, desde el 30 de mayo google ya no permite que aplicaciones de 3º envíen correos electrónicos con sus cuentas seguí vuestra guía hace un mes mas o menos para un proyecto escolar y debido a este cambio ya no funciona. Mi pregunta es si sabéis si hay alguna manera de configurar la cuenta de google para que siga funcionado con vuestra guía, ya que he intentado modificar el correo usando yahoo que leí que funcionaba muy bien pero mi web no tiene protocolos SSL/TLS ya que es un proyecto escolar y me da errores por esos protocolos.
Cualquier cosa que me respondais me va a venir bien.
Muchas gracias
-Ve a este link, espero te ayude
https://techexpert.tips/es/python-es/python-enviar-correo-electronico-usando-gmail/
Cuando corro el código me dice este error:
server.login(sender_email_address, email_password)
File “C:\Users\usuario\AppData\Local\Programs\Python\Python310\lib\smtplib.py”, line 750, in login
raise last_exception
File “C:\Users\usuario\AppData\Local\Programs\Python\Python310\lib\smtplib.py”, line 739, in login
(code, resp) = self.auth(
File “C:\Users\usuario\AppData\Local\Programs\Python\Python310\lib\smtplib.py”, line 662, in auth
raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b’5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials fq32-20020a0568710b2000b0010c222f9faesm4101986oab.10 – gsmtp’)
Funcionó