Check your email domain's SPF, DKIM and DMARC
SPF, DKIM, DMARC and MX in one pass, graded A to F.
The lookups go from your browser to a public DNS-over-HTTPS resolver. Nothing is sent to Unitpost, and there's no sign-up.
Enter a domain to check the DNS records receiving servers read before they trust its mail: SPF (which servers may send), DKIM (the public key that verifies signatures), DMARC (what to do when authentication fails) and MX (where replies and bounces go). The checker also looks for BIMI, MTA-STS and TLS-RPT, then grades the result out of 100 against a published rubric, with every lost point linked to its fix.
What each check means
Each check reads one DNS record that receiving mail servers look up when mail arrives from your domain, or when they deliver mail to it.
| Check | Where it looks | What receivers use it for |
|---|---|---|
| SPF | TXT at the domain, starting v=spf1 | Whether the server handing over the message may send for the envelope (Return-Path) domain. |
| DKIM | TXT at <selector>._domainkey.<domain> | The public key that verifies the DKIM-Signature header on each message. |
| DMARC | TXT at _dmarc.<domain> | What to do with mail whose From domain isn't backed by an aligned SPF or DKIM pass, and where to send reports. |
| MX | MX at the domain | Where replies and bounces addressed to the domain are delivered. |
| BIMI | TXT at default._bimi.<domain> | A logo some inboxes show beside authenticated mail. |
| MTA-STS | TXT at _mta-sts.<domain> | Whether servers delivering to you must use TLS with a valid certificate. |
| TLS-RPT | TXT at _smtp._tls.<domain> | Where servers delivering to you report TLS failures. |
DNS can't list a domain's DKIM keys, so without a selector the checker tries a set of common ones. Finding nothing there proves nothing: enter the selector from the s= tag of a message you sent.
SPF lives on the Return-Path domain
Receivers check SPF on the envelope sender, which is often a subdomain your email provider asked you to create, not the domain in your From address. If you send through Unitpost, the SPF record for that mail is on unitpost.<your domain>: check that name too.
How the grade works
The grade starts at 100 and loses the points listed below for each problem found. A finding costs its points once, however many times it appears, and no check loses more than its maximum: 30 for SPF, 30 for DMARC, 20 for DKIM and 20 for MX. 90 or more is an A, 80 a B, 70 a C, 60 a D, and anything lower an F. BIMI, MTA-STS and TLS-RPT are reported but cost nothing.
The grade measures what DNS can show, and only that. It can't see the reputation of your sending IPs or domain, your content, whether real messages align with your From domain (paste a message's headers into the header analyzer for that), whether marketing mail carries one-click unsubscribe headers, or your spam complaint rate. A domain can grade A and still land in spam.
What to fix first
Fix what stops your mail from authenticating at all, then what lets others send as you, then the rest.
- SPF errors that fail every message: two SPF records, a syntax error, more than 10 DNS lookups, or an include that doesn't resolve. Each is a permerror, which fails SPF for all mail, not just some.
- DKIM: publish the key for the selector your provider signs with, 1024 bits at least and 2048 preferred.
- DMARC: publish
v=DMARC1; p=none; rua=mailto:dmarc@example.comso you start getting reports. Gmail, Yahoo and Microsoft require a DMARC record from bulk senders. - MX: give the domain somewhere to receive replies and bounces.
- Tighten: once reports show every legitimate source passing, move DMARC to
p=quarantine, thenp=reject, and end SPF in~allor-all. - Extras: MTA-STS and TLS-RPT protect mail sent to you. BIMI only shows once DMARC is enforced.
What each mailbox provider requires, and the rejection codes they send when something is missing: bulk sender requirements.
Checking a domain you send through a provider
Check both the domain in your From address and the Return-Path domain your provider uses, because SPF and bounces live on the second and DKIM and DMARC on the first.
For a domain that sends through Unitpost, these are the records the domain page asks for:
| Type | Name | Value |
|---|---|---|
| MX | unitpost.example.com | The host shown on your domain page, so bounces come back to us. |
| TXT (SPF) | unitpost.example.com | The v=spf1 value shown on your domain page. |
| TXT (DKIM) | <selector>._domainkey.example.com | v=DKIM1; k=rsa; p=<2048-bit public key>, with a selector of your own. |
| TXT (DMARC) | _dmarc.example.com | v=DMARC1; p=none; to start. Optional for sending, required by Gmail and Yahoo for bulk senders. |
Your apex SPF record stays as it is: Unitpost mail doesn't need an include there. Unitpost keeps checking these records after the domain verifies, and a domain whose records drift shows as Degraded on its page. More in Sending domains and why verification is never one-time.
Errors and how to fix them
Domain publishes a null MX record
Also reported as: Null MX; 550 5.7.27 Sender address has null MX; Domain does not accept mail
A single MX record of 0 . (RFC 7505) declares that the domain never receives mail. Receivers may refuse mail that uses the domain as its sender, with 550 5.7.27, and replies and bounces to it have nowhere to go.
- If the domain sends mail, delete the
0 .record and publish the MX records your mailbox provider gives you, such asexample.com. MX 10 mx1.mailhost.example. - If the domain really never sends or receives mail, keep the null MX and send from a domain or subdomain that has real MX records.
- Check again once the old record's TTL has passed.
No MX record found
Also reported as: MX record missing; Implicit MX; Mail falls back to the A record
With no MX record, servers deliver mail for the domain to its A or AAAA address instead (RFC 5321 §5.1). That is usually a web server that doesn't accept mail, so replies to your messages and bounces sent to the domain fail or go somewhere nobody reads.
- Publish the MX records from your mailbox provider at the domain:
example.com. MX 10 mx1.mailhost.example. - Make sure the Return-Path domain can take bounces. Providers that use their own return-path subdomain publish an MX there; Unitpost asks for one on
unitpost.<your domain>. - Check again.
No MX or A record: domain can't receive mail
Also reported as: Sender address rejected: Domain not found; Sender domain has no MX record; Domain does not resolve
The domain has neither MX nor address records, so no server can deliver to it. Receivers that check whether a sender's domain can receive mail refuse messages from it, and bounces have nowhere to go.
- Check the spelling of the domain you entered and of the one in your From address.
- Confirm the domain is registered and delegated:
dig NS example.com +shortshould list your DNS host's nameservers. - Publish MX records from your mailbox provider:
example.com. MX 10 mx1.mailhost.example.
BIMI record found
Also reported as: BIMI record; default._bimi TXT record
A v=BIMI1 record at default._bimi.<domain> points to a logo that supporting inboxes show beside your authenticated mail. The record alone isn't enough: Gmail also needs DMARC at quarantine or reject applied to all mail, and a mark certificate (a VMC or a CMC) from a certificate authority.
- Check the shape:
v=BIMI1; l=https://example.com/logo.svg; a=https://example.com/mark.pem, with both URLs on HTTPS. - Keep DMARC at
p=quarantineorp=reject, with nopctbelow 100. - Get the logo in SVG Tiny PS format and the certificate from the issuing authority; logos can take a couple of days to appear after the record is published.
BIMI logo not showing: DMARC is not enforced
Also reported as: BIMI requires DMARC enforcement; DMARC policy is not at enforcement
BIMI is published, but the domain's DMARC policy is p=none, missing, or uses pct below 100. Inboxes that support BIMI show the logo only when DMARC is quarantine or reject for all mail.
- Confirm in your DMARC aggregate reports that every legitimate source passes with alignment.
- Move the policy to
p=quarantine, thenp=reject, and remove anypcttag so it applies to all mail. - Check the domain again; the warning clears once the policy is enforced.
MTA-STS record found
Also reported as: MTA-STS; _mta-sts TXT record
A v=STSv1 record at _mta-sts.<domain> tells servers that support MTA-STS (RFC 8461) to fetch your policy and deliver to you only over TLS with a valid certificate. This check sees the TXT record only. The policy file at https://mta-sts.<domain>/.well-known/mta-sts.txt sets the mode, and senders enforce it only when it says mode: enforce.
- Open the policy file in a browser and confirm it lists every MX host on an
mx:line and themodeyou intend. - Run
mode: testingwith TLS-RPT turned on until the reports show no failures, then switch tomode: enforce. - Change the
id=value in the TXT record every time you edit the policy file, or senders keep using the copy they cached.
TLS-RPT record found
Also reported as: SMTP TLS reporting; _smtp._tls TXT record
A v=TLSRPTv1 record at _smtp._tls.<domain> (RFC 8460) asks servers that deliver to you to send reports of TLS failures they hit, usually one a day per reporting organization.
- Check the shape:
v=TLSRPTv1; rua=mailto:tls-reports@example.com. - Point it at a mailbox or service that can take machine-readable JSON reports, often compressed.
- Read the reports before you move MTA-STS from
testingtoenforce.
DNS lookup failed (SERVFAIL or timeout)
Also reported as: SERVFAIL; DNS timeout; SPF temperror; Couldn't read TXT records
The resolvers answered with an error, or not at all, so the check couldn't tell whether the record exists. Receivers that hit the same error get a temporary error (temperror) and usually defer your mail until it clears.
- Run the check again in a minute; a one-off timeout clears by itself.
- Ask your nameservers directly:
dig NS example.com +short, thendig TXT example.com @<one of those nameservers>. A nameserver that doesn't answer needs fixing at your DNS host. - If every lookup returns SERVFAIL, check DNSSEC. A DS record at your registrar that no longer matches the zone's keys, common after moving DNS hosts, makes validating resolvers fail every query. Update or remove the DS record.
Frequently asked questions
Why does my domain get an A but my email still goes to spam?
Do I need SPF, DKIM and DMARC?
Why does the checker say SPF is missing when my provider says my domain is verified?
Why can't the checker find my DKIM key?
Does Unitpost store the domains I check?
Go deeper: Gmail, Yahoo and Microsoft bulk sender requirements · Why your email goes to spam · Sending domains in Unitpost · Why domain verification should never be a one-time check
Free tools
Send from a domain that checks out
Unitpost sets up SPF, DKIM and DMARC with you and keeps checking them.