Transactional email best practices: 12 things to get right
7 minute read
A transactional email is one a person is waiting for: a sign-in link, a receipt, a shipping update. If it is late or lands in spam, they notice at once. These are the habits that keep it reliable.
Make sure it can be trusted
- Authenticate the domain. Set up SPF, DKIM and DMARC before the first real send. Run your domain through the free domain checker to see it.
- Use a subdomain for transactional mail.
mail.example.comfor receipts and resets, a different one for newsletters. A complaint-heavy campaign then cannot drag down the emails people depend on. - Send from a real address that can receive replies.
no-reply@looks like a machine, and replies are one of the clearest signs that people want your mail. - Warm up a new domain. A brand-new domain that sends thousands of emails on day one looks like abuse. Start small and build up.
Make it arrive, and arrive once
- Send it the moment it is triggered. Do not batch transactional mail with the nightly job. A sign-in link that arrives in ten minutes is a failed sign-in.
- Make retries safe. Networks fail, and your code will retry. Send with an idempotency key, so a retry after a timeout cannot send the same receipt twice. SendSend takes an
Idempotency-Keyheader for exactly this. - Always include a plain-text version next to the HTML. Some clients show only text, spam filters like the pairing, and it is the version a screen reader or a smartwatch reads.
- Keep each message to one job. A receipt that is also a promotion blurs the line between transactional and marketing email, and it can change how the message is treated.
Keep your list and your reputation healthy
- Stop sending to addresses that bounce. A hard bounce means the address does not exist. Add it to a suppression list at once and never try again. More on bounce rates.
- Check addresses when people type them. Most bad addresses start as typos at signup. Verify at the form, not after the bounce.
- Watch bounces and complaints, and set alerts. Aim to stay under about 2% bounces. Mailbox providers expect spam complaints well below 0.3%, and the lower the better. A sudden rise is the early warning that something is wrong.
- Test before you ship. Send each template to real addresses at Gmail, Outlook and Yahoo, and look at it on a phone. Keep the template versioned so a bad edit can be rolled back.
What to leave out
- Click tracking on sign-in and reset links. Tracking rewrites the link through another domain, which can break one-time tokens and looks like phishing.
- Attachments you do not need. Link to the file instead. Large attachments slow delivery and trigger filters.
- Marketing in the footer of a receipt. A short, relevant note is fine. A promotion block is not.
Common questions
Does a transactional email need an unsubscribe link?
Purely transactional messages, such as a receipt or a password reset, are generally not required to carry one, because the person asked for them by taking the action. Marketing messages always do. If you are unsure which a message is, treat it as marketing, and check the rules where your recipients live.
How fast should a transactional email arrive?
Within seconds. Hand it to your email service as soon as the event happens, and make sure that service sends from a queue that does not wait behind bulk mail.
Should I use an API or SMTP?
Either can work. An API usually gives you better error messages, idempotency and delivery events, which is why most new projects use it. SMTP is mainly for software that cannot call an API.
Keep reading
- Transactional email vs marketing email
- An email deliverability checklist for small businesses
- Password reset emails: how to make them secure and make them arrive
SendSend is an email API that checks these records for you and tells you when a domain is verified. Get started free.