Django Dynamic Email Settings
I build a lot of projects in Django, and there are very few projects around that don’t need the ability to send email to some capacity.
In the past, I’ve been copying and pasting a very simple custom EmailBackend
that I created and with the help of django-solo
, integrated into the admin panel so you can edit email settings like hostname, username and password, etc. straight from the Django admin panel.
The Package
After using it successfully for so long, I decided it was time to create a reusable Django app so other people can use it, as well as to simplify the integration of the tool into future projects that I build. The result is django-des
, or Django Dynamic Email Settings. A small reusable app that does this all for you. I’m very happy with the result:
How it works
Django DES works by providing a Django Admin integration and a custom email backend called the ConfiguredEmailBackend
. Whenever a message is sent, a backend is instantiated for the connection. The ConfiguredEmailBackend
retrieves settings set by the user in the Django Admin panel before sending the email.
One thing worth mentioning is the order of preferences. If something is set in the admin panel, provided in settings.py
, and passed in as a kwarg to the ConfiguredEmailBackend
constructor, the precedence of those settings is as follows, from highest to lowest
- Arguments explicitly passed to the
ConfiguredEmailBackend
- Parameters configured in the Django Admin panel
- Parameters set in
settings.py
(fallback)
Features
The primary goal of this project was to create a simple and interactive way to configure email. Often it takes a few tries to get that first test email sent, and
- Configure all common SMTP email settings directly in the Django admin panel
- Send test emails from a handy object tool in the admin panel
- Integrate seamlessly with other great mail libraries like
django-mailer
- Customize test email message and subject with the
DES_TEST_SUBJECT
andDES_TEST_TEXT_TEMPLATE
settings - Support testing HTML emails with the
DES_TEST_HTML_TEMPLATE
setting
Installation
-
Install
django-des
:$ pip install django-des
-
Add it to your
INSTALLED_APPS
:INSTALLED_APPS = ( ... 'des', ... )
-
Add
django-des
’sConfiguredEmailBackend
tosettings.py
:EMAIL_BACKEND = 'des.backends.ConfiguredEmailBackend'
-
Add the URLs:
from des import urls as des_urls urlpatterns = [ ... url(r'^django-des/', include(des_urls)), ]
You can now visit http://127.0.0.1:8000/admin/des/dynamicemailconfiguration/ and configure your SMTP email settings and send a test email.
Future Features
I’d like to support the option to upload your SSL keyfile and SSL certfile directly to the admin panel, as the Use SSL setting isn’t very helpful without it, since you will still need to configure the key and cert in settings.py
.
Obviously, there are some security considerations to be made here. How to I manage the permissions of the certfiles to only allow authorized processes and users to access them? How to I ensure they aren’t exposed via a user’s static or media file configuration? Once I have an answer here, I might add this feature. If you’ve got that answer, feel free to open a pull request!