Skip to main content

AWS mail for Django using SES and SNS.

Project description

A Django email backend for Amazon’s Simple Email Service (SES) v2 and utility views + signals for Amazon’s Simple Notification Service (SNS).

Author:

Bas van Gaalen (http://github.com/webtweakers)

License:

MIT

https://img.shields.io/pypi/v/django-aws-mail.svg

Features

  • Fully compatible with Django 6.0+ (Modern Python Email API).

  • Supports AWS SESv2 (via boto3).

  • Integrated with AWS SNS for bounce and complaint handling.

  • Flexible configuration via Django settings or environment variables.

  • Comprehensive signal support for tracking email lifecycles.

Installation

Install the package via pip or poetry:

pip install django-aws-mail

Configuration

Add the backend to your Django settings.py:

EMAIL_BACKEND = 'django_aws_mail.backends.EmailBackend'

Environment Variables

The library automatically detects the following environment variables (or Django settings). Copy example.env to .env to get started:

MAIL_AWS_REGION_NAME=eu-west-1
MAIL_AWS_ACCESS_KEY_ID=ABC123
MAIL_AWS_SECRET_ACCESS_KEY=S3cr3t

MAIL_AWS_SNS_TOPIC_ARN=arn:aws:sns:eu-west-1:123:abc
MAIL_AWS_SNS_VERIFY_NOTIFICATION=true
MAIL_AWS_SNS_VERIFY_CERTIFICATE=true

Usage

The library provides a compose utility to easily create multipart emails (HTML and Text) using Django templates.

from django_aws_mail.utils import compose

# Create the message
message = compose(
    recipients=["customer@example.com"],
    subject="Welcome to our service!",
    template="email/welcome.html",
    context={"name": "John Doe"},
    from_email="Support <support@example.com>"
)

# Send it
message.send()

Signals

The library provides a rich set of signals to track the lifecycle of your emails.

Backend Signals

These fire during the .send() process within your application:

  • mail_pre_send: Fired before the message is sent to AWS.

  • mail_post_send: Fired after a successful API response from AWS.

SNS Webhook Signals

These are triggered by AWS SNS notifications via the provided webhook views. For more information on the contents of these notifications, see the AWS SES documentation.

  • mail_send: The email was successfully sent by SES.

  • mail_delivery: The email was successfully delivered to the recipient.

  • mail_bounce: The email bounced (Hard or Soft).

  • mail_complaint: The recipient marked the email as spam.

  • mail_reject: SES rejected the email (e.g., due to virus or blacklisting).

  • mail_delivery_delay: There is a delay in delivering the email.

  • mail_open: The recipient opened the email (requires SES tracking).

  • mail_click: The recipient clicked a link (requires SES tracking).

Signal Example:

from django.dispatch import receiver
from django_aws_mail.signals import mail_bounce

@receiver(mail_bounce)
def handle_bounce(sender, mail, event, message, **kwargs):
    # Retrieve info from the event dictionary
    bounce_type = event.get('bounceType')
    message_id = mail.get('messageId')

    print(f"Email {message_id} bounced. Type: {bounce_type}")

Development

To run the sandbox management command:

poetry install
poetry run manage

To run tests and get the coverage:

poetry run manage test django_aws_mail

poetry run coverage run sandbox/manage.py test django_aws_mail

poetry run coverage report

poetry run coverage html

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_aws_mail-1.0.1.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_aws_mail-1.0.1-py3-none-any.whl (32.0 kB view details)

Uploaded Python 3

File details

Details for the file django_aws_mail-1.0.1.tar.gz.

File metadata

  • Download URL: django_aws_mail-1.0.1.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for django_aws_mail-1.0.1.tar.gz
Algorithm Hash digest
SHA256 c2a8862932613db22f89881027dd9645f6b8de80041e1f7f4d84d8bf57779ebd
MD5 2f20570c0d370e47d61c5dccb1366e38
BLAKE2b-256 9d9e4d004b093f444f9e5b7412d79e1eb004121d2f509c53c7b2f01303f216c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_aws_mail-1.0.1.tar.gz:

Publisher: publish.yml on django-aws-mail/django-aws-mail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_aws_mail-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_aws_mail-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4dc21e12c4579c9fa01fb5cb1206b24bb0c93c64235ad16976045da4ff6e96be
MD5 7e5abe25114f7bf8fe127c20414350fc
BLAKE2b-256 2a2c08265ae388eb1974ec1456b93fc72a11c8fd10fe485182f68a922242cc0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_aws_mail-1.0.1-py3-none-any.whl:

Publisher: publish.yml on django-aws-mail/django-aws-mail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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