Telling People What They Need to Know
Last updated:
Email delivery first
Django's default email backend uses whatever the server provides, which frequently means messages sent without proper authentication and discarded by recipient providers without a bounce.
The application logs a success, the user is told it was sent, and nothing arrives. It is the most expensive silent failure in business applications.
Getting delivery right
- Authenticated SMTP or a transactional service
- Send from a domain you control with correct authentication records
- Queue every send, so a provider outage does not break the request
- Log every send with its outcome
- Handle bounces rather than ignoring them
Notify only who must act
- The person who has to do something next
- Not everyone with an interest
- Not on every state change, only the meaningful ones
- With a clear statement of what is required
- And a direct link to the thing
Notifying everybody about everything produces a channel people mute, at which point the important notification is missed too.
Let people control it
| Setting | Why |
|---|---|
| Per notification type | Different people care about different things |
| Digest option | Reduces volume without losing information |
| Per channel | Email, in-app, or both |
| Honoured immediately | Otherwise people stop trusting it |
Test the templates properly
Email rendering varies enormously between clients. Test the actual templates in the clients your users have, not just in a browser.
And check the plain text alternative, which is what some clients and most accessibility tools will use.
Frequently asked questions
Which email service should we use?
How do we know email is arriving?
Why does our mail go to spam?
Should notifications be in-app too?
Not certain your application's email arrives?
Send yourself one from the live system and check the headers. It is usually revealing.
Related services
What we build for problems like this one