fbpx
email python

Enviando emails con Python. Guía completa.

Esta es una guía rápida, completa y precisa de cómo enviar emails utilizando Python para automatizar este proceso.

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.

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!")
Banner-Bootcamp-W23
Únete a nuestro Bootcamp

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.

emai_test

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!

email_python_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

python-this-is-awesome

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.

email_python_attachment

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.

Banner-Bootcamp-W23
Únete a nuestro Bootcamp

Si tiene alguna pregunta, no dude en comentar a continuación.

¿Te gustó el artículo? Comparte con tus amigos
Imagen por defecto
Hever Rubio
Biodegradable. Desarrollador de software y apasionado por la tecnología.
Artículos: 42

5 comentarios

  1. 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

  2. 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’)

Deja un comentario

Dirección
Torre DG. Av. Adolfo Ruíz Cortínes 1344.
Villahermosa, Tabasco 86035

Hecho en 🇲🇽 con ❤️