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://badge.fury.io/py/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'

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

  • 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).

Example Usage:

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

@receiver(mail_bounce)
def handle_bounce(sender, message_id, bounce_type, **kwargs):
    # Handle the bounce (e.g., deactivate the user's email)
    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.1.tar.gz (16.4 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.1-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_aws_mail-0.4.1.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.12.5 Darwin/25.3.0

File hashes

Hashes for django_aws_mail-0.4.1.tar.gz
Algorithm Hash digest
SHA256 7668b0fa1ac1f6dc6529a6eb8258e1b4ad34816b6e25c8fa8781abad8caf63cb
MD5 2ab09b6bb2ab00ff9cc2dd3179265885
BLAKE2b-256 efd406ec2b114e96a618725118386b077caf5d1c323ecc09250bcd9b2c65cfac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: django_aws_mail-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.12.5 Darwin/25.3.0

File hashes

Hashes for django_aws_mail-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9e305a0ee3bcd9c8d464bf786c15c7b865e7c5d616cda36cdd4182e50ce3a372
MD5 f1c273595fe94672a93a22bca9898d32
BLAKE2b-256 cbac085f06e124de02420122b2b2ed66a116011d675625315e8bfd174a9752b6

See more details on using hashes here.

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