django-ses
A Django email backend for Amazon's Simple Email Service (SES)
What it is and what it does
Django-SES is a drop-in replacement for Django's default email backend that sends mail through Amazon's Simple Email Service instead of SMTP. It depends on boto3 to communicate with AWS and integrates seamlessly with Django's standard mail API—your existing send_mail() calls work unchanged. The package handles SES rate limiting automatically and provides optional SNS webhook integration to track bounce, complaint, delivery, open, and click events in real time.
Beyond basic sending, django-ses offers email receiving capabilities via SES Email receiving, built-in bounce and complaint blacklisting to suppress problematic addresses, and support for SES configuration sets and global endpoints for high-availability deployments. It supports Django 3.2 through 6.0 and Python 3.8 through 3.14, making it compatible with current and near-future Django/Python versions.
Use it for:
- Replace SMTP infrastructure with AWS SES to eliminate mail server maintenance and leverage free inbound SES traffic from EC2 instances.
- Track email delivery status and automatically blacklist bouncing or complained-about addresses using SNS webhook events.
- Send high-volume transactional email (password resets, notifications, alerts) with built-in rate limiting to stay within SES quotas.
- Receive and programmatically process inbound emails via SES Email receiving without maintaining POP/IMAP infrastructure.
- Improve email deliverability by using SES's Easy DKIM feature and avoiding manual PTR/reverse DNS configuration.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
A Django email backend that routes outgoing mail through Amazon SES instead of traditional SMTP, with support for bounce/complaint tracking and email receiving via SNS webhooks.
Yes, if you are already on AWS or plan to be. Django-SES is actively maintained, has no known vulnerabilities, installs with low friction, and is MIT-licensed. It is a true drop-in replacement for Django's mail backend—no code changes required—and adds real value through bounce/complaint tracking and SES-specific features like rate limiting and DKIM signing. Skip it only if you need SMTP compatibility or are not using AWS.
Install
django-ses on PyPI
pip
pip install django-sesuv
uv add django-sespoetry
poetry add django-sesInstalling django-ses
Before you install
Low friction install with a pure-Python wheel and four runtime dependencies (boto3, django, backports-zoneinfo, importlib-metadata). Actively maintained as of 2026-05-19 with 1087 repository stars and a release within the past 175 days.
License in practice
MIT license (permissive) places no restrictions on commercial or private use, modification, or redistribution—standard terms for open-source Python libraries.
Quickstart
pip install django-ses
# In settings.py:
EMAIL_BACKEND = 'django_ses.SESBackend'
AWS_ACCESS_KEY_ID = 'YOUR-ACCESS-KEY-ID'
AWS_SECRET_ACCESS_KEY = 'YOUR-SECRET-ACCESS-KEY'
AWS_SES_REGION_NAME = 'us-west-2'
# Then use Django's standard mail API:
from django.core.mail import send_mail
send_mail('Subject', 'Message', 'from@example.com', ['to@example.com'])
Requires AWS credentials (access key and secret key, or IAM role) and an AWS account with SES enabled in your target region.
Verify before relying
- Whether the built-in blacklist for bounces and complaints integrates with external email validation services or only maintains an internal list.
- Performance characteristics when handling high-volume email sending (the description mentions high-volume support but does not quantify throughput).
- Whether the SESv2 client and global endpoint features are production-ready or still experimental.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.8) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 4 — backports-zoneinfo, boto3, django, importlib-metadata |
| Maintenance | actively maintained — 175 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 1,689,153/month — #3,649 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: django_ses-4.7.2-py3-none-any.whl
Tags
More Python Modules packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
PyYAMLPyYAML parses and emits YAML 1.1 data format,…
permissive · top 100 on PyPI
pydanticPydantic validates Python data structures…
permissive · top 100 on PyPI
annotated-typesProvides reusable metadata objects for use with…
permissive · top 100 on PyPI
typing-inspectionProvides runtime tools to inspect and…
permissive · top 100 on PyPI
django-post_officeDjango Post Office queues and sends emails…
permissive · top 15,000 on PyPI
django-celery-emailRoutes Django email sending through Celery task…
permissive · top 15,000 on PyPI
django-anymailSends and receives email in Django through…
permissive · top 5,000 on PyPI
c7n-mailerA message relay service that subscribes to SQS…
permissive · top 15,000 on PyPI
aws-cdk.aws-sns-subscriptionsProvides AWS CDK constructs for subscribing SNS…
permissive · top 15,000 on PyPI
flufl.bounceDetects and extracts original bouncing email…
permissive · top 15,000 on PyPI
prefect-emailProvides Prefect workflow integration for…
permissive · top 15,000 on PyPI
django-rest-passwordresetProvides REST API endpoints for Django…
permissive · top 15,000 on PyPI
django-naomidjango-naomi is a Django email backend that…
permissive · top 15,000 on PyPI
django-sendgrid-v5Provides a Django email backend that sends…
permissive · top 15,000 on PyPI