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