🔋 Batteries-included emails for Django.
- Powerful templating engine
- Multipart emails by default (HTML + text)
- Web version rendering (with admin)
- Easy file attachment
- and more ...
-
Install the package:
pipenv install django-enhanced-emails
-
Create a new email class:
# myapp/emails.py from enhanced_emails import EnhancedEmail class WelcomeEmail(EnhancedEmail): subject = "Welcome to our site!" html_template = "emails/welcome.html"
<!-- myapp/templates/emails/welcome.html --> <strong>Welcome to our site {{first_name}}!</strong><br /> Best, The OurSite team
-
Instanciate an email and send it:
email = WelcomeEmail( to=[user.email], context={ "first_name": user.first_name } ) email.send()
-
✨ All done! Our user received something like:
Content-Type: multipart/alternative; boundary="===============7747654958126582044==" MIME-Version: 1.0 Subject: hello From: [email protected] To: [email protected] Date: Wed, 11 Apr 2018 17:13:02 -0000 Message-ID: <152346678269.275.17989388690220812241@cf7f5f3375c9> --===============7747654958126582044== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Welcome to our site Elon! Best, The OurSite team --===============7747654958126582044== Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit <strong>Welcome to our site Elon!</strong> Best, The OurSite team --===============7747654958126582044==--
-
Add the
enhanced_emails
app toINSTALLED_APPS
:# settings.py INSTALLED_APPS = [ ... "enhanced_emails", ... ]
-
Add a new entry to
urlpatterns
:# urls.py urlpatterns = [ path("admin/", admin.site.urls), path("emails/", include("enhanced_emails.urls")), ... ]
-
Use
WebVersionEnhancedEmail
instead ofEnhancedEmail
:from enhanced_emails import WebVersionEnhancedEmail class WelcomeEmail(WebVersionEnhancedEmail): subject = "Welcome to our site!" html_template = "emails/welcome.html"
-
Use the
web_url
variable in the email template:<!-- myapp/templates/emails/welcome.html --> <strong>Welcome to our site {{ first_name }}!</strong><br /> Best, The OurSite team<br /> <a href="{{ web_url }}">View in browser</a>
-
Instanciate an email and send it (notice that we need to pass the request as well now):
email = WelcomeEmail( to=[user.email], context={ 'first_name': user.first_name }, request=request ) email.send()
- Deploy:
python setup.py sdist && twine upload dist/*