Email security check
SPF, DKIM, DMARC, MTA-STS, TLS-RPT and BIMI graded, with the exact records to fix what is missing.
Working on it…
Looking up SPF, DKIM, DMARC and MX records. This takes a few seconds.
What this tool checks
Enter a domain (or an email address; the part after the @ is used) and the tool reads its public DNS records. It looks at:
- MX: mail servers, or a null MX (
MX 0 .) saying the domain accepts no mail. - SPF (RFC 7208): the
v=spf1TXT record. It checks there is exactly one, how it ends (-all,~all,?all,+allor nothing), whether it uses the deprecatedptrmechanism, and how many DNS lookups it needs, following everyinclude:andredirect=. - DMARC (RFC 7489): the
v=DMARC1record at_dmarc.example.com, itsp=policy,pct=and report address (rua=). - DKIM: keys live at
selector._domainkey.example.com, and the selector can be any name. The tool tries selectors used by common providers (such asgoogle,selector1,selector2,default,k1). If a random selector also answers, the domain has a wildcard record and selectors cannot be tested from outside. - MTA-STS (RFC 8461): the
v=STSv1record at_mta-sts.example.com, then the policy file athttps://mta-sts.example.com/.well-known/mta-sts.txtand itsmode. - TLS-RPT (RFC 8460): the
v=TLSRPTv1record at_smtp._tls.example.com. - BIMI: a
v=BIMI1record atdefault._bimi.example.com, reported only when present.
What it can't see: whether your mail actually passes SPF and DKIM. That only shows in the Authentication-Results header of a real message. For a subdomain without a DMARC record of its own, it walks up to the parent domain the way receivers do and tells you whose policy applies.
Reading the results
Each finding is marked pass, info, warning or fail, and problems come with a fix and, where useful, a ready-to-copy record for your domain. The Published records table shows the raw records the verdicts are based on: MX, SPF, DMARC, the DKIM selectors found, the MTA-STS mode and any BIMI record.
| Result | Meaning |
|---|---|
SPF ends in -all or ~all |
Pass. Unlisted senders get a fail or soft fail. |
SPF ends in ?all or has no all |
Warning. Unlisted senders get "neutral", which protects nothing. |
SPF ends in +all |
Fail. Anyone may send as the domain. |
| More than 10 SPF lookups | Fail. Receivers return a permanent error, so SPF fails for all mail. |
DMARC p=reject / p=quarantine |
Pass. Spoofed mail is refused or sent to spam. |
DMARC p=none |
Warning. Monitoring only; spoofed mail is still delivered. |
MTA-STS enforce / testing |
Pass / info. A policy file that won't load is a fail. |
Common problems and fixes
No SPF record, or more than one
Publish exactly one v=spf1 TXT record listing every service that sends as your domain; two records are a permanent error. A domain that never sends mail should say so:
example.com. TXT "v=spf1 -all"
SPF needs more than 10 DNS lookups
Each include: counts, plus every lookup inside it. Remove includes for services you no longer use, or replace some with the ip4:/ip6: ranges they cover (those ranges can change, so review them). Replace ptr too.
example.com. TXT "v=spf1 ip4:192.0.2.0/24 include:_spf.example.net -all"
DMARC missing or stuck on p=none
Start with p=none and a report address, read the reports until all legitimate mail passes, then move to quarantine and reject. The tool suggests:
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; adkim=r; aspf=r"
A pct= below 100 applies the policy to only that share of failing mail.
MTA-STS record but the policy file won't load
The file must be served over HTTPS with a valid certificate for mta-sts.example.com; check it with the SSL/TLS certificate check. A minimal policy:
version: STSv1
mode: testing
mx: mail.example.com
max_age: 86400
Move to mode: enforce once TLS-RPT reports are clean, and change the TXT record's id= whenever the policy changes.
No TLS-RPT
Add a reporting address for TLS failures on your inbound mail:
_smtp._tls.example.com. TXT "v=TLSRPTv1; rua=mailto:tls-reports@example.com"
If mail still lands in spam, run a blacklist check on your sending IP.
FAQ
What does DMARC p=none mean?
Monitor only. Receivers send you reports but deliver mail that fails DMARC as normal. It is the right starting point, but stops no spoofing until you move to quarantine or reject.
How many DNS lookups can SPF use?
Ten. RFC 7208 limits the terms that need a DNS query (include, a, mx, ptr, exists, redirect), including those inside included records. Going over is a permanent error and SPF fails.
Should I use ~all or -all?
Both are fine when DMARC is enforcing. ~all is safer while you are still finding senders; switch to -all once every sender is listed.
Why does the tool say no DKIM key was found when I have DKIM set up?
Selectors can be any name and the tool only tries common ones. Look for s= in the DKIM-Signature header of a message you sent, then look up selector._domainkey.example.com with the DNS lookup tool.
Do I need MTA-STS and TLS-RPT?
They are optional. MTA-STS makes sending servers insist on TLS when delivering to you, which stops downgrade attacks; TLS-RPT sends you daily reports about failed TLS connections.