Below is a quick snippet on how to send HTML emails with Django. If you have email.html in your templates folder (either app or project-wide), you can do:

from django.core.mail import send_mail, EmailMessage
from django.template.loader import render_to_string
from django.conf import settings

def send_html_email(to_list, subject, template_name, context, sender=settings.DEFAULT_FROM_EMAIL):
    msg_html = render_to_string(template_name, context)
    msg = EmailMessage(subject=subject, body=msg_html, from_email=sender, bcc=to_list)
    msg.content_subtype = "html"  # Main content is now text/html
    return msg.send()

Example


from .models import Subscriber

def notify_subscribers():
    emails = Subscriber.objects.all().values_list('email', flat=True)
    context = {
        'news': 'We have good news!'
    }
    
    send_html_email(emails, 'Good news', 'email.html', context, "[email protected]")

If you're like me and have a hard time designing a good email template, try this one: Really Simple Responsive HTML Email Template

Finally, Mailtrap is really awesome for testing HTML emails. It displays HTML previews, gives you an overview on Spam score, and even supports attachments. Really useful service.