#Django – Enviar correo en formato #html

Despues de horas y horas de surfear por la red de redes encontre una via para que Django los correos que mande tenga un estilo html, atractivo y no en texto planto encontre esa forma de enviar emails desde Django es mas sencillo de lo que creías y puedes enviar emails haciendo uso de templates de la misma manera que realizas el render de templates en tus vistas.

Características
*Enviar emails con contenido HTML y con un backup de contenido plano en TXT.
*Pasar variables al template del email

mail.py

from django.core.mail import EmailMultiAlternatives
from django.template import Context
from django.template.loader import get_template
 
def email_bienvenido(user):
  mail_plain = get_template('email/bienvenido.txt')
  mail_html  = get_template('email/bienvenido.html')
 
  d = Context({ 'user': user })
 
  subject       = 'Bienvenido(a) %s' % user.first_name
  from_email    = 'info@unicatel.com'
  to            = user.email
  text_content  = mail_plain.render(d)
  html_content  = mail_html.render(d)
  msg           = EmailMultiAlternatives(subject, text_content, from_email, [to])
  msg.attach_alternative(html_content, "text/html")
  msg.send()

El código anterior forma parte de nuestra función que se encargará de enviar, en éste caso, nuestro email de bienvenida a los usuario que acaban de registrarse. Con el deseo de mantener nuestro código ordenado es que llamaré a este archivo mail.py.

Consejos

Recuerda que la estructura del HTML de tu email es en tablas a diferencia de la estructura HTML común donde usando CSS puedes ordenar el contenido, es por ello que te recomiendo usar un boilerplate, yo encontré éste Email Boilerplate en GitHub.

Debes configurar el archivo settings.py de tu proyecto de Django para que realice el envío de emails a través de un servidor de SMTP, de los contrario tus correos no serán enviados.

6 Replies to “#Django – Enviar correo en formato #html”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*