arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Cómo enviar correos electrónicos con Django

Eduardo Ismael Garcia

Full Stack Developer at Código Facilito.

av_timer 1 Min. de lectura

remove_red_eye 22970 visitas

calendar_today 25 Octubre 2019

En esta ocasión aprenderemos a enviar correos electrónicos utilizando Django. Lo haremos de dos maneras, de forma secuencial y de forma concurrente.

Para este tutorial me apoyaré del servidor de correos gmail.

Bien, sin más que decir comencemos.

Configuración.

Lo primero que debemos hacer es configurar nuestro proyecto; para ellos modificaremos el archivo settings.py agregando 5 nuevas constantes.

Como estaremos trabajando con un servidor de correos externo, yo les recomiendo almacenar sus credenciales (user y password) en variables de entorno.

Una librería que me gusta recomendar para trabajar con variables de entorno es decouple. En mi caso haré uso de ella.

from decouple import config

EMAIL_HOST = 'smtp.googlemail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = config('USER_MAIL')
EMAIL_HOST_PASSWORD = config('USER_MAIL_PASSWORD')
EMAIL_USE_TLS = True

Para utilizar gmail como servidor de corres es necesario permitir el acceso de aplicaciones poco seguras.

Bien, una vez tengamos las configuraciones el siguiente paso es definir una función la cuales nos permita enviar los correos.

from django.conf import settings
from django.core.mail import EmailMultiAlternatives

def send_user_mail(user):
    subject = 'Titulo del correo'
    template = get_template('templates/mi_template_correo.html')

    content = template.render({
        'user': user,
    })

    message = EmailMultiAlternatives(subject, #Titulo
                                    ''",
                                    settings.EMAIL_HOST_USER, #Remitente
                                    [user.email]) #Destinatario

    message.attach_alternative(content, 'text/html')
    message.send()

Debemos importar la clase EmailMultiAlternatives y el módulo settings.

Lo primero que debemos hacer es generar nuestro mensaje, para ello nos apoyamos de EmailMultiAlternatives. Definimos el subject, el remitente y finalmente los destinatarios(Esto último mediante una lista).

El siguiente paso es agregar un cuerpo al mensaje. Para ello me apoyo de un template renderizado.

y finalmente, con el método send enviamos el correo.

El llamado de la función pudiera ser la siguiente.

user = User.objects.last()

send_user_mail(user)

Concurrente

Ahora enviaremos el correo de forma asíncrona, para ello haremos uso de un nuevo Thread.

import threading

thread = threading.Thread(target=send_user_mail, args(user, ))
thead.start()

Aumenta tu productividad con GitHub Copilot

  • done Curso GRATUITO
  • done Regístrate antes del 31 de Marzo
  • done Obtén una ventaja competitiva
  • done Aprovecha la IA a tu favor
Más información