Skip to main content
ShieldMarc
Resources/Guides
Guide

DMARC p=quarantine vs p=reject: Which Policy Should You Use?

Every DMARC deployment eventually hits the same decision: do you quarantine failing mail, or reject it outright? Both are enforcement policies and both will block exact-domain spoofing, but they behave very differently at the mailbox and carry different risks. This guide explains what each policy actually does, when to pick one over the other, and how to move from one to the next without breaking legitimate mail flow.

8 min read · Updated June 2026

What the two policies actually mean

A DMARC record tells receiving mail servers what to do when a message fails SPF and DKIM alignment. The p= tag has three valid values: none, quarantine, and reject. The first is a monitoring mode and does not protect anything. The other two are enforcement.

PolicyWhat the receiver doesUser visible?
p=noneDelivers normally. Sends reports to the rua address. No enforcement.Yes (delivered)
p=quarantineDelivers the message to the junk or spam folder, or flags it for extra scrutiny. The user can still find it.Yes (in junk)
p=rejectRefuses the message at the SMTP level. The sending server receives a 5xx rejection. The recipient never sees it.No (silently dropped)

The practical difference is visibility. With quarantine, a legitimate mail that somehow ends up failing alignment still lands somewhere the recipient can recover it. With reject, the message is gone, and the sending user is responsible for spotting the bounce. For phishing protection that difference is exactly what you want, but during a rollout it can be dangerous.

Why most teams start with quarantine

Even when you have spent weeks cleaning up SPF and DKIM, there is almost always a legitimate sender you have missed. A third party payroll provider, a board member forwarding from a personal Gmail, an old e commerce platform that nobody remembers signing up to. The first few weeks at enforcement will surface these, and you want them to land somewhere recoverable.

Quarantine is the forgiving option. If you miss a legitimate sender, the mail goes to junk instead of vanishing. Users notice, report it, and you add the source to your authorised list. With reject, the first you hear about the problem is an angry phone call from someone who missed an invoice.

For organisations moving from p=none for the first time, quarantine is the right first enforcement stage. The safer approach is not to ramp pct= blindly, but to keep monitoring your aggregate reports after the switch and catch any legitimate sender that is still failing alignment. ShieldMarc flags these for you automatically so you do not have to dig through raw XML.

When reject is the right answer

Reject is the policy you want for domains where the risk of spoofing outweighs the cost of a false positive. That is the case more often than people assume. Specifically:

  • Parked and alias domains. If a domain does not send legitimate email at all, it should be at p=reject from day one. There is nothing to break. Anyone sending from it is, by definition, an attacker. Our guide on parked domain protection covers this in more detail.
  • Transactional only domains. If a domain is used exclusively by a tightly controlled transactional provider (for example, receipts.yourbrand.com via SendGrid), you can safely reach reject quickly because the authorised sender set is small and stable.
  • Public sector and financial services. The downside of a phishing incident (regulatory reporting, reputation damage, fines) dwarfs the inconvenience of a missed legitimate email. Reject should be the target state.
  • Any domain that is a frequent phishing target. If your brand shows up in phishing reports or your users receive spoofed mail, quarantine is not enough. Users do read their junk folder. Reject is the only policy that eliminates the message entirely.

The sp= tag: the trap everybody misses

The p= tag only applies to the organisational domain itself. Sub domains are governed by a separate tag, sp=. If you do not set sp, DMARC applies the same policy as p, but only for domains without their own DMARC record. This is where most enforcement strategies have a hole.

Consider a DMARC record like this:

v=DMARC1; p=reject; rua=mailto:reports@yourdomain.com

This looks strong. The organisational domain is at reject, sub domains inherit that policy. But the moment an attacker targets unused.yourdomain.com, some receivers may still apply a more lenient default if the inheritance is ambiguous. The safest record sets the subdomain policy explicitly:

v=DMARC1; p=reject; sp=reject; rua=mailto:reports@yourdomain.com

Explicit sp=reject closes the inheritance gap and is the part we recommend for any mature deployment. Strict alignment (adkim=s, aspf=s) is an optional extra that eliminates some subdomain spoofing tricks, but add it only once your reports confirm every legitimate sender aligns exactly. The relaxed default (adkim=r, aspf=r) is safer for domains that rely on third-party senders, which often align on the organisational domain rather than the exact subdomain.

The rollout sequence we recommend

ShieldMarc's approach to enforcement is driven by actively reading the DMARC reports you are already receiving, not by ramping pct= blindly. The platform parses every incoming aggregate report, classifies every sender, and tells you exactly when the next stage is safe. The full step-by-step enforcement journey from p=none to p=reject looks like this:

  1. Publish p=none and point rua at ShieldMarc. From the moment the record is live, aggregate reports land in your reports dashboard and are parsed automatically. You see every sender using your domain, aligned or not, within hours of the first report arriving.
  2. Work the report inbox, not the clock. Instead of waiting a fixed number of weeks, actively read the reports as they arrive. ShieldMarc's threat scoring separates misconfigured legitimate services, forwarders, and genuine spoofing attempts so your team only acts on the senders that actually need attention. Authorise each legitimate source in the platform, fix its SPF or DKIM, and watch subsequent reports confirm the fix.
  3. Move to p=quarantine when the reports are clean. Clean means every authorised sender is aligning, any unknown sender is either a threat or an edge case you have consciously accepted, and ShieldMarc has collected enough data to be confident (at least 10 reports over 14+ days). The platform flags readiness for you so you are not guessing.
  4. Keep reading reports at quarantine. Moving policy does not mean you stop monitoring. New senders appear as services are added, providers rotate IPs, and forwarding patterns change. The ShieldMarc reports dashboard is where you notice these changes before they become a problem.
  5. Move to p=reject when quarantine is stable. Same gate: reports clean, no unresolved unauthorised senders, and the readiness check in ShieldMarc is green. Set sp=reject at the same time to close the sub domain gap.
  6. Keep the rua feed active indefinitely. DMARC is not a deploy-and-forget control. At reject, the reports are your early warning system for new spoofing attempts, broken third party senders, and policy regressions. ShieldMarc keeps the history so you can audit any change after the fact.

This sequence is the foundation of our a strong Security Grade path and is the approach we take for every domain onboarded to ShieldMarc.

What about pct= with reject?

A pattern you will see in older guides is p=reject; pct=50. This sounds like half of failing mail gets rejected, but the actual behaviour is more subtle. When pct is less than 100, the DMARC specification says receivers should apply the next softer policy to the remaining fraction. So p=reject; pct=50 is effectively 50 percent reject, 50 percent quarantine, not 50 percent reject and 50 percent deliver.

We do not recommend pct ramping as a rollout strategy. It hides real problems behind a probability and makes reports harder to read because the same sender can appear aligned or unaligned on different rows depending on which bucket the receiver randomly placed it in. If you know exactly how each legitimate sender is aligning, because you have been reading the reports, you do not need pct at all. Move when the data says it is safe, not when a percentage feels comfortable.

DMARCbis settles the argument for good. The pct tag is removed entirely (Appendix A.6 of RFC 9989) and replaced by a binary t= testing tag, where t=y tells receivers to apply the policy one step softer than stated (so p=reject; t=y is treated as quarantine). There is no percentage to ramp, which is exactly why the report-driven approach is the only one that still makes sense.

When you should stay at quarantine permanently

Quarantine can be a permanent destination. Some organisations choose to remain at quarantine as their terminal state, and that is a reasonable decision when:

  • You have a long tail of low volume legitimate senders that are difficult to catalogue completely.
  • You cross forward mail heavily through mailing lists or aliases (forwarding tends to break SPF, and DKIM survives only if signatures are not modified).
  • Your users are technical and comfortable checking junk when something goes missing.
  • Regulatory or audit requirements only mandate enforcement, not specifically reject.

Quarantine plus strict alignment still blocks the vast majority of spoofing attempts. The last few percent of hardening you get from reject is worth chasing when you can, but it is not an absolute requirement.

Next steps

  • Check your current DMARC record with our free DMARC Checker. It tells you what policy you are on and whether your sp, adkim, and aspf tags are set correctly.
  • Use the DMARC Generator to build a correct record with the right sp, pct, and alignment settings.
  • Read our full guide on reading DMARC aggregate reports so you can make informed ramp decisions.
  • Run a full Security Grade check to see where you sit across every email security layer.

Frequently asked questions

What does p=none, p=quarantine and p=reject mean in DMARC?

In DMARC, p=none monitors only (it delivers all mail normally and just sends reports, so it offers no protection), p=quarantine sends mail that fails authentication to the spam or junk folder, and p=reject blocks failing mail outright so the recipient never sees it. The p= tag tells receiving servers what to do when a message fails both SPF and DKIM alignment, as defined in RFC 7489, the original DMARC specification, obsoleted in May 2026 by DMARCbis RFC 9989. Only quarantine and reject are enforcement; none is purely a reporting mode.

Which DMARC policy is best?

The best DMARC policy is p=reject with an explicit sp=reject: at reject, DMARC blocks exact-domain spoofing outright, so it is the strongest policy and the target most sending domains should aim for. p=none offers no protection (it only monitors), and p=quarantine sends failing mail to junk where a user can still open it. Strict alignment (adkim=s; aspf=s) is optional extra hardening against subdomain tricks once every sender aligns exactly; the relaxed default is fine for most active senders. The catch is that reject is only safe once every legitimate sender passes, or you will block real email. ShieldMarc parses your aggregate reports and flags exactly when reject is safe, so you can start monitoring free and reach the strongest policy without breaking mail flow.

Should I use p=quarantine or p=reject?

Use p=reject wherever the risk of spoofing outweighs the cost of a rare false positive, and use p=quarantine as the safer first enforcement stage while you confirm every legitimate sender aligns. Reject is the stronger control because it removes the spoofed message entirely, whereas quarantine only moves it to junk where a user can still open it. Parked domains, transactional-only domains, and frequent phishing targets should aim for reject; teams with a long tail of hard-to-catalogue senders may reasonably stay at quarantine. Either way, pair it with strict alignment and an explicit sp= tag.

Is p=none enough to protect my domain?

No, p=none does not protect your domain at all; it is a monitoring mode only. Under none, receiving servers deliver every message normally and simply send aggregate reports to your rua address, so a spoofed message that fails SPF and DKIM still reaches the inbox. None is valuable as the first step because it shows you who is sending as your domain, but real protection only begins once you move to p=quarantine or p=reject. See RFC 7489, obsoleted in May 2026 by DMARCbis RFC 9989 for the policy definitions.

How do I move from p=quarantine to p=reject safely?

Move from p=quarantine to p=reject only once your aggregate reports confirm that every legitimate sender is passing SPF or DKIM alignment, with no unresolved unauthorised senders. The decision is report-driven, not time-driven: read the reports as they arrive, authorise each genuine source, and switch when the data is clean. We do not recommend ramping the pct= tag, because it only samples failing mail at random and delays nothing useful while making reports harder to read. Set sp=reject at the same time to close the subdomain inheritance gap. ShieldMarc parses your reports and flags exactly when reject is safe.

Reach enforcement without breaking mail flow

The hardest part of moving to reject is knowing when it is safe to take the next step. ShieldMarc collects your DMARC reports, flags unaligned senders, and tells you exactly when your domain is ready for the next stage. Create a free account and start your rollout with confidence.