How to test email deliverability before you send the campaign
A pre-send routine that takes about ten minutes and catches the failures that are expensive to discover afterwards — with what each step can and cannot tell you.
A campaign is the worst time to discover a deliverability problem. The send is one-shot: you cannot recall it, the complaints it generates stay on your record, and the reputation damage outlasts the campaign by months.
Here is a pre-send routine that takes about ten minutes.
Step 1 — Check the records (1 minute, no sending)
Start with the cheapest check. The DNS checker reads your domain's SPF, DKIM, DMARC, MX, MTA-STS, TLS-RPT and BIMI straight out of DNS and grades them.
What you are looking for:
- SPF present, single record, under the ten-lookup limit, not ending in
+all. - A DKIM key at the selector your sending platform uses.
- A DMARC record that parses, with an
rua=address.
What this step cannot tell you: whether authentication actually passes. SPF is evaluated against the IP that connects, and DKIM against a signature on a real message. Records being correct is necessary, not sufficient.
Step 2 — Send the real thing to a test address (2 minutes)
Generate a one-time address and send it the actual campaign, from the actual system that will send it. Not a hand-written test from your desktop client — that tests your desktop client.
The report scores the message out of 10 and itemises every deduction:
- SPF, DKIM and DMARC as a receiver evaluates them, including alignment.
- Reverse DNS, forward-confirmed rDNS and the HELO name of the connection.
- 35 DNSBL blocklists against your sending IP, each named with its result.
- SpamAssassin rules, with what each one that fired cost you.
- Content checks: plain-text alternative, text-to-image balance, broken links.
- Headers: Message-ID, Date, From, Subject, List-Unsubscribe, Precedence.
Fix anything red, then send a fresh message to a fresh address and confirm. Each address scores exactly one message, which is what keeps a report tied to one specific send.
Step 3 — Read the deductions, not just the number
A 7/10 with one large deduction for a missing DKIM signature is a different situation from a 7/10 spread across six small content nits. The first is one fix; the second is a rewrite.
Work top-down by weight. Authentication problems are worth more than content problems, and they are usually faster to fix.
Step 4 — Check the things a score cannot see
Some of what decides your outcome is not in the message:
- Does the unsubscribe link work? Click it. From the real message. On a phone.
- Do the links go where they claim? A visible label pointing at a different domain is the most phishing-like thing you can include.
- Is the list clean? Hard bounces removed, no addresses that have ignored you for a year, no purchased segments.
- Is the volume a step change? A sudden ten-fold increase from an IP looks like a compromise. Ramp instead.
- Have you separated transactional from marketing? If a campaign gets you filtered, your password resets should not go with it.
Step 5 — Send to yourself at the providers your recipients use
Score the message, then send it to real mailboxes at whichever providers dominate your list, and look at where it landed. This is the one thing no scoring tool can do for you, because placement depends on your history with that provider and on the recipient's own behaviour.
Be careful how you read it: your own mailbox at a provider has a relationship with your domain that a stranger's does not. Inbox for you does not guarantee inbox for them. Spam for you is a strong signal that something is wrong.
What a perfect score does and does not mean
A 10/10 means the message gives filters nothing obvious to object to. It is not a guarantee of the inbox, and anything that promises otherwise is selling certainty it cannot have. Placement also depends on sending history, list quality and engagement — none of which one message can show.
That is still worth having. A message that scores badly will have problems; a message that scores well has removed every variable you control. What remains is the relationship, and that one is built over months rather than checked in ten minutes.
The short version
- Check DNS — one minute, catches record-level failures.
- Send the real message to a test address — two minutes, catches everything a receiver would see.
- Fix by weight, re-test, then send to real mailboxes at the big providers.
- Click your own unsubscribe link before ten thousand strangers do.