django-ses

A drop-in Django email backend that sends mail through Amazon Simple Email Service.

Library
PyPI
v4.7.2
1,087stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
54/100Fair
Development Activity16
Maintenance32
Community80
Maturity60
Momentum28

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
78/100Good
Architecture80
Code Quality80
Innovation68
Learning Curve82

django-ses is a drop-in email backend for Django that routes outgoing mail through Amazon Web Services’ Simple Email Service (SES) instead of a traditional SMTP server. Swapping it in is a one-line settings change, after which Django’s standard email APIs send through SES.

Beyond basic sending, django-ses adds SES-specific capabilities that are hard to get over plain SMTP: bounce and complaint handling via SNS, deliverability and sending-quota stats, an optional admin dashboard, DKIM signing, and support for receiving inbound email through SES.

What You Get

  • A drop-in EMAIL_BACKEND that works with Django’s existing send_mail and EmailMessage APIs
  • Bounce, complaint, and delivery event handling via Amazon SNS with Django signals
  • SES sending-quota and deliverability statistics, with an optional admin dashboard
  • Inbound email receiving support and optional DKIM message signing

Common Use Cases

  • Sending transactional and bulk email from a Django app without running mail servers
  • Tracking bounces and complaints to keep sender reputation healthy
  • Receiving and processing inbound email delivered through Amazon SES

Under The Hood

Architecture - The core is a Django EMAIL_BACKEND class in the django_ses package that adapts Django’s EmailMessage objects into SES send calls via boto3. Around this sit conf.py for settings, models.py plus migrations for persisting SES event data, views.py and urls.py for the SNS webhook endpoints that receive bounce/complaint notifications, signals.py to fan those events out to app code, inbound.py for received-email handling, and admin.py for the stats dashboard.

Tech Stack - Python packaged with Poetry (pyproject.toml, poetry.lock), depending on Django and boto3 for AWS SES/SNS access. Testing runs via runtests.py and tox across Django and Python versions, and a docker-compose.yml supports local development.

Code Quality - The project is mature and widely adopted (1k+ stars, 90 contributors), ships a tests/ suite and a CVE directory documenting handled advisories, and separates concerns cleanly across backend, receiving, admin, and signals modules. The README candidly notes it is maintained but not actively used by the maintainer.

API Design - Adoption is essentially a one-line EMAIL_BACKEND setting plus AWS credentials, after which Django’s native email APIs just work, which is excellent developer ergonomics. Advanced features (SNS event handling, stats, inbound) require more setup, but the layered configuration keeps the common path trivial and the learning curve low for existing Django users.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search