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.
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
- Parameters configured in the Django Admin panel
- Parameters set in
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
- Customize test email message and subject with the
- Support testing HTML emails with the
$ pip install django-des
Add it to your
INSTALLED_APPS = ( ... 'des', ... )
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.
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
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!