This release is a pre-release and may not be stable for production use.
lettermint-django
An unofficial Django email backend for Lettermint. Drop it in as your EMAIL_BACKEND and all Django mail (send_mail(), EmailMessage, EmailMultiAlternatives) routes through the Lettermint API. Supports per-message routing, HTML emails, attachments, and reply-to headers with no changes to your existing email code. An optional tracking application records sent messages and delivery events through Lettermint webhooks.
Built and maintained by zzinnovate. Not affiliated with Lettermint.
Documentation
- Getting Started: Installation • Configuration • Usage • Tracking
- Reference: Settings • Backend
- Project: Contributing • Changelog • Security
Requirements
- Python 3.11+ (Django 6 requires Python 3.12+)
- Django 4.2, 5.x, or 6.x
- lettermint 2.0+
Install
pip install lettermint-django
# For development (includes testing tools)
pip install -e ".[dev]"
Quick start
import os
EMAIL_BACKEND = "lettermint_django.LettermintEmailBackend"
LETTERMINT_API_KEY = os.getenv("LETTERMINT_API_KEY")
That's it. All send_mail(), EmailMessage, and EmailMultiAlternatives calls in Django will now route through Lettermint.
Email tracking (optional)
Add the app, set the webhook secret and include the webhook URL to record every sent message and its delivery events (delivered, bounced, failed):
INSTALLED_APPS += ["lettermint_django"]
LETTERMINT_WEBHOOK_SECRET = os.getenv("LETTERMINT_WEBHOOK_SECRET")
# urls.py
path("lettermint/", include("lettermint_django.urls")),
python manage.py migrate lettermint_django
Point a webhook in the Lettermint dashboard at /lettermint/message-events/. Query LmEmailMessage and LmEmailEvent, or connect to the lm_email_bounced signal. See the tracking guide.
Roadmap
This project is actively developed with a clear path toward v1.0.0. Our roadmap includes email tracking, bounce monitoring, and engagement analytics.
- Current: v0.3.x (email backend, bounce & delivery tracking via webhooks)
- Next: v0.4.0 (opens, clicks, analytics)
- Planned: v1.0.0 (production-ready)
Settings Reference
| Setting | Required | Default | Description |
|---|---|---|---|
LETTERMINT_API_KEY |
Yes | - | Your project API token from the Lettermint dashboard |
LETTERMINT_BASE_URL |
No | SDK default | Override the Lettermint API base URL |
LETTERMINT_ROUTE |
No | - | Default route applied to all outgoing emails |
LETTERMINT_TIMEOUT |
No | SDK default | Request timeout in seconds |
LETTERMINT_WEBHOOK_SECRET |
With tracking | - | Signing secret of your Lettermint webhook |
Per-message Route
Override the route for a specific message via extra_headers:
from django.core.mail import EmailMessage
msg = EmailMessage(
subject="Password reset",
body="Click the link...",
from_email="noreply@example.com",
to=["user@example.com"],
)
msg.extra_headers["X-Lettermint-Route"] = "transactional"
msg.send()
HTML Emails
from django.core.mail import EmailMultiAlternatives
msg = EmailMultiAlternatives(
subject="Welcome",
body="Plain text fallback.",
from_email="noreply@example.com",
to=["user@example.com"],
)
msg.attach_alternative("<h1>Hello!</h1>", "text/html")
msg.send()
Contributing
Contributions are welcome. See CONTRIBUTING.md for development setup, testing, and workflow guidelines.
Security
See SECURITY.md for reporting vulnerabilities and best practices.
Credits
This package is built on top of the official lettermint Python SDK, which handles all API communication.
- Sjoerd Zaalberg van Zelst (zzinnovate)
- All contributors
License
MIT. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lettermint_django-0.3.0a0.tar.gz.
File metadata
- Download URL: lettermint_django-0.3.0a0.tar.gz
- Upload date:
- Size: 23.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc172a02c37d1bffa8b536cb8f89364cb2ddb7e2a93277663902356435492dfc
|
|
| MD5 |
33c276c897371dcd938c5b8073e5a351
|
|
| BLAKE2b-256 |
c06274d8eb00d4702798a9df00bf8a6a956abc1a346313e1622c551c47b4ae73
|
Provenance
The following attestation bundles were made for lettermint_django-0.3.0a0.tar.gz:
Publisher:
publish.yml on zzinnovate/lettermint-django
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lettermint_django-0.3.0a0.tar.gz -
Subject digest:
cc172a02c37d1bffa8b536cb8f89364cb2ddb7e2a93277663902356435492dfc - Sigstore transparency entry: 2684025251
- Sigstore integration time:
-
Permalink:
zzinnovate/lettermint-django@cb49eda8e61c07e405504ffcb93665004cf6c56e -
Branch / Tag:
refs/tags/0.3.0a1 - Owner: https://github.com/zzinnovate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cb49eda8e61c07e405504ffcb93665004cf6c56e -
Trigger Event:
release
-
Statement type:
File details
Details for the file lettermint_django-0.3.0a0-py3-none-any.whl.
File metadata
- Download URL: lettermint_django-0.3.0a0-py3-none-any.whl
- Upload date:
- Size: 22.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2856071f5a7bc56ab89c3aa94bce286eaa6f3d136134b8a34573481f9b289eef
|
|
| MD5 |
f990981436cf3ea8561d3c5c03f799ad
|
|
| BLAKE2b-256 |
7f8378419044aca90330d6bfb986b7f330c800b6569851aaa497cf3e6268aac5
|
Provenance
The following attestation bundles were made for lettermint_django-0.3.0a0-py3-none-any.whl:
Publisher:
publish.yml on zzinnovate/lettermint-django
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lettermint_django-0.3.0a0-py3-none-any.whl -
Subject digest:
2856071f5a7bc56ab89c3aa94bce286eaa6f3d136134b8a34573481f9b289eef - Sigstore transparency entry: 2684025333
- Sigstore integration time:
-
Permalink:
zzinnovate/lettermint-django@cb49eda8e61c07e405504ffcb93665004cf6c56e -
Branch / Tag:
refs/tags/0.3.0a1 - Owner: https://github.com/zzinnovate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cb49eda8e61c07e405504ffcb93665004cf6c56e -
Trigger Event:
release
-
Statement type: