How to check SPF and DMARC records and fix the common errors
SPF tells receivers which servers may send mail for your domain. DMARC tells them what to do when a message fails. Both are a TXT record away, and both have rules that are easy to break.
SPF: the rules that matter (RFC 7208)
- Exactly one SPF record. A domain publishes SPF as a TXT record starting with
v=spf1. RFC 7208 section 4.5 says that if more than one record is found, the result ispermerror. SPF then fails for every message. Merge them into one record. - At most 10 DNS-querying terms. Section 4.6.4 limits the total of
include,a,mx,ptr,existsandredirectto 10 during evaluation, including nested includes. Going over is also apermerror. The termsip4,ip6andalldo not count. - End with an
allmechanism.-all(fail) or~all(softfail) treats unlisted servers as unauthorised.?allis neutral.+alllets any server on the internet pass SPF for your domain, so never publish it.
example.com. TXT "v=spf1 include:_spf.mail-provider.example ip4:192.0.2.10 -all"
DMARC: the rules that matter (RFC 9989)
DMARC was updated in May 2026: RFC 9989 (core), RFC 9990 (aggregate reports) and RFC 9991 (failure reports) obsolete RFC 7489.
- The record lives at
_dmarc.+ your domain as a TXT record starting withv=DMARC1. - Exactly one record. If several DMARC records are returned for a name, RFC 9989 says they are all discarded. That means no policy at all.
- Set a policy.
p=noneonly monitors,p=quarantineasks receivers to treat failures as suspicious, andp=rejectasks them to reject failures. Under RFC 9989 a record withoutp=is treated asp=none, so spoofed mail is still delivered. - Ask for reports.
rua=mailto:…asks receivers to send aggregate reports about who sends mail as your domain. Read them before you move fromnonetoquarantineorreject. - Know which tags changed. RFC 9989 deprecates
pct,rfandri, and addsnp(policy for non-existent subdomains).
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"
Domains that never send mail
For a parked or web-only domain, publish an SPF record of v=spf1 -all and a DMARC record with p=reject. A null MX record (RFC 7505: MX 0 .) also says the domain accepts no mail.
Check it in one step
The free Domain Watch check reads your records from your browser through public DNS-over-HTTPS, and flags:
- multiple SPF records,
+all,?alland a missingall; - SPF records close to or over the lookup limit: a warning at 8 or more DNS-querying terms, critical above 10. It counts top-level terms only, so nested includes add more;
- a missing DMARC record, multiple DMARC records, no
p=andp=none; - a missing
rua.
It also shows A/AAAA, MX (including null MX), NS, CAA, whether the resolver validated DNSSEC, and the registration expiry date from RDAP.
It does not show TLS certificate expiry, because browsers do not let a page read certificates.
Try it free: Free DNS, SPF and DMARC checker
Type a domain to see its public DNS records, SPF and DMARC problems, CAA, DNSSEC and when the domain registration expires.
Open the free tool →About the product: Domain Watch
The tool runs in your browser; only the domain name is sent to public DNS-over-HTTPS and RDAP services. No signup.
Sources
Venture Lab 10 is independent. Other product and service names are used only to describe compatibility or for comparison, and are trademarks of their owners.