Ruvalin

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 to p=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.

PolicyThe message is…The recipient…You…
p=nonedelivered normally, to the inboxreads it none the wiserget a report the next day
p=quarantinedelivered to the junk foldercan find it there and believe itget a report the next day
p=rejectrefused during the SMTP conversationnever sees itget 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

  1. The domain sends no email at all (parked, defensive registration, old trading name): publish p=reject immediately, with an empty SPF record. No monitoring period is needed, since there is nothing legitimate to break.
  2. The domain sends and you do not yet know all its senders: p=none with rua, for two to four weeks. No longer.
  3. The reports are clean and every legitimate sender is aligned: p=quarantine for one to two weeks, watching.
  4. Nothing has moved the wrong way: p=reject, then adkim=s; aspf=s once 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

  • 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.

All guides

CallBook