How to Validate a DMARC Record Before You Publish It (Tag by Tag)
A DMARC record only works if it parses the way the standard says it should, and the cheapest time to find a mistake is before you publish it. The format is defined in RFC 7489, which we read for this post on 9 November 2026. Section 6.3 says the v and p tags must be present and must appear in that order, and that unknown tags must be ignored. That last rule is the dangerous one: a misspelled tag does not produce an error, it is skipped.
The free DMARC record validator checks a pasted record tag by tag against those rules and returns errors, warnings and notes, and the host name to publish it at. Below is what it checks and why.
Where the record lives
Section 6.1 of the standard says domain owner preferences are stored as DNS TXT records in subdomains named _dmarc. For example.com the record is a TXT record at _dmarc.example.com. Type your domain into the validator's optional field and it prints that host name. Many DNS panels add the domain for you, so you enter only _dmarc in the name box; if yours does not, a name that ends up as _dmarc.example.com.example.com is the classic mistake.
To see what is live right now, how to check a domain's DMARC record shows the lookup, and DMARC record not found lists the usual reasons it is missing.
The tags, and what the validator checks
| Tag | Meaning | Allowed values and default (RFC 7489 section 6.3) |
|---|---|---|
| v | Version | Must be DMARC1 and must come first |
| p | Policy for the domain | none, quarantine or reject; required; must come second |
| sp | Policy for subdomains | Same values; if absent, p applies to subdomains |
| adkim | DKIM alignment | r (relaxed) or s (strict); default r |
| aspf | SPF alignment | r or s; default r |
| pct | Share of failing mail the policy applies to | Whole number 0 to 100; default 100 |
| rua | Where aggregate reports go | Comma-separated list of URIs |
| ruf | Where failure reports go | Comma-separated list of URIs |
| fo | Failure report options | Default 0 |
| ri | Report interval | 32-bit unsigned integer of seconds; default 86400 |
| rf | Report format | Default afrf |
The validator flags as errors the things that make a receiver ignore or misread the record: a missing v, a v that is not DMARC1, a missing p, a p that is not in second place, and a value outside the allowed set, such as p=quarantined or pct=150. It flags as warnings things like a duplicated tag or a rua address that is not a mailto: URI. It flags as notes things that are legal but worth knowing: p=none is monitoring only, there is no rua so no reports will arrive, pct is under 100, or a tag it does not recognise.
The mistakes that matter most
vnot first. A leading space, a BOM from a paste, or a quote character in front ofv=DMARC1. Receivers discard a record that does not begin with a valid version tag.pnot second. People putruabeforepout of habit. The standard saysvandpappear in that order.- Smart quotes or stray characters from a document. The validator accepts quoted or split strings the way a receiver joins them, and flags what is left.
- A typo in a tag name.
adkimm=sis an unknown tag and is ignored, so you get relaxed alignment and no error. ruawithoutmailto:. Receivers must supportmailto:for report URIs, so userua=mailto:name@yourdomain.com.- Two records. Section 6.6.3 says that if the remaining set contains multiple records, policy discovery terminates and DMARC is not applied to the message. If a past setup left one behind, you now have none in effect. The zone file audit lists duplicates in a pasted zone.
A sensible starting record
v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com
It has the two required tags in the right order and asks for aggregate reports. Run it through the validator, publish it, and read the reports for a few weeks before tightening. DMARC record examples shows variations, and moving from none to reject covers the path. Reading DMARC aggregate reports explains what arrives.
What DMARC cannot tell you
DMARC answers one question: when a message claims to be from your domain and fails SPF and DKIM alignment, what should the receiver do? It cannot tell a receiver whether the recipient exists, and it cannot reduce your bounces. A domain at p=reject with a clean authentication setup can still send to a list full of dead addresses and still be judged on the bounces.
So treat the two as separate jobs with separate tools:
- Authentication (SPF, DKIM, DMARC): set once, validated with the DNS tools, rechecked when you add a sending service.
- List quality: repeated every campaign, handled by verification.
SPF, DKIM and DMARC explained shows how the first three relate, and what is DMARC alignment covers the adkim and aspf settings.
Before you send from a newly authenticated domain
- Validate the DMARC record with the validator.
- Check each DKIM key with the DKIM key length checker.
- Verify the list at /verify. Suppress invalid addresses for good.
- Send valid rows first. Send risky rows in a small, slower group afterwards.
- Read the first aggregate reports when they arrive.
Try it on your own list
Upload a sample at /verify. The first 100 checks are free with a Google sign-in, no card.
Pro, $39 a month: Unlimited email verification.* Never metered, never cut off. See pricing.
*Fair use: the first 100,000 checks a month at full speed, then slower, never cut off.
Common questions
Where does a DMARC record go?
In a TXT record at _dmarc.yourdomain.com. RFC 7489 section 6.1 says domain owner DMARC preferences are stored as DNS TXT records in subdomains named _dmarc.
What is the minimum valid DMARC record?
v=DMARC1; p=none. RFC 7489 section 6.3 requires the v and p tags, in that order. Most people add a rua tag so receivers send aggregate reports.
What are the defaults if I leave tags out?
From RFC 7489 section 6.3: adkim and aspf default to r (relaxed), pct defaults to 100, fo defaults to 0, ri defaults to 86400 seconds, and rf defaults to afrf. If sp is absent, the p policy applies to subdomains.
What happens to a tag the standard does not define?
RFC 7489 says unknown tags must be ignored. The validator flags it as a note so you can see a typo, such as a misspelled tag name, that would otherwise be ignored without warning.
Can I have two DMARC records?
No. Policy discovery in RFC 7489 section 6.6.3 says that if the remaining set contains multiple records, discovery terminates and DMARC processing is not applied to the message. Keep one.
Does p=none do anything?
It asks receivers to take no action on failing mail, which makes it the monitoring setting. It still lets you collect aggregate reports if rua is set.
Check your list before you send
Real mailbox checks over SMTP, and nothing is sent to the address. Sign in with Google and your first 100 email checks are free, no card. Plans for bigger lists are on the pricing page.