A Django email backend that uses Boto3 to interact withAmazon Simple Email Service (SES).
Project description
A Django email backend that uses Boto 3 to interact with Amazon Simple Email Service (SES).
Usage
First, install the Django Amazon SES email backend:
$ pip install django-amazon-ses
Next, ensure that your Amazon Web Services (AWS) API credentials are setup, or that you are running on an Amazon EC2 instance with an instance profile that has access to the Amazon SES service.
AWS API Credential Setup
Create an AWS API credential profile named test using the AWS CLI:
$ aws --profile test configure
Ensure that the AWS_PROFILE environment variable is set so that Boto 3 knows which credentials profile to use:
$ AWS_PROFILE="test" gunicorn my:app
AWS EC2 Instance Profile
Create an instance profile with at least the ses:SendRawEmail action. Then, associate it with the instance/s running your application. An example policy that enables access to the ses:SendRawEmail action is below:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ses:SendRawEmail"],
"Resource":"*"
}
]
}
Django Configuration
Lastly, override the EMAIL_BACKEND setting within your Django settings file:
EMAIL_BACKEND = 'django_amazon_ses.backends.boto.EmailBackend'
Optionally, you can set the AWS region to be used (default is 'us-east-1'):
DJANGO_AMAZON_SES_REGION = 'eu-west-1'
Signals
Two signals are provided for the backend, pre_send and post_send. Both signals receive the message object being sent. The post_send signal also receives the Amazon SES message ID of the sent message.
pre_send
You can modify the email message on pre_send. For example, if you have a blacklist of email addresses that should never receive emails, you can filter them from the recipients:
from django.dispatch.dispatcher import receiver
from django_amazon_ses.backends.boto import pre_send
@receiver(pre_send)
def remove_blacklisted_emails(sender, message=None, **kwargs):
blacklisted_emails = Blacklisted.objects.values_list('email', flat)
message.to = [email for email in message.to if email not in blacklisted_emails]
If the pre_send receiver function ends up removing all of the recipients from the message, the email is not processed and the post_send signal is not sent.
post_send
Similarly, the post_send signal can be used to log messages sent by the system. This is useful if you want to log the subject line of a message that bounced or received a complaint.
from django.dispatch.dispatcher import receiver
from django.utils import timezone
from django_amazon_ses.backends.boto import post_send
@receiver(post_send)
def log_message(sender, message=None, message_id=None, **kwargs):
SentMessage.objects.create(
subject = message.subject,
body = message.body,
message_id = message_id,
date_sent = timezone.now()
)
Testing
The test suite execution process is managed by tox and takes care to mock out the Boto 3 interactions with Amazon’s API, so there is no need for a valid set of credentials to execute it:
$ tox
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-amazon-ses-0.3.2.tar.gz
.
File metadata
- Download URL: django-amazon-ses-0.3.2.tar.gz
- Upload date:
- Size: 9.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b19d13e836a45730fa931b8c4e85cb9cbbfabbb10bf0d956cca2edfc01bfb59 |
|
MD5 | 8120a7a057fca854eabf1a6a1e344e7d |
|
BLAKE2b-256 | 372b582496fc520586a21f432af95e83e6f1c136a9fd304754e65c1c82fd3597 |
File details
Details for the file django_amazon_ses-0.3.2-py2.py3-none-any.whl
.
File metadata
- Download URL: django_amazon_ses-0.3.2-py2.py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b9c7abac9dbdb4526b636060535305bb32feab4ca5514f03075a237191308da |
|
MD5 | 1b55f59c71f2f82ac3b30d9a0d9b2fa1 |
|
BLAKE2b-256 | 99bc6785e0944be0532bbf1432aac1c8a20c25fc849d7b53a560ed9d452c029a |