DMARC Policy Explained: none vs quarantine vs reject

Last updated: November 2026

Disclosure: This guide contains no paid placements. The founder of WavesRank works at an IT company that resells EasyDMARC, one of the report tools mentioned below. See our Affiliate Disclosure and Editorial Policy.

Your DMARC record has one setting that decides whether it actually protects you: the policy, written as p=. It has three possible values (none, quarantine and reject), and choosing the wrong one either leaves your domain open to spoofing or blocks your own email.

This guide explains what each DMARC policy does, how to read the reports that tell you when it is safe to move up, and a simple timeline for getting to p=reject. If you have not published a DMARC record yet, start with our DMARC setup guide.

The three DMARC policies at a glance

Policy What happens to email that fails DMARC Protects your domain? When to use it
p=none Delivered normally; you only get reports No First 2–4 weeks, while you find every sender
p=quarantine Usually sent to the spam or junk folder Partly Once nearly all real email passes
p=reject Refused; never delivered Yes The goal for every business domain

p=none: monitor only

v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com

With p=none, mail providers take no action on failing email. They just send you aggregate reports showing every server that sent email using your domain, and whether it passed SPF and DKIM.

  • Use it to: discover all the services that send email as you, such as Microsoft 365, newsletters, invoicing software and website forms.
  • The risk: criminals can still spoof your domain. Many businesses publish p=none and never move on, which gives a false sense of security.

p=quarantine: send failures to spam

v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@yourdomain.com

Failing email is treated as suspicious, which in practice usually means it lands in the recipient’s junk or spam folder.

  • Use it when: your reports show your legitimate email passing consistently.
  • Why it’s a good middle step: if you missed a sender, its email goes to spam rather than disappearing, so it is easier to spot and fix.

p=reject: block spoofed email

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

Failing email is refused outright. This is the only setting that fully stops criminals sending email that uses your exact domain.

  • sp=reject applies the same policy to subdomains (such as billing.yourdomain.com).
  • np=reject covers subdomains that do not exist, a common trick for spoofers. This tag was added in the May 2026 DMARC update (RFC 9989).

Test mode: the t tag

The 2026 DMARC update replaced the old pct tag with a simpler test mode, t=y. When you add it, receivers apply the next gentler policy:

Your record What receivers apply
p=reject; t=y Quarantine
p=quarantine; t=y None (monitor only)

It is a safe way to announce a stricter policy while you watch the reports. Some older mail systems may ignore t, so do not rely on it for long; remove it once you are confident.

How to read DMARC aggregate reports

Aggregate (rua) reports are XML files sent by Google, Microsoft, Yahoo and other providers, usually once a day. Each report lists, for a given period:

Field What it tells you
Source IP The server that sent the email
Count How many messages came from that server
SPF result and domain Whether SPF passed, and for which domain
DKIM result and domain Whether DKIM passed, and for which domain
DMARC result Whether at least one check passed and aligned with your From domain
Disposition What the receiver did: none, quarantine or reject

Reading raw XML is tedious, so most businesses use a DMARC report tool that groups results by sender. Free options include Cloudflare DMARC Management (if your DNS is on Cloudflare) and Postmark’s weekly DMARC digests; paid platforms such as EasyDMARC, dmarcian and Valimail add alerts and guided fixes.

What to look for

  1. Your own services passing. Microsoft 365, Google Workspace and each third-party tool should show DMARC pass.
  2. Your own services failing. A known tool failing DMARC usually needs DKIM set up with your domain, or adding to SPF. Fix these before moving up.
  3. Unknown sources. Servers you don’t recognise sending as your domain are usually spoofing attempts, exactly what p=reject will stop.
  4. Forwarding noise. Some failures come from legitimate forwarding (for example a mailing list). These are normal in small numbers; DKIM usually survives forwarding better than SPF.

A safe timeline from none to reject

Week Policy What you do
1–3 p=none Collect reports, list every sender, fix SPF and DKIM
4–5 p=quarantine; t=y Announce quarantine in test mode, keep watching
5–6 p=quarantine Failures now go to spam; fix anything missed
7–8 p=reject Full protection; keep reviewing reports monthly

Small businesses with only Microsoft 365 or Google Workspace and one or two other tools can often move faster. Larger or older domains with many senders may need longer.

Which policy should you use?

  • Just published DMARC? p=none for a few weeks.
  • Reports clean for 2+ weeks? Move to p=quarantine.
  • Quarantine stable with no complaints? Move to p=reject.
  • Domain you don’t send email from? Go straight to p=reject with v=spf1 -all. There is nothing to break.

Frequently asked questions

Is p=none bad? It is fine as a starting point, but it does not stop spoofing. It should be temporary.

Will p=reject block my own emails? Only if a service sending as your domain is not set up with SPF or DKIM. That is why you monitor first and fix every legitimate sender before moving to reject.

Do Google, Yahoo and Microsoft require p=reject? Their bulk-sender rules require a DMARC record (p=none is accepted as a minimum), but a stronger policy gives better protection against spoofing.

How often should I check DMARC reports after reaching p=reject? Monthly is enough for most small businesses, plus whenever you add a new email tool.

What happened to the pct tag? The May 2026 DMARC update replaced pct with the t test-mode tag. Existing records with pct keep working, but new records should use t=y instead.

Related guides

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top