Blog · Dmarc

How Strict Should Your DMARC Policy Be? Real-World Risks of Each Level

How strict should your DMARC policy be? Here is what actually breaks

The question sounds simple. p=none, p=quarantine, or p=reject. Pick one. But every email administrator who has moved to a stricter DMARC policy has a story about the email that stopped working on a Friday afternoon.

The honest answer is: it depends on your mail flow, your senders, and how thoroughly you have audited your DNS records before you tighten anything.

The real trade-off is not security versus convenience. It is an operational risk decision. At p=none you have visibility but no protection. At p=reject you have strong protection but zero margin for error if your senders are not configured correctly.

Here is how each level works and what breaks at each one.

DMARC policy levels explained: what p=none, p=quarantine, and p=reject actually do

p=none means: do nothing to messages that fail DMARC. Just send me reports. This is monitoring mode. It provides zero protection against domain spoofing. Anyone can send email claiming to be from your domain and receivers will accept it. p=none exists so you can see what your mail flow looks like before you start blocking anything.

p=quarantine means: treat failing messages as suspicious. Most receivers will route them to spam or junk. Some receivers may accept them anyway. p=quarantine reduces spoofing risk but does not eliminate it. The definition from RFC 7489 describes it as a signal to handle failing mail as less trusted, not as a hard block.

p=reject means: refuse failing messages outright. The receiver should not accept them. This is the only policy level that provides real protection against domain spoofing. But it also means any legitimate email that fails alignment gets blocked.

What each policy level protects against and what it does not

p=none has no security value beyond visibility. If your goal is to reduce spoofing of your domain, p=none does nothing for that goal.

p=quarantine reduces spoofing risk but inconsistently. Receivers interpret quarantine differently. Some route to spam, some accept with warnings, some treat it as a soft reject. You cannot rely on p=quarantine to stop spoofed mail reliably across all receivers.

p=reject provides the strongest protection. When a receiver sees a message that fails DMARC alignment and your policy is p=reject, the message should not be delivered. This is the only setting that actually stops spoofing at the receiver level.

The threat model matters here. DMARC protects your domain from being used in spoofing attacks. It does not protect against compromised accounts, phishing from lookalike domains, or email that genuinely comes from your infrastructure but fails alignment for other reasons.

Real failure modes: what breaks at p=quarantine and p=reject

These are the specific sending patterns that fail DMARC at enforcement levels. If any of these apply to your infrastructure, fix them before tightening policy.

Marketing automation platforms that send on your behalf using your domain but sign with their own DKIM key. If the aligned domain in the DKIM signature does not match your RFC 5322 From domain, the message fails alignment.

Legacy email systems that relay mail for your domain without preserving DKIM signatures. The relay rewrites headers or strips signatures, breaking alignment.

Email forwarding chains that modify message headers. Forwarded messages often fail alignment because the forwarder changes the From address or adds headers that DKIM cannot validate.

Multi-vendor email stacks where different services send as your domain with different subdomains or third-party domains. Each service needs its own DKIM key aligned to the RFC 5322 From domain.

Internal mail relays that rewrite headers for routing purposes. Internal mail that works fine on your network can fail DMARC when it leaves your infrastructure and hits a receiver that enforces policy.

How to assess whether your domain is ready for a stricter policy

Before you move to p=quarantine or p=reject, do these checks.

Run p=none and collect aggregate reports for at least two to four weeks. One week is not enough. You need to see the full pattern of legitimate senders, including any that only send monthly or quarterly.

Check that every legitimate sender has aligned DKIM signatures. This means the DKIM signing domain matches the RFC 5322 From domain exactly (strict alignment) or shares the same organizational domain (relaxed alignment). If a vendor sends as orders@yourdomain.com but signs with dkim.vendor.com, that fails alignment.

Identify every third-party service that sends as your domain. This includes marketing platforms, support tools, billing systems, and any SaaS that sends email on your behalf. Each one needs proper alignment configured.

Verify that forwarding chains you control use ARC. If you forward mail for users, ARC preserves the authentication results so forwarded messages can still pass DMARC.

This is where DMARCFlow fits naturally into the process. You need to track your alignment pass rate, watch for new failure sources, and monitor whether your legitimate senders are getting cleaner or dirtier over time. That is not a one-time audit. It is ongoing until you enforce. DMARCFlow is designed for exactly this monitoring window between p=none and a stricter policy.

How to safely move from p=none to p=quarantine

Move incrementally. Never jump from p=none directly to p=reject unless you are certain your mail flow is completely clean.

Week one through week four: deploy p=none. Collect and review aggregate reports every few days. Build a list of all legitimate sources that are failing alignment. Fix each one before proceeding.

Week five: move to p=quarantine. Monitor reports daily. New failure sources often appear at this stage that were not visible at p=none because receivers were accepting everything. When a previously clean source starts failing, it usually means something in your infrastructure changed and you need to investigate before it causes recipient complaints.

Week six and beyond: if quarantine produces no critical failures, consider moving to p=reject. If something breaks, roll back to p=quarantine or p=none while you investigate.

Always keep a p=none fallback record as a DNS TXT entry you can switch to if something goes wrong. Changing your DMARC record takes minutes. The rollback option should already exist before you start.

What DMARC reports tell you about readiness to tighten policy

These patterns in aggregate reports indicate readiness for stricter enforcement.

Alignment pass rate above 95% for legitimate mail. If more than 5% of your legitimate senders are failing alignment, you have work to do before enforcement.

Consistent source IPs from known legitimate senders. If you see IPs you do not recognize in reports, investigate before tightening policy.

No unknown third-party senders appearing for the first time after the baseline period. New senders that appear in reports after you have been monitoring for weeks need evaluation before you enforce.

Low failure rate from internal mail infrastructure. Internal relays, archives, and journaling systems that fail alignment will cause problems at p=reject if they are not fixed first.

Risk comparison: p=none vs p=quarantine vs p=reject

Policy Protection level Risk of breaking mail Rollback complexity
p=none None Zero None needed
p=quarantine Moderate Medium Switch to p=none
p=reject High High if alignment is not clean Switch to p=none or p=quarantine

Frequently asked questions

What happens to legitimate email when I set p=quarantine?

It depends on the receiver. Some route to spam, some add a warning, some accept with a lower reputation score. p=quarantine does not guarantee that failing mail is blocked. It only tells receivers to treat it as suspicious.

Can I change my DMARC policy back if something breaks?

Yes. DMARC is a DNS TXT record. Changing it takes minutes. If something breaks after you tighten policy, you can immediately roll back to a less strict setting while you investigate.

How long should I run p=none before moving to p=quarantine?

At least two to four weeks. You need to see the full pattern of legitimate senders, including any that send infrequently. One week of reports is not representative.

Does p=reject mean all failing email is deleted?

It means receivers should refuse the message. Whether they delete it, bounce it, or quarantine it varies by receiver. The intent of p=reject is that the message is not delivered to the recipient.

What percentage of domains actually use p=reject?

According to DMARC monitoring data, roughly 15-20% of domains with published DMARC records use p=reject. The majority use p=none. p=quarantine is relatively rare.

Do I need both SPF and DKIM aligned to use p=reject safely?

You need at least one aligned authentication mechanism. DMARC requires either aligned SPF or aligned DKIM (or both) to pass. If neither SPF nor DKIM is aligned, the message fails DMARC regardless of policy level.

What does a DMARC aggregate report tell me before I change policy?

It shows every source that has sent email claiming to be from your domain, whether it passed or failed SPF and DKIM, whether alignment passed or failed, and the volume of mail from each source. This tells you who your legitimate senders are and whether they are properly configured before you start blocking anything.

The short version

Start with p=none. Watch your reports for at least a month. Fix every legitimate sender that fails alignment. When your alignment pass rate is above 95% and no new failure sources are appearing, move to p=quarantine. Monitor for another two to four weeks. Then, if everything looks clean, consider p=reject.

The policy level you choose is less important than the work you do before changing it.