Skip to content
praneeth.me

praneeth@website:~$ domain --health [beta]

Domain health check: email authentication, mail transport and DNS security

A graded report on everything public DNS says about a domain’s email and DNS security — SPF, DKIM, DMARC, MX, MTA-STS, TLS-RPT, DANE, DNSSEC and CAA — and what to fix first.

Runs in your browser. Nothing is sent to this site. The only thing that leaves the tab is public DNS queries about the domain you enter, sent to Cloudflare’s resolver when you press check — the same questions any mail server asks. The report lists every one.

What it checks

SPF RFC 7208
Follows every include and redirect and counts the DNS lookups against the limit of ten — the thing that silently breaks when a provider changes theirs. Flags +all, ?all, ptr, loops, void lookups and multiple records.
DKIM RFC 6376
Probes the selectors your mail providers use by default plus 34 common ones, and checks each key against RFC 6376's syntax and RFC 8301's sizes: under 1024 bits fails, 1024 meets the minimum but not the recommended 2048, and Ed25519 (RFC 8463) is fine.
DMARC RFC 9989
Validated by the same library as /bin/dmarc. Follows the tree walk for subdomains, and checks that any external report address has authorised receiving your reports — otherwise they are silently dropped.
MX RFC 5321
Every mail host resolves to an address, none is an IP address or a CNAME (RFC 5321 §5.1, RFC 2181 §10.3), and a domain that takes no mail can say so with a null MX (RFC 7505).
MTA-STS / DANE RFC 8461
Whether sending servers are told to insist on authenticated TLS when delivering to you: an MTA-STS policy whose host resolves, or DANE — validated TLSA records on every MX, reached through validated MX records (RFC 7672 §2.2.1).
TLS-RPT RFC 8460
Whether anyone tells you when a sender couldn't deliver securely.
DNSSEC RFC 4033
Signed and validating; unsigned, or signed with no DS record in the parent — both leave answers unauthenticated; or signed and broken, which makes the domain vanish for every validating resolver.
CAA RFC 8659
Which certificate authorities may issue for the domain, climbing to parent names as CAs do (RFC 8659 §3), and whether a record restricts nothing — or, marked critical, blocks everyone.
Nameservers RFC 2182
At least two, as the DNS specification requires (RFC 2182 recommends three), and who operates them.
BIMI, IPv6
Reported, not graded: a brand logo record and whether it can show, and whether the web and mail hosts are reachable over IPv6.

How the grade works

Each check scores points, and each category is the share of its points earned. The overall score weights them: email authentication 50%, mail transport 25%, dns security 25%. Checks that don’t apply — transport security for a domain that takes no mail — are left out rather than counted as zero.

Letters from the score: A from 85, B from 70, C from 55, D from 40, F below. Some failures cap the grade however good the rest is:

  • max F DNSSEC is broken, so validating resolvers can't reach the domain at all
  • max F SPF ends in "+all", authorising every server on the internet
  • max D no DMARC policy is in force (missing, or invalid)
  • max C DMARC is at p=none, so the domain can still be spoofed
  • max C SPF returns permerror (too many lookups, multiple records, bad syntax)
  • max C no MX host can receive mail

A+ is an A with nothing left undone: every graded check passing outright, DMARC at reject, DNSSEC signed, and encrypted delivery enforced with MTA-STS or DANE (or, for a domain that takes no mail, a null MX). If a lookup a graded check depends on fails, there is no grade — a score built on a resolver that didn’t answer would be a claim about the resolver.

What a browser can’t check

For a staged route from no DMARC to p=reject, see dmarc --check; to see how one real message fared, headers --trace. Every DNS question here goes to cloudflare-dns.com over HTTPS, with no cookies and no referrer.