Skip to main content

A Django email backend that uses Boto3 to interact withAmazon Simple Email Service (SES).

Project description

https://travis-ci.org/azavea/django-amazon-ses.svg?branch=develop https://api.codeclimate.com/v1/badges/b69dce91215b7003066b/maintainability https://api.codeclimate.com/v1/badges/b69dce91215b7003066b/test_coverage

A Django email backend that uses Boto 3 to interact with Amazon Simple Email Service (SES).

Table of Contents

Installation

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.

Note: Versions 1.0.x of django-amazon-ses are the last versions compatible with Django versions earlier than 1.11. If you are using Django versions earlier than 1.11.x, please pin your django-amazon-ses version.

AWS Credential Setup

AWS Named Profile

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.EmailBackend'

Optionally, you can set the AWS credentials. If unset, the backend will gracefully fall back to other Boto 3 credential providers.

AWS_ACCESS_KEY_ID = 'my_access_key...'
AWS_SECRET_ACCESS_KEY = 'my_secret...'

Optionally, you can set the AWS region to be used (default is 'us-east-1'):

AWS_DEFAULT_REGION = 'eu-west-1'

Alternatively, provide AWS credentials using the settings below. This is useful in situations where you want to use separate credentials to send emails via SES than you would for other AWS services.

AWS_SES_ACCESS_KEY_ID = 'my_access_key...'
AWS_SES_SECRET_ACCESS_KEY = 'my_secret...'
AWS_SES_REGION = 'us-west-2'

Usage

Once the configuration above is complete, use send_email to send email messages with Amazon SES from within your application:

from django.core.mail import send_mail

send_mail(
    'Subject here',
    'Here is the message.',
    'from@example.com',
    ['to@example.com'],
    fail_silently=False,
)

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 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 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-amazon-ses-2.1.0.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

django_amazon_ses-2.1.0-py2.py3-none-any.whl (8.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-amazon-ses-2.1.0.tar.gz.

File metadata

  • Download URL: django-amazon-ses-2.1.0.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7

File hashes

Hashes for django-amazon-ses-2.1.0.tar.gz
Algorithm Hash digest
SHA256 e70b694a9222890306bd529d50924a473efb25918eb1769898a7e0fd6cd73bd5
MD5 cacad25eaf71bdc469d6ad830a0776f6
BLAKE2b-256 4e12b026964e85ea4b0cd534d2c4d6b560f2034b425d4a6d055224f16df124d8

See more details on using hashes here.

File details

Details for the file django_amazon_ses-2.1.0-py2.py3-none-any.whl.

File metadata

  • Download URL: django_amazon_ses-2.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7

File hashes

Hashes for django_amazon_ses-2.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a5502f2395f6e4710cab26aa07b1982bfb294d688117169a5ad746c48ae8133e
MD5 c11b34421bd561d621b4f754491858c0
BLAKE2b-256 3daf691c312937d8fc0e8cd2783eb92c0618e9f079b2773a8f355545cc271f9d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page