DMARC is the record that finally makes SPF and DKIM mean something. On their own, those two tell a receiver whether a message authenticated — but they don’t say what to do if it didn’t, and they don’t check that the authenticated domain matches the one the reader actually sees. DMARC does both: it ties authentication to the visible From: address and tells receivers to quarantine or reject anything that fails. It also sends you reports, which is the part people underuse. Published carelessly it can bounce your own mail; published in stages it’s the single most effective anti-spoofing control you have. The standard is RFC 7489, and dmarc.org has good background.
What the tags mean
p=— the policy for the domain:none(monitor only),quarantine(send failures to spam), orreject(refuse them outright). This is the lever everything else supports.rua=— where aggregate reports go (e.g.mailto:dmarc@yourdomain.com). These daily XML summaries are how you discover who’s sending as you.ruf=— where forensic/failure reports go. Fewer receivers send these, and they can contain message content, so many operators leaverufoff for privacy.pct=— the percentage of mail the policy applies to. Settingpct=25atquarantinelets you ramp enforcement gradually instead of all at once.sp=— a separate policy for subdomains. Useful when you wantrejecton the org domain but a looser stance on subdomains, or vice versa.adkim=/aspf=— alignment mode,r(relaxed) ors(strict), for DKIM and SPF respectively. Relaxed allows subdomains to align; strict requires an exact match.
Alignment is the whole point
A message can pass SPF or DKIM and still fail DMARC, because DMARC also requires alignment: the domain that authenticated has to match the domain in the visible From: header. SPF aligns on the envelope MAIL FROM; DKIM aligns on the signature’s d=. This is exactly why mail sent through an ESP can authenticate perfectly and still fail DMARC — it’s signed and authorised as the ESP’s domain, not yours. The fix is to have senders authenticate as your domain (custom return-paths and CNAME-delegated DKIM), which is worth confirming with the DKIM Checker.
Roll it out in stages — never jump to reject
- Start at
p=nonewith aruaaddress. This changes nothing about delivery; it just turns on reporting so you can see every source sending as your domain — including the ones you forgot about. - Read the reports until you’re confident every legitimate stream passes and aligns. Feed the aggregate XML into our DMARC monitoring dashboard so you’re reading trends, not raw XML.
- Move to
quarantine, optionally withpct=below 100 to ramp gradually. Watch the reports for collateral damage. - Finish at
p=rejectonce quarantine has been clean for a while. This is where DMARC actually stops spoofing.
Publishing it
Publish the generated value as a TXT record at _dmarc.yourdomain — one record, at that exact subdomain. Then verify it with the DMARC Checker, and run the full Email Health Check to see SPF, DKIM and DMARC together. If you want proof that real messages land authenticated, the Outbound Deliverability Test reads the receiving side’s Authentication-Results.
Frequently asked questions
- Should I start DMARC at p=reject?
- No — start at
p=noneto collect reports without touching delivery, confirm every sender aligns, then ramp toquarantineand finallyreject. Jumping to reject risks bouncing your own mail. - What is the difference between rua and ruf?
ruagets daily aggregate XML (who sent as you, pass/fail counts);rufgets per-message forensic reports that may include content. Most operators rely onruaand skipruf.- My mail passes SPF and DKIM but DMARC fails — why?
- DMARC needs alignment — the authenticated domain must match your
Fromdomain. Mail authenticated as your ESP’s domain isn’t aligned. Authenticate as your own domain via custom return-paths and delegated DKIM. - What does pct do in a DMARC record?
pctapplies the policy to a fraction of failing mail —pct=25quarantines a quarter and treats the rest as none. It lets you ramp enforcement gradually while watching the reports.