dj-email-url 
This utility is based on dj-database-url by Kenneth Reitz.
It allows to utilize the 12factor inspired environments variable to configure the email backend in a Django application.
Usage
Import the package in settings.py:
import dj_email_url
Fetch your email configuration values. The default option is fetch them from EMAIL_URL environment variable:
email_config = dj_email_url.config()
Other option is parse an arbitrary email URL:
email_config = dj_email_url.parse('smtp://...')
Finally, it is necessary to assign values to settings:
EMAIL_FILE_PATH = email_config['EMAIL_FILE_PATH']
EMAIL_HOST_USER = email_config['EMAIL_HOST_USER']
EMAIL_HOST_PASSWORD = email_config['EMAIL_HOST_PASSWORD']
EMAIL_HOST = email_config['EMAIL_HOST']
EMAIL_PORT = email_config['EMAIL_PORT']
EMAIL_BACKEND = email_config['EMAIL_BACKEND']
EMAIL_USE_TLS = email_config['EMAIL_USE_TLS']
EMAIL_USE_SSL = email_config['EMAIL_USE_SSL']
Alternatively, it is possible to use this less explicit shortcut:
vars().update(email_config)
Supported backends
Currently, dj-email-url supports:
Backend |
EMAIL_URL |
Description |
|---|---|---|
Console |
console: |
Writes to stdout (development) |
SMTP |
smtp: |
Sends using a mail transfer agent at localhost on port 25 |
SMTP |
submission://USER:PASSWORD@smtp.sendgrid.com |
Sends using SendGrid SMTP on port 587 (STARTTLS) |
File |
file: |
Writes to a file |
In-memory |
memory: |
|
Dummy |
dummy: |
Set from email addresses
dj-email-url also supports to optionally specify origin email addreses.
Setting |
Query parameter |
|---|---|
SERVER_EMAIL |
_server_email |
DEFAULT_FROM_EMAIL |
_default_from_email |
For example: smtp://USER:PASSWORD@smtp.example.com/?_server_email=error@example.com
Do not forget to assign values to settings:
SERVER_EMAIL = email_config.get('SERVER_EMAIL', 'root@localhost')
DEFAULT_FROM_EMAIL = email_config.get('DEFAULT_FROM_EMAIL', 'webmaster@localhost')
More info
SMTP backend
The SMTP backend is selected when the scheme in the URL if one these:
Value |
Default port |
Comment |
|---|---|---|
smtp |
25 |
Local mail transfer agent |
submission or submit |
587 |
SMTP with STARTTLS |
Changed in version 0.1: The use of smtps is now discouraged The value smtps was used to indicate to use TLS connections, that is to set EMAIL_USE_TLS to True. Now is recommended to use submission or submit (see service name for port numbers or Uniform Resource Identifier Schemes at IANA).
On the most popular mail configuration option is to use a third party SMTP server to relay emails.
>>> url = 'submission://user@example.com:pass@smtp.example.com'
>>> url = dj_email_url.parse(url)
>>> assert url['EMAIL_PORT'] == 587
>>> assert url['EMAIL_USE_SSL'] is False
>>> assert url['EMAIL_USE_TLS'] is True
Other common option is to use a local mail transfer agent Postfix or Exim. In this case it as easy as:
>>> url = 'smtp://'
>>> url = dj_email_url.parse(url)
>>> assert url['EMAIL_HOST'] == 'localhost'
>>> assert url['EMAIL_PORT'] == 25
>>> assert url['EMAIL_USE_SSL'] is False
>>> assert url['EMAIL_USE_TLS'] is False
It is also possible to configure SMTP-over-SSL (usually on 465). This configuration is not generally recommended but might be needed for legacy systems. To apply use this configuration specify SSL using a ssl=True as a query parameter and indicate the port explicitly:
>>> url = 'smtp://user@domain.com:pass@smtp.example.com:465/?ssl=True'
>>> url = dj_email_url.parse(url)
>>> assert url['EMAIL_PORT'] == 465
>>> assert url['EMAIL_USE_SSL'] is True
>>> assert url['EMAIL_USE_TLS'] is False
File backend
The file backend is the only one which needs a path. The url path is store in EMAIL_FILE_PATH key.
Change Log
Unreleased
1.0.1 - 2020-06-03
Included LICENSE file in tarball. Thanks to @fabaff.
1.0.0 - 2020-02-16
Removed support for Python versions which reached end-of-life.
Fixed typo. Thanks to @jeffmacdonald.
0.2.0 - 2019-04-08
Added support for DEFAULT_FROM_EMAIL and SERVER_EMAIL in the URL as query parameters.
0.1.0 - 2018-03-24
Added new schemes submission and submit to select SMTP backend on port 587 with STARTTLS. Thanks to @LEW21 to suggest to include new submit URI.
Discouraged the use of scheme smtps and add a user warning. Thanks to @LEW21 to alert about this confusing usage.
Expand which values are considered as truthy on a query string param. Now, 1, on, true, and yes, as a single character or in all case variants (lower, upper and title case) are considered as True.
0.0.10 - 2016-10-14
Post release version to fix release date in change log.
0.0.9 - 2016-10-14
Fix case when user sets ssl=False in its url (thanks bogdal)
0.0.8 - 2016-06-07
Allow universal wheel
0.0.7 - 2016-05-31
Add EMAIL_USE_SSL setting to docs and set a default value (thanks iraycd).
Add coverage (thanks iraycd).
0.0.6 - 2016-04-18
Fix error parsing URL without credentials (thanks martinmaillard).
0.0.5 - 2016-04-17
Allow URL encoded credentials (thanks kane-c).
0.0.4 - 2015-03-05
Fix README.
0.0.3 - 2015-03-05
Add change log.
Add ssl= option as a query parameter for SMTP backend.
Add Travis continuous integration.
0.0.2 - 2014-03-12
Add Python 3 support.
0.0.1 - 2013-02-12
Initial version.
Metadata
Release files for dj-email-url 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dj-email-url-1.0.1.tar.gz | 7.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dj_email_url-1.0.1-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 13.9 kB
Release files / dj-email-url-1.0.1.tar.gz
| Download URL | dj-email-url-1.0.1.tar.gz |
|---|---|
| Size | 7.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
32dc567c5cc3d4106710ec36dd645c8c1b20e2d8f588a17ab88bcc23e347d00a
|
|
BLAKE2b-256 checksum How to use checksums |
09d7e1a79bfdf616884973ad9e7464fb63087792219111b82022809ead4b9d93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.7
|
Release files / dj_email_url-1.0.1-py2.py3-none-any.whl
| Download URL | dj_email_url-1.0.1-py2.py3-none-any.whl |
|---|---|
| Size | 6.6 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
557c07b3039befdc1c561c4038b155d659c09f996d5e33c91189c2e23969da90
|
|
BLAKE2b-256 checksum How to use checksums |
ec38b72ad5df32978e6d6aba68d678985d00ecedb75552646372bd200d75ee2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.7
|
Security for dj-email-url 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.