What DMARC really controls
DMARC is not “another DNS record for deliverability”. It is a policy layer on top of SPF and DKIM. It answers one question: does this message authenticate, and does it align with the visible From domain?
That last part, alignment, is why people get confused. SPF can pass for a bounce domain and still fail DMARC. DKIM can pass with a signing domain that does not match the From domain and still fail DMARC. DMARC cares about what the recipient sees in the From header.
When you should run a DMARC check
- You are seeing
dmarc=failin Gmail or Outlook headers. - You set up DMARC years ago and forgot what it is doing now.
- You are about to move from
p=nonetoquarantineorreject. - You use multiple senders (newsletters, transactional, outreach) and want to avoid breaking legit mail.
The tags that matter most
v: must beDMARC1.p: policy for the root domain:none,quarantine, orreject.rua: aggregate reports mailbox. This is how you see who is sending on your domain.ruf: forensic/failure reports (often not supported or privacy-limited now, so don’t rely on it).adkimandaspf: alignment mode.ris relaxed,sis strict.pct: percentage of mail affected. Useful for gradual rollout.sp: policy for subdomains. People forget this and accidentally break subdomain sending.
Common scenarios that trigger DMARC failure
1) SPF passes but DMARC fails
This is almost always SPF alignment. The sending IP is allowed, but it authenticated a different domain than the visible From domain. Fix: configure a custom MAIL FROM / return-path domain in your ESP, or rely on DKIM alignment.
2) DKIM passes but DMARC fails
The message is signed, but the signing domain (d=) does not align with the From domain.
Fix: enable “sign with your domain” or “custom DKIM” in the provider so DKIM uses your domain.
3) DMARC is correct, but your mail still goes to spam
DMARC passing does not guarantee inbox placement. Reputation, engagement, list quality, and complaint rate still matter. DMARC is table stakes, not a magic button.
How to roll out DMARC safely
- Start at p=none: publish DMARC with
ruaso you can see senders in reports. - Fix alignment first: make sure your main senders pass DMARC consistently.
- Use pct to ramp: move to
quarantinewithpct=10, then 25, 50, 100. - Then consider reject: only when you are confident no legit streams are failing.
If you have subdomain sending (for example news.example.com), pay attention to sp.