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

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-0.4.7.tar.gz (16.9 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-0.4.7-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_aws_mail-0.4.7.tar.gz
  • Upload date:
  • Size: 16.9 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-0.4.7.tar.gz
Algorithm Hash digest
SHA256 41be2a874517c2205630b0a1e6345120e5c54ab9ae0e5bdae131be2391593b9b
MD5 920e8227d3c3864b4482b3d63c4c9fe2
BLAKE2b-256 2b1c751398399851ec81f2291f05af14ec3c88e8578a2358e99f767410e3c55b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for django_aws_mail-0.4.7-py3-none-any.whl
Algorithm Hash digest
SHA256 ffcf63aa0721c4a8cf268777df2a5bc09cc1b1c8e5cb90a700360a1df6e7ce4b
MD5 94bb9571ff27a70bf2b961dcfc7d278b
BLAKE2b-256 c31ff22b4a056a9601edb9f50418d09e90aa2bde4a08f409f3b660fdf22252f1

See more details on using hashes here.

Provenance

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