About this tool
Most email deliverability problems come down to a handful of DNS records that are easy to get subtly wrong: an SPF record that silently exceeds its lookup limit, a DMARC policy left at p=none for years, a DKIM key that was revoked or is too short. This DMARC checker, SPF record checker and DKIM record lookup reads those records straight from your browser. Enter a domain (a full URL or an email address is fine — the page extracts the domain, converts international names to punycode and shows both forms) and optionally the DKIM selectors you use. The page queries the record names — example.com, _dmarc.example.com, selector._domainkey.example.com and so on — through Cloudflare's public DNS-over-HTTPS service, falling back to Google's. That service sees the names and your IP address, as any DNS resolver does; no message is sent, and nothing else about you leaves the browser. The result is a traffic light per card and one overall light: green when the records are correct, yellow when mail will send but something is risky, red when mail is likely to be rejected or the domain is open to spoofing.
SPF: the 10-lookup limit, explained with a tree
RFC 7208 allows at most ten DNS-querying mechanisms per SPF evaluation — include, a, mx, ptr, exists and redirect all count, and nested includes count too. Exceed it and receivers return permerror, which many treat as no SPF at all. The page expands include: and redirect= recursively into a tree with a lookup marker on every node, so you can see which includes cost the most. a, mx, ptr and exists are counted toward the limit but not resolved, because their targets do not change the count. Includes whose target has no record are counted as void lookups, which are limited to two. The page also flags more than one v=spf1 record (a permerror), +all and ?all (which allow anyone), the deprecated ptr mechanism, syntax errors and include loops — a loop is only a domain that appears in its own ancestor path; the same include referenced from two branches is legitimate and is counted twice, as receivers count it. When you are over the limit, the fix offered is to remove includes for services you no longer use or to move a sending service to its own subdomain. SPF flattening — replacing includes with the IP addresses they resolve to today — is deliberately not offered: those addresses change without notice, and a flattened record breaks the day your email provider changes its ranges.
DMARC: from p=none to a policy that protects you
The page fetches _dmarc.<domain> and, when a subdomain has no record of its own, falls back to the organisational domain as RFC 7489 specifies, using the Public Suffix List to find it. It reports the policy (p=), the subdomain policy (sp=), pct=, the alignment modes adkim= and aspf=, and the reporting addresses rua= and ruf=. p=none is marked as monitoring only: receivers report but do not act, so the domain is still spoofable; pct below 100 means only a share of failing mail is acted on. When rua= points at a mailbox in another domain, the page looks for the authorisation record <domain>._report._dmarc.<report domain> and warns that reports will not be sent if it is missing. The suggested path is the one that does not break mail: start with p=none; rua=mailto:…, read the reports until every legitimate sender is aligned, then move to quarantine and finally reject.
DKIM, MX, BIMI, MTA-STS and TLS-RPT
DKIM selectors cannot be enumerated from outside — DNS has no way to list *._domainkey names — so the page tries the selectors you enter plus a list of common names (google, selector1, selector2, k1, s1, s2, default, dkim, mail and others). Not found therefore means not found under these names, never that DKIM is unconfigured. Keys that are found are checked for length (RSA under 1024 bits is red, 1024 is yellow), for an empty p= meaning the key was revoked, for t=y test mode and for syntax. MX records are listed by priority with their addresses; a missing MX is flagged, an MX pointing at a CNAME is flagged, and a Null MX (0 ., RFC 7505) is reported as the correct way to say a domain does not receive mail, not as an error. BIMI (default._bimi) is checked for format and shown with its l= logo and a= certificate URLs; the logo itself is not fetched, and the card reminds you that BIMI only takes effect under a DMARC policy of quarantine or reject. MTA-STS (RFC 8461) and TLS-RPT (RFC 8460) are checked at the DNS level only: a browser cannot fetch https://mta-sts.<domain>/.well-known/mta-sts.txt because of CORS, so the policy URL is shown as a link for you to open.
What a green light means — and what it does not
The records shown are what Cloudflare's or Google's resolver sees right now. A record you changed minutes ago may still be cached for its TTL, so re-check after it expires rather than assuming the change failed. Green means the records are correctly set, not that your mail will reach the inbox: sender reputation, content and sending volume decide that, and none of it is visible from DNS. For the same reason there is no numeric score — a number like 87 would look precise while meaning nothing. If a particular message bounced or landed in spam, open its headers in the email header analyzer, which traces the route and verifies DKIM; its summary card links back here with the sender's domain. Both pages produce a Markdown report and a JSON export you can paste into a ticket.