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.0.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.0-py3-none-any.whl (32.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_aws_mail-1.0.0.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.0.tar.gz
Algorithm Hash digest
SHA256 bac3a13ec234c48c8b445b5e0eca007c31f6785577273b820ab4ac079f79a9c7
MD5 c31f5d233dd4701e957a476c88aef15b
BLAKE2b-256 c529901c5766d76be01ec6fab6e552a37221e14bae0719493edf32a1eeaf29d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_aws_mail-1.0.0.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.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_aws_mail-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7831c6e5959a3231841645578af81d5773c26ae044800398c780cf8d5732b3e8
MD5 271d173da68f03a5ae8399d22620688d
BLAKE2b-256 e42d6bf6237b513eadbdd300ca4fb21f26f7fbda819b8e6b7a94f06e5dcff6ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_aws_mail-1.0.0-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