Django makes it really easy to send simple e-mail messages. But e-mails sometimes gets really complicated and un-DRY. That's where ClassyMail steps in.
Django-ClassyMail is a library for building e-mail messages in a fashion similar to django's class based views.
You can create mixins, override attributes with keyword arguments and there's a lot of builtin functionality. Just like class based views.
Django-ClassyMail will handle css inlining, timezone, language and urls for you.
Read the docs for more info:
https://django-classymail.readthedocs.org/en/latest/
And here's an example:
class UserEmail(ClassyMail):
"""
Sets language and timezone according to user preferences, adds "user" to
template context and sets recipient to user's email address.
"""
user = None
def get_timezone(self):
return self.user.get_profile().timezone
def get_language(self):
return self.user.get_profile().language
def get_to(self):
return [self.user.email]
def get_context_data(self):
data = super(UserMixin, self).get_context_data()
data['user'] = self.user
return data
class WelcomeEmail(UserEmail):
html_template_name = 'emails/welcome.html'
text_template_name = 'emails/welcome.txt'
def get_subject(self):
return _("Welcome %s! Thanks for joining us!") % self.user.first_name