DMARC · policies
p=none, quarantine or reject: which to choose
The p= tag of a DMARC record takes three values. p=none asks receiving servers to report back without blocking anything. p=quarantine files the message as junk, where it remains readable. p=reject has it refused during the SMTP conversation: it never arrives. Only p=reject protects.
By Tom GernezUpdated 5 min read
Key points
- p=none blocks nothing. It is a measuring instrument, not a protection.
- p=quarantine delivers the message to the junk folder: it can still be read and believed.
- p=reject is the only value that stops a spoofed message arriving.
pct=never applies top=none, and its fallback behaviour regularly surprises people.- Without
sp=, subdomains inherit the main domain's policy.
What each value does to the message
The DMARC policy is the instruction you publish for mail servers everywhere. It applies only to messages that fail DMARC, meaning those where neither SPF nor DKIM is both valid and aligned with the displayed domain. A correctly configured legitimate message is never affected, whatever the value.
| Policy | The message is… | The recipient… | You… |
|---|---|---|---|
p=none | delivered normally, to the inbox | reads it none the wiser | get a report the next day |
p=quarantine | delivered to the junk folder | can find it there and believe it | get a report the next day |
p=reject | refused during the SMTP conversation | never sees it | get a report the next day |
Why p=none protects nothing
This is the most expensive misunderstanding in the subject. A domain at p=none has a valid DMARC record, shows as “compliant” in most online checkers, and ticks the box on insurance questionnaires. It blocks not one spoofed message.
p=none exists for one reason: discovery. During the first weeks of a rollout it brings in the daily reports that reveal which services legitimately send in your name, without risking blocking one of them by mistake. It is scaffolding. Scaffolding left up for three years is no longer scaffolding, it is an admission.
The Google, Yahoo and Microsoft requirements for high-volume senders ask for “at least p=none”. That phrasing is often read as a recommendation; it is an eligibility floor, not a target.
The case of p=quarantine
Quarantine is a stage, not a destination. It has a real virtue during rollout: if a legitimate sender has been missed, its messages land in the recipient's junk folder instead of vanishing, and somebody eventually notices.
Its weakness is the same fact: the message stays reachable. A client expecting an invoice who does not see it arrive goes looking in their junk folder, finds it, and acts on it. Against bank-detail fraud, quarantine only slows things down.
pct=, and its fallback trap
The pct= tag gives the share of failing messages the policy applies to, from 1 to 100. It defaults to 100. Its purpose is gradual tightening: p=quarantine; pct=25 junks a quarter of failing messages and lets the other three quarters through.
The trap is in the fallback. Messages not selected by pct= are not treated as though the policy were none: they get the next policy down. With p=reject; pct=25, a quarter of messages are rejected and the other three quarters are quarantined, not delivered. It is reasonable behaviour, and it is almost never what people expect.
sp=, the subdomain policy
Without sp=, subdomains inherit the policy published on the parent domain. That is the desirable behaviour in nearly every case: a fraudster who cannot spoof example.com will try accounts.example.com, which has never existed and which nobody watches.
sp= serves the opposite exception: a subdomain sending through a provider that is not yet aligned, which you want to leave in monitoring while the parent domain is already rejecting. It is a temporary measure, to be documented and dated, or it becomes a door left open.
The decision rule
- The domain sends no email at all (parked, defensive registration, old trading name): publish
p=rejectimmediately, with an empty SPF record. No monitoring period is needed, since there is nothing legitimate to break. - The domain sends and you do not yet know all its senders:
p=nonewithrua, for two to four weeks. No longer. - The reports are clean and every legitimate sender is aligned:
p=quarantinefor one to two weeks, watching. - Nothing has moved the wrong way:
p=reject, thenadkim=s; aspf=sonce rejection has settled.
The detailed procedure, with what to check at each stage, is in the article on moving to rejection.
What the policy does not decide
The policy applies only to messages displaying exactly your domain. A message from a cousin domain is unaffected, whatever the value of p=: it does not fail your DMARC, it never meets it.
It is also an instruction, not a guarantee of enforcement. Nearly all world mail volume is handled by servers that honour it, but a poorly maintained company mail server may simply ignore it.
Common questions
Sources
Definitions
Read next
- DMARC: the complete guide
What DMARC is, how to read the record, how to publish it and how to move it to rejection without breaking your mail. Written by a consultant who deploys it, with the exact values.
- Moving DMARC to reject without breaking your mail
The rollout to p=reject, stage by stage, over two to three weeks. How to read the reports, align every legitimate sender, and how to tell when it is safe to tighten.
- What DMARC does not stop
DMARC blocks exact spoofing of your domain and nothing else. Cousin domains, misleading display names and compromised mailboxes all go straight through. What that means in practice.
Want to know what is published on your domain? The check is free, takes no sign-up, and reads only public records. Check your domain
Tom Gernez · Independent information security consultant. Ruvalin sets up email authentication for small French firms and professional practices.