DMARC policy explained: none vs quarantine vs reject, and how to move up safely
One tag in one DNS record decides what the world's mail servers do with
messages that fail authentication for your domain. Everything else in a
DMARC record is instrumentation; p= is the policy —
the part with consequences:
v=DMARC1; p=quarantine; sp=reject; pct=100; rua=mailto:reports@example.com
This article is about that policy layer: what none, quarantine and
reject each mean at the receiving end, what the supporting tags
(sp=, pct=) change, and the staged rollout that takes a domain to
enforcement without quarantining its own invoices. It deliberately stops
there — the click-by-click setup lives in a separate
walkthrough, diagnosing failures in
another, and reading the XML reports in a
third.
What a DMARC policy actually controls
When a message fails DMARC — no aligned SPF or
DKIM pass for the From: domain — the receiver looks
at your published policy to decide the message's fate. That's the deal
DMARC offers: you, the domain owner, state the consequence; receivers
apply it.
Two boundaries keep expectations honest. First, the policy applies only
to failing mail. Moving from p=none to p=reject changes nothing
for messages that authenticate correctly. Second, the policy is a
request, not a command — receivers overwhelmingly honor it, but they
retain discretion, and some (notably certain enterprise gateways) apply
local overrides. Aggregate reports even have a field for this:
disposition records what the receiver actually did, which sometimes
differs from what you asked.
p=none: monitoring mode
v=DMARC1; p=none; rua=mailto:reports@example.com
p=none asks receivers to deliver failing mail normally and tell you
about it in reports. It provides zero spoofing protection — a forged
message failing every check still lands wherever it would have anyway.
That sounds useless and isn't. p=none exists because turning
enforcement on blind is dangerous: almost every organization discovers,
in its first weeks of reports, legitimate senders it forgot — the
billing system, the CRM, the survey tool marketing connected years ago,
none of them aligned. At p=none those discoveries cost nothing. At
p=reject each one is lost mail.
p=none also satisfies the letter of Google's and Yahoo's bulk sender
requirements, which demand a published DMARC policy but not a specific
level. That has made it the internet's most popular parking spot — and
the canonical DMARC failure is the domain that parks there forever,
reports unread, protection never engaged. Treat none as a phase with
an exit date, not a destination.
p=quarantine: failures go to spam
v=DMARC1; p=quarantine; rua=mailto:reports@example.com
p=quarantine asks receivers to treat failing mail with suspicion — in
practice, almost always the spam folder. Spoofed messages stop reaching
inboxes; misconfigured legitimate mail stops reaching them too, which is
why you only move here after the reports run clean.
Quarantine is genuine protection with a safety net: a wrongly-failing message is recoverable from spam by an alert recipient, and the damage of a mistake is bounded. For many organizations it's also a comfortable long-term operating level while the last stubborn mail flows (an ancient regional mail relay, a partner sending as your domain) get fixed or retired.
p=reject: failures bounce
v=DMARC1; p=reject; rua=mailto:reports@example.com
p=reject asks receivers to refuse failing mail outright during the
SMTP conversation. The spoofed message is never delivered anywhere; the
sender gets a bounce. This is full enforcement — the level at which
your domain stops being usable for impersonation at any honoring
receiver, and the level BIMI logo display requires
(quarantine at full coverage also qualifies with most providers).
Reject's cost profile is the mirror of its benefit: a legitimate mail flow you missed doesn't land in spam, it vanishes from the recipient's world entirely. Which is why reject is earned through the ladder, not declared on day one.
The supporting tags: sp= and pct=
sp= sets a separate policy for subdomains. Omitted, subdomains
inherit p=. The tag matters in both directions: a root at p=none
with sp=reject protects unused subdomains while you sort out the
root, and a root at p=reject still doesn't cover a delegated
subdomain that publishes its own weaker record. Spoofers probe
subdomains precisely because they're the forgotten flank.
pct= applies the policy to a sampled percentage of failing mail:
p=quarantine; pct=25 quarantines roughly a quarter of failures and
delivers the rest. It exists to soften transitions — a dial between
levels rather than a cliff. Three cautions: it samples failing mail
only (your aligned mail is never touched); receivers honor it unevenly;
and pct below 100 means most spoofed traffic still gets through, so
it's a rollout tool, never an endpoint. Ratchet it up and remove it.
The staged rollout
The ladder, with the gate for each rung:
- Publish
p=nonewith aruaaddress. The DMARC generator builds a correct record; the DMARC checker confirms what's live. Gate to proceed: none — do this today. - Read reports for several weeks. Inventory every source sending as your domain; decide which are yours. Gate: every legitimate source identified.
- Fix alignment source by source. Custom DKIM signing at your ESP, SPF includes for your own systems, retirement of flows nobody owns. Gate: reports show your legitimate mail passing aligned, consistently.
- Move to
p=quarantine— directly, or viapct=25 → 50 → 100over a few weeks if your mail streams are complex. Gate: a full reporting cycle at quarantine with no legitimate mail caught. - Move to
p=reject. Keep reading reports; new systems and new vendors will keep appearing for as long as your organization exists.
Timeline honestly stated: small senders with one ESP can walk this in a few weeks; organizations with many mail-generating systems routinely take months. The pace is set by step 3, and step 3 is set by how many things send as your domain — most people's answer is "more than we thought."
Choosing your operating level
The decision is about failure costs, not ambition. If a spoofed message
in a customer's inbox is a serious harm (finance, B2B with invoice
flows, anyone phished before), push to reject and accept the operational
care it demands. If your mail ecosystem is sprawling and partially
inherited, a clean quarantine beats a rushed reject — visible-but-spam
beats silently-gone while you chase stragglers. The only wrong steady
state is p=none with unread reports: all of DMARC's cost, none of its
protection.
Related guides
- DMARC checker — validate your live record and policy right now
- DMARC generator — build a correct record for your rollout stage
- What is DMARC? — alignment and the full tag reference
- SPF record — one of the two mechanisms DMARC aligns
- DKIM — the alignment path that survives forwarding
- BIMI — the logo standard that requires enforcement
- How to set up DMARC — the step-by-step deployment walkthrough
About this guide
Written by InboxRatio Editorial. Policy behavior described here follows RFC 7489 and observable receiver practice; provider requirements are attributed to Google's and Yahoo's published sender documentation. We configure DMARC on our own test domains for every benchmark cycle, and the rollout advice above matches what we practice.
Methodology
InboxRatio measures inbox placement by sending identical campaigns through each reviewed platform to a controlled seed list — with SPF, DKIM and DMARC configured on our own domains before any measured send, because unauthenticated tests would measure the wrong thing. The full protocol is at how we test.
Last updated
21 August 2026. Reviewed quarterly against provider documentation and RFC guidance.
Frequently asked questions
What is the best DMARC policy?
The strongest your mail flows can survive. p=reject is the security
end-state, but the best policy today is the one your DMARC reports
justify: none while inventorying senders, quarantine once
legitimate mail aligns, reject when quarantine runs clean.
Is p=none good enough for Google and Yahoo's requirements? It satisfies the published requirement to have a DMARC policy, yes. It provides no spoofing protection, so treat it as compliance plus monitoring, not as a finished deployment.
What's the difference between quarantine and reject? Quarantine asks receivers to deliver failing mail to spam — recoverable by the recipient. Reject asks them to refuse it during delivery — gone, with a bounce to the sender. Quarantine bounds the cost of your mistakes; reject eliminates the spoofed message entirely.
How long should I stay at p=none? Until several consecutive weeks of aggregate reports show every legitimate source passing with alignment. For a simple setup that can be under a month; for a complex organization, several. The gate is report contents, not elapsed time.
Does p=reject affect my deliverability? Your aligned mail is untouched — policy applies only to failures. Indirectly, enforcement helps domain reputation by cutting spoofed traffic that would otherwise pollute your domain's track record.
Can I set different policies for subdomains?
Yes — sp= sets the subdomain policy, and any subdomain can publish
its own _dmarc record that overrides inheritance. Audit what actually
resolves for your subdomains; inherited assumptions and DNS reality
drift apart.
Do this much today: publish p=none with a reporting address, put a
recurring slot on the calendar to read what comes back, and let the
reports — not the calendar — promote you to quarantine and reject.
The first step takes two minutes with the
DMARC generator.