Email testing checklist

Seventeen checks before a service starts sending mail, or before it changes how it sends. The published records come first, because every later reading is compared against them, and because the failure they cause has no error message: a record that parses and a record that is correct look the same from the sending side. The middle group covers the connection, which is where a test environment quietly sends real mail to real people. The last group is the message a recipient opens, checked as the bytes that arrive rather than as the template that was written. Run everything against a domain and a server you own.

17 checksabout 150 min end to end

What receivers will read before they read the message

  • How to check SPF record
    Read the whole record rather than the part a grep cuts off, since one qualifier decides between a mark and a rejection.
    4 min
  • How to check SPF lookup limit
    The count that matters is the one after every include is expanded, and it grows when a provider edits a record you do not own.
    6 min
  • How to check DKIM record
    A published key that does not match the signer produces a valid-looking signature that fails every verification.
    5 min
  • How to check DKIM selector
    No query lists a domain's selectors, so the one in use has to come from a message the domain actually sent.
    6 min
  • How to check DMARC record
    The policy decides what a receiver does with the two results above, and p=none decides nothing.
    5 min
  • How to check DMARC alignment
    A passing SPF or DKIM result that is not aligned with the visible sender does not satisfy DMARC, which is the failure that surprises people.
    8 min

Where the mail goes and how it gets there

  • How to check mx records
    Mail routing fails without an error page, so a missing or misordered MX reads as silence.
    6 min
  • How to check ptr record
    The reverse record belongs to whoever owns the address block rather than to the zone, which is why it is the usual orphan after a move.
    7 min
  • How to test SMTP connection
    Confirm the server answers, greets and advertises what the sending code expects before blaming the sending code.
    10 min
  • Test SMTP with STARTTLS
    An advertised STARTTLS that fails to negotiate downgrades to plaintext without stopping the send.
    12 min
  • How to check MTA-STS
    The policy is what turns an opportunistic upgrade into a requirement, and it is served over HTTPS rather than published in DNS.
    6 min

Send one and read what arrives

The message the recipient opens

  • How to test transactional email rendering
    What arrives is the bytes after the sending library has rewritten them, which is frequently not the template that was reviewed.
    12 min
  • How to check List-Unsubscribe header
    The header is what mailbox providers surface as a one-click option, and its absence pushes recipients towards the spam button instead.
    12 min
  • How to check if email bounced
    A bounce that nothing reads turns a delivery failure into a silent one, and repeated sending to a dead address is what costs a sender its reputation.
    14 min

Take it with you

The file is the same list as Markdown checkboxes, ready to paste into a release ticket or a pull request description.

Ticks are kept in this browser only. They are not sent anywhere and other people do not see them.