DMARC from p=none to p=reject without breaking mail
By James Bayliss · Updated · Reviewed
In this guide
What DMARC does
DMARC ties authentication to the address people actually see. A message passes DMARC when either:
- SPF passes and the envelope (Return-Path) domain aligns with the From: domain, or
- DKIM passes and the signing domain (
d=) aligns with the From: domain.
If neither is true, the receiver applies your published policy: none (deliver as normal), quarantine (treat as suspicious, usually the spam folder) or reject (refuse it). The policy lives in a TXT record at _dmarc.<your-domain>.
DMARC was originally published as RFC 7489. In May 2026 it was replaced by RFC 9989 (the "DMARCbis" update), with reporting split into RFCs 9990 and 9991. The record still starts with v=DMARC1, and existing records keep working. The changes that affect a rollout are covered below.
The record, tag by tag
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com; adkim=r; aspf=r"
| Tag | Purpose | Notes |
|---|---|---|
v=DMARC1 | Version | Required, first |
p= | Policy for the domain | none, quarantine, reject |
sp= | Policy for existing subdomains | Defaults to p |
np= | Policy for non-existent subdomains | New in RFC 9989; defaults to sp, then p |
rua= | Where aggregate (daily XML) reports go | Essential |
ruf= | Where failure reports go | Few receivers send them, for privacy reasons |
adkim=, aspf= | Alignment mode: r relaxed (default) or s strict | Leave at relaxed unless you have a reason |
t=y | Test mode (RFC 9989): asks receivers to apply one level less than the policy | Replaces most uses of pct |
pct= | Percentage to apply the policy to | Removed in RFC 9989; older receivers may still honour it |
If the reports should go to a mailbox at a different domain, that domain must publish a record authorising it, for example example.com._report._dmarc.reports-vendor.example. Report services set this up for you.
The rollout plan
Stage 1: Monitor (2 to 6 weeks)
Publish p=none with rua=. Nothing changes for delivery, but you start receiving aggregate reports from Gmail, Yahoo, Microsoft and others, listing every IP that sent mail claiming your domain, and whether it passed SPF, DKIM and alignment.
Raw reports are XML and arrive daily per receiver. Use a report-processing service or an open-source parser; reading them by hand doesn't scale beyond a tiny domain.
Note that Gmail, Yahoo and Microsoft already require at least p=none from bulk senders. See the sender requirements guide.
Stage 2: Fix every legitimate source
Sort report sources into three groups:
- Passing and aligned. Your main mail platform should be here once SPF and DKIM are set up.
- Legitimate but failing. Typical cases are a marketing tool signing with its own domain, a help desk sending through its default return-path, and a copier relaying through an unauthenticated server. For each one, configure custom-domain DKIM (preferred) or a custom return-path covered by SPF.
- Not yours. Spoofing, or forwarding. This is exactly what enforcement will stop.
Repeat until group 2 is empty for at least two weeks of reports. Pay attention to senders that only send monthly or quarterly, such as invoicing runs and annual reminders.
Stage 3: Quarantine
Change to p=quarantine. If your receivers support RFC 9989, t=y lets you test first: receivers apply one level less than your policy (quarantine becomes none). Keep watching reports. Anything legitimate that still fails will now land in spam, and users tend to notice within days.
Stay here for 2 to 4 weeks.
Stage 4: Reject
Change to p=reject. Spoofed mail using your exact domain is now refused by receivers that honour DMARC. Keep rua= forever: reports are how you'll learn when a new tool is added without authentication.
Subdomains and lookalikes
- Existing subdomains inherit
punless you setsp. Settingsp=nonewhilep=rejectleaves every subdomain open to spoofing; avoid it unless a subdomain genuinely can't comply yet. - Non-existent subdomains, such as
payroll.example.comwhen nothing exists there, are a favourite for phishing. RFC 9989'snp=rejectcovers them explicitly. - Lookalike domains (
examp1e.com) are outside DMARC's reach. They need monitoring and registration, not DNS records.
Common mistakes
- Jumping straight to
p=reject. The first sign of a missed sender is often a lost invoice or password-reset email. - No
rua=. Without reports, you're enforcing blind. - Two DMARC records. Receivers then ignore DMARC entirely.
- Relying on SPF alone. SPF breaks when mail is forwarded; aligned DKIM survives. Make sure every source signs.
- Publishing at the wrong name. The record goes at
_dmarc.example.com, not atexample.com. - Forgetting parked domains. Domains that send no mail should publish
v=DMARC1; p=reject;together withv=spf1 -all.
From the field: DMARC is the policy you present that you want the recipient to follow if SPF (authorized server) or DKIM (authorized message) fail their checks. If you have it set to reject and no mail is going through, it is better to drop to quarantine than none. With quarantine, you still have protection for your domain's reputation still in place while you troubleshoot.
Check your record
The Email Record Lookup parses your DMARC record and flags a missing rua, monitoring-only policies, exempt subdomains and duplicate records. To see why a particular message failed, compare its Return-Path and DKIM d= with the From: domain; the alignment guide walks through it.
Sources
Check it now
Email Record Lookup Is this domain's email set up correctly: MX, DMARC, DKIM and SPF?
Related guides
- DMARC alignment, explained: why SPF passes but DMARC fails
Which domains DMARC compares, relaxed vs strict alignment, and how to fix the most common "SPF pass, DMARC fail" and "DKIM pass, DMARC fail" cases.
- SPF explained: how to read, write and audit an SPF record
How SPF works, what each mechanism and qualifier means, how receivers evaluate a record, and the mistakes that make SPF fail for every message.
- DKIM selectors: finding, verifying and rotating keys
What a DKIM selector is, how to find the one your mail platform uses, how to verify the published key, and how to rotate keys without failed signatures.