Django-SES-backend
This is a minified fork of Harry Marr's django-ses
- Management UI and DKIM signing was removed, because:
-
- AWS can do automatic DKIM signing for you: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html,
- It's backend, so no UI is expected from it.
- Another reasons for the fork:
-
- I need to have it running under Python 3,
- I don't need all the "additional" feature of django-ses.
Getting going
To get it running, you need to have Django (1.5>=) and Boto (>=2.32.0) installed in your system.
Installing boto:
pip install --upgrade boto
Install django-ses-backend:
pip install django-ses-backend
Add the following to your settings.py:
EMAIL_BACKEND = 'django_ses_backend.SESBackend' # These are optional -- if they're set as environment variables they won't # need to be set here as well AWS_ACCESS_KEY_ID = 'YOUR-ACCESS-KEY-ID' AWS_SECRET_ACCESS_KEY = 'YOUR-SECRET-ACCESS-KEY' # Additionally, you can specify an optional region, like so: AWS_SES_REGION_NAME = 'us-east-1' AWS_SES_REGION_ENDPOINT = 'email.us-east-1.amazonaws.com'
Alternatively, instead of AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, you can include the following two settings values. This is useful in situations where you would like to use a separate access key to send emails via SES than you would to upload files via S3:
AWS_SES_ACCESS_KEY_ID = 'YOUR-ACCESS-KEY-ID' AWS_SES_SECRET_ACCESS_KEY = 'YOUR-SECRET-ACCESS-KEY'
Now, when you use django.core.mail.send_mail
, Simple Email Service will
send the messages by default.
Since SES imposes a rate limit and will reject emails after the limit has been reached, django-ses will attempt to conform to the rate limit by querying the API for your current limit and then sending no more than that number of messages in a two-second period (which is half of the rate limit, just to be sure to stay clear of the limit). This is controlled by the following setting:
AWS_SES_AUTO_THROTTLE = 0.5 # (default; safety factor applied to rate limit)
To turn off automatic throttling, set this to None.
Django Builtin-in Error Emails
If you'd like Django's Builtin Email Error Reporting to function properly
(actually send working emails), you'll have to explicitly set the
SERVER_EMAIL
setting to one of your SES-verified addresses. Otherwise, your
error emails will all fail and you'll be blissfully unaware of a problem.
Note: You will need to sign up for SES and verify any emails you're going to use in the from_email argument to django.core.mail.send_email(). Boto has a verify_email_address() method: https://github.com/boto/boto/blob/master/boto/ses/connection.py
Full List of Settings
-
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
- Required. Your API keys for Amazon SES.
-
AWS_SES_ACCESS_KEY_ID
,AWS_SES_SECRET_ACCESS_KEY
- Required. Alternative API keys for Amazon SES. This is useful in situations where you would like to use separate access keys for different AWS services.
-
AWS_SES_REGION_NAME
,AWS_SES_REGION_ENDPOINT
- Optionally specify what region your SES service is using. Details: http://readthedocs.org/docs/boto/en/latest/ref/ses.html#boto.ses.regions
AWS_SES_RETURN_PATH
- Instruct Amazon SES to forward bounced emails and complaints to this email. For more information please refer to http://aws.amazon.com/ses/faqs/#38
Contributing
If you'd like to fix a bug, add a feature, etc
-
- Start by opening an issue.
-
Be explicit so that project collaborators can understand and reproduce the issue, or decide whether the feature falls within the project's goals. Code examples can be useful, too.
-
- File a pull request.
-
You may write a prototype or suggested fix.
-
- Write and run tests.
-
Write your own test showing the issue has been resolved, or the feature works as intended.
Running Tests
To run the tests:
python runtests.py