¿Cómo enviar emails con Python?

Una de las implementaciones que podemos hacer cuando tenemos un proyecto es el envío de emails a nuestros usuarios, imagina que debemos enviarle un correo para que recupere su contraseña o si quieres enviar alguna promoción o mensaje de actualización para ellos. Esto lo podemos realizar con diferentes herramientas que se encuentran disponibles en el mercado, y en este post vamos a ver qué tan fácil es enviar un correo usando el lenguaje de programación Python.

Este post surge como alternativa para enviar correos electrónicos con el lenguaje de programación Python, en nuestros cursos de la Academia Hola Mundo hemos hecho uso de la herramienta SendGrid, la cual es sumamente fácil de utilizar, sin embargo, hemos tenido compañeros y compañeras que han tenido algunos problemas en poder utilizarla, esto por la autorización del propio servicio de SendGrid.

Este es uno de los tantos servicios y alternativas que tenemos para enviar mails, si quieres ver el proceso en video puedes darle una vista al curso Python: HTML, CSS, Flask y MySQL, y el siguiente Ultimate Python donde además hacemos uso de los paquetes nativos de Python para hacer el envío de correos

¿Cómo puedo enviar correos con Python?

Como te comentamos, algunas opciones para realizar el envío de correos son:

  • Utilizar los paquetes nativos de Python
  • Utilizar algún módulo de Python
  • Un servicio como SendGrid o Mailjet

Esta última herramienta es la que utilizaremos para hacer el proceso de envío de correos, lo primero que veremos al ingresar a su página principal es lo siguiente, has click aquí para ir a la página de inicio de mailjet:

Página de inicio de mailjet

Planes

Al igual que muchos servicios este tiene un plan gratuito y planes pago, esto depende de la cantidad de mails que vayas a enviar.

Planes y precios de mailjet
Planes y precios de mailjet

Por el momento para nuestras pruebas seleccionaremos el plan gratuito, una de las ventajas es que no se nos solicitará una tarjeta de crédito para poder comenzar a usar el servicio.

Para continuar con los pasos que seguiremos en este post, necesitarás crearte una cuenta en este servicio para poder utilizarlo, una vez realizado el registro, te enviarán al correo que registres un mensaje para confirmar la cuenta, esto es necesario para poder seguir avanzando, cuando acabes e ingreses a tu cuenta, deberías ver una pantalla similar a la siguiente:

Sesión iniciada en mailjet
Sesión iniciada en mailjet

Obtención de API Key

Para seguir con el proceso, necesitaremos obtener una API Key y una clave secreta, esos los vamos a obtener en esta página y verás una pantalla similar a esta:

Obteniendo la API y clave secreta
Obteniendo la API y clave secreta

Aqui tendrás a API KEY ya generada, es importante que no muestres estos datos a nadie, ya que estarías dando acceso libre a que cualquiera utilice tu cuenta, entonces, trata de mantener estos datos para tu uso personal.

El siguiente dato que tenemos que obtener en la clave secreta, la cual vamos a generar, en mi caso, ya se encuentra una generada, pero en esta misma página, aparecerá la opción para generar la clave, debajo del texto que nos dice «Clave Secreta», en ese momento nos permitirá hacer copiado de los dos datos, guárdalos en un lugar seguro, ya que los vamos a necesitar más adelante

Envío de Email

Este es un servicio que puede ser ocupado sin meternos a la parte de código, pero en este caso, se nos proporcionan guías para desarrolladores y comenzar así a usar este servicio, te dejaré la página de guias rapidas:

Ahora que estamos en esta página, vamos a hacer click en la pestaña de desarrollador, y como siguiente en donde dice «Envia tu primer Email«

Página de guías rápidas para desarrolladores
Página de guías rápidas para desarrolladores

Lo siguiente que veremos es la siguiente pantalla, donde tendremos dos opciones, hacer la integración con API o con un servidor SMTP, vamos a elegir la primera y daremos click en continuar

Página de instrucciones para enviar email usando API
Página de instrucciones para enviar email usando API

Posteriormente, vamos a poder elegir el lenguaje de programación que prefiramos en nuestro caso será Python.

Seleccionando lenguaje de programación
Seleccionando lenguaje de programación

Cuando seleccionemos Python, el siguiente paso será hacer la instalación de un módulo y lo haremos con el comando:

pip install mailjet_rest

o dependiendo de tu terminal de comandos:

pip3 install mailjet_rest

Ahora lo siguiente que veremos es el siguiente código que es con el que podremos hacer el envío de nuestro primer email, este lo podemos copiar directamente:

Instalación y código base
Instalación y código base

Script para envío de emails

Primero vamos a crear un archivo en nuestro editor de texto, en este caso yo lo he llamado mailer.py

En este debes de sustituir al api_key y el api_secret con los datos que obtuvimos previamente, la ventaja es que este servicio rellenará todos los campos con nuestra información haciendo que nuestro primer envío de correo sea sumamente sencillo. Con esto cambiado, ya puedes ejecutar el script y los correos serán enviados.

Pero vamos a ver cada una de las partes de los que contiene este código:

Lo primero sera relizar las importaciones y defininir las variables para api_key y api_secret, con esto podremos definir nuestro cliente que guardaremos en una variable llamada mailjet. Con este cliente es que vamos a poder enviar nuestros emails:

from mailjet_rest import Client
import os
api_key ="tu API_KEY"
api_secret = "tu API_secret"

mailjet = Client(auth=(api_key, api_secret), version='v3.1')

Ahora, lo siguiente será definir la data, el cual será un diccionario que contendrá en la clave «Messages» y como valor un array con los diferentes mensajes para enviar y cada uno será un diccionario que tendrá:

  • From y To, ambos también son diccionarios que contienen email y Name para colocar primero en From del remitente de nuestro mensaje y To para quien se enviará dicho mensaje,
  • subject: el asunto del correo,
  • Textpart/HTMLPart: serán el cuerpo del correo, por lo menos debemos tener una de estas 2 como especifica la documentación para enviar contenido en el correo
  • CustomID: En caso de que en nuestras aplicaciones necesitemos de colocarle un ID personalizado como que estemos guardando este registro en una base de datos, es que este campo nos servirá para hacer una identificación personalizada independiente a la que tiene el servicio de mailjet.
data = {
  'Messages': [
    {
      "From": {
        "Email": "gabriel@micorreo.com",
        "Name": "Gabriel"
      },
      "To": [
        {
          "Email": "gabriel@micorreo.com",
          "Name": "Gabriel"
        }
      ],
      "Subject": "Greetings from Mailjet.",
      "TextPart": "My first Mailjet email",
      "HTMLPart": "<h3>Dear passenger 1, welcome to <a href='https://www.mailjet.com/'>Mailjet</a>!</h3><br />May the delivery force be with you!",
      "CustomID": "AppGettingStartedTest"
    }
  ]
}

Por último, vamos a guardar en una variable result la ejecución del método create al que le pasaremos un argumento nombrado llamado data, con esto podemos imprimir el resultado de enviar nuestro correo:

result = mailjet.send.create(data=data)
print(result.status_code)
print(result.json())

Ejecutando el script

Ahora ejecutaremos nuestro script con el comando:

python mailer.py

o para terminales que usen comandos Linux:

python3 mailer.py

Si todo ha salido bien, vamos a poder ver en la consola algo similar a lo siguiente:

email enviado con éxito
email enviado con éxito

Esto quiere decir que nuestro correo se ha enviado exitosamente, si revisamos nuestra bandeja de entrada vamos a encontrar nuestro mensaje con el contenido que hemos enviado

Correo recibido
Correo recibido

Si regresamos a la pantalla principal de mailjet podremos ver que ya hemos enviado mensajes, en mi caso he realizado 3 envíos por eso a mí me marca 3.

Página de inicio con los correos enviados
Página de inicio con los correos enviados

Y si nos desplazamos más hacia abajo, vamos a ver el historial de los correos y qué status tiene, en mi caso, ya he abierto los 3 correos de prueba y se ven de la siguiente manera:

Historial de correos enviados
Historial de correos enviados

Te dejaré el código completo para realizar el envío de correos, esto nos lo proporciona la página y recuerda que si quieres hacer esta prueba es importante colocarle, tu correo, tu api_key y api_secret:

from mailjet_rest import Client
import os
api_key ="tu API_KEY"
api_secret = "tu API_secret"

mailjet = Client(auth=(api_key, api_secret), version='v3.1')
data = {
  'Messages': [
    {
      "From": {
        "Email": "gabriel@micorreo",
        "Name": "Gabriel"
      },
      "To": [
        {
          "Email": "gabriel@micorreo.com",
          "Name": "Gabriel"
        }
      ],
      "Subject": "Greetings from Mailjet.",
      "TextPart": "My first Mailjet email",
      "HTMLPart": "<h3>Dear passenger 1, welcome to <a href='https://www.mailjet.com/'>Mailjet</a>!</h3><br />May the delivery force be with you!",
      "CustomID": "AppGettingStartedTest"
    }
  ]
}
result = mailjet.send.create(data=data)
print(result.status_code)
print(result.json())

Si quieres aprender qué más podemos hacer para enviar emails con mailjet te dejaré la documentación oficial de esta herramienta.

Y si quieres tomar clases sobre los módulos nativos de python para enviar correos o de cómo se usa la herramienta sendGrid para el envío de correos, te dejaremos los cursos en los que los usamos estas herramientas:

Igualmente te dejaremos el enlace a todos nuestros cursos de programación, los cuales los encontrarás disponibles en la academia Hola Mundo y puedes optar por adquirir los cursos de manera individual en el siguiente link: todos los cursos de Hola Mundo, si prefieres acceso a todo, también puedes elegir un plan de suscripción mensual o anual, o tambien puedes optar por cada curso de manera individual en Udemy.

Y esto ha sido todo de este post, si te ha encantado, ¡golpea al botón de me gusta!, dejanos un comentario, y para no perderte nada, no olvides suscribirte a este blog, seguirnos en todas las redes como Youtube, Twitter, Instagram y Tiktok, y por último, te invitamos a escuchar nuestra música «Hola Beats«, diseñada para ayudarte a concentrarte y acompañarte en tu aprendizaje o trabajo, la puedes encontrar en Spotify, Apple Music, Amazon Music, Youtube Music y Deezer.

¡Hasta la próxima!, y chao mundo

Gabriel Hernández

Soy desarrollador fullstack autodidacta y estudié administración en la universidad. Mi stack es principalmente con JavaScript, haciendo frontend con React y Next, y backend con Node y Express. Otras herramientas con las que he trabajado son Python para backend y Solidity para desarrollo de contratos inteligentes.

Deja un comentario

Press ESC to close

Descubre más desde Hola Mundo

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo