Skip to content
iBlockSpam
SPF, DKIM & DMARC

DMARC p=quarantine vs p=reject: which should you use?

By iBlockSpam Team How we check our guides Updated 9 min read 8 sources
Short answer

p=quarantine asks receivers to treat failing mail as suspicious, which usually means the spam folder or a quarantine. p=reject asks them to refuse it, so it bounces. Reject protects your domain more fully but loses forwarded and list mail that fails. Move from quarantine to reject only after reports show every legitimate sender passing with aligned DKIM.

Once your DMARC reports look clean, you have two enforcing policies to choose from. Both tell receivers your domain is protected; they differ in what happens to a message that fails. This guide compares p=quarantine and p=reject: what the standard says, what Gmail, Microsoft 365 and Yahoo document doing with each, the risks, and how to decide when to move. If you're still at p=none, start with moving DMARC from p=none to p=reject.

What do p=quarantine and p=reject mean?

RFC 9989, the current DMARC standard, defines the p tag as the domain owner's "message handling preference" for mail that fails DMARC. Section 4.7 describes the two enforcing values:

  • quarantine: "The Domain Owner considers such mail to be suspicious. It is possible the mail is valid, although the failure creates a significant concern."
  • reject: "The Domain Owner considers all such failures to be a clear indication that the use of the domain name is not valid."

RFC 9989 calls either one "Enforcement". Section 3.2.9 explains the practical effect: failing messages "will not reach the inbox at Mail Receivers that participate in DMARC and honor the Domain Owner's expressed handling preference."

The RFC doesn't define a spam folder or a quarantine. It leaves the details to receivers. Section 5.4 says "the final handling of any message is always a matter of local policy". For rejection, section 7.2 describes two methods: a "full rejection" with a 5xx reply during the SMTP session, so the sending server generates a bounce, or a "silent discard" that accepts the message and then drops it.

Receivers may soften reject

RFC 9989 is explicit that receivers shouldn't apply p=reject blindly. Section 5.4 says they "SHOULD NOT reject messages solely because of a published policy of 'reject'" and should apply "other knowledge and analysis". Section 7.4 goes further for indirect mail: receivers "MUST NOT reject incoming messages solely on the basis of a 'p=reject' policy", and without other analysis "MUST treat such failing mail as if the policy were 'p=quarantine'". The same section admits that "few Mail Receivers apply any mitigation techniques" for forwarded and list mail.

So treat p=reject as a strong request. Many receivers reject; some quarantine instead.

What do Gmail, Microsoft 365 and Yahoo do with each policy?

Here's what each provider documents at the time of writing (October 2026). Where a provider doesn't document something, we say so.

Receiver Failing mail, p=quarantine Failing mail, p=reject Admin can change it?
Gmail Google's rollout guide: "Messages that don't pass DMARC go to the recipient's spam folder" Bounced with 550 5.7.26 Not described in Google's DMARC help pages
Microsoft 365 (default policy) Quarantine the message (alternative: Junk Email folder) Reject the message (alternative: quarantine) Yes, per anti-phishing policy
Yahoo Not publicly documented 553 or 554, failed DMARC authentication checks n/a

Gmail

Google's recommended DMARC rollout says that with quarantine, "Messages that don't pass DMARC go to the recipient's spam folder", and that with reject, messages "are rejected by receiving servers and never delivered." Those descriptions are about receivers in general. For Gmail itself, the sender guidelines FAQ says that for messages failing DMARC, "the enforcement defined in the sending domain's DMARC policy generally applies", and that DMARC is one factor among several.

When Gmail rejects, the bounce is specific. Google's SMTP error reference lists 550 5.7.26 "Unauthenticated email from domain-name is not accepted due to domain's DMARC policy." If Gmail can't complete the DNS lookups, it defers instead with 451 4.7.26, "but temporary DNS failures". See our page on 550 5.7.26.

Microsoft 365

Microsoft 365 tenants decide for themselves, through the anti-phishing policy. The setting is Honor DMARC record policy when the message is detected as spoof, with a separate action for each sender policy (Microsoft Learn):

  • p=quarantine: "Quarantine the message" or "Move the message to the recipients' Junk Email folders".
  • p=reject: "Quarantine the message" or "Reject the message".

Microsoft's recommended settings table lists the default, Standard and Strict values as: honor DMARC on, p=quarantine → Quarantine the message, p=reject → Reject the message. Its DMARC setup article summarizes the general behavior slightly differently, as "Junk Email folder (configurable to quarantine)" for p=quarantine and "Rejected during SMTP (550 5.7.1)" for p=reject, stamped action=oreject. The two pages don't agree on the quarantine default, so check a real tenant with Get-AntiPhishPolicy | Format-List Name, HonorDmarcPolicy, DmarcQuarantineAction, DmarcRejectAction.

Three conditions matter:

  1. The action applies when "the message is detected as spoof". Microsoft also says a composite authentication failure "doesn't directly result in a message being blocked"; it weighs other signals.
  2. If the tenant's MX points to a filtering service in front of Microsoft 365, the honor setting "is applied only if Enhanced Filtering for Connectors is enabled" on the inbound connector.
  3. Admins can override it with safe senders, the Tenant Allow/Block List, allowed senders in anti-spam policies, or mail flow rules.

Microsoft's Exchange Online NDR reference also lists 5.7.509 Access denied for mail whose From domain fails DMARC and publishes p=reject, so senders may see either code.

Microsoft also treats your outbound mail differently. Mail from a Microsoft 365 domain that fails DMARC at the destination "is routed through the High-risk delivery pool for outbound messages if the DMARC policy for the domain is p=reject or p=quarantine", and "there's no override for this behavior."

Yahoo

Yahoo's SMTP error codes page lists 553 or 554 for "Your message failed authentication checks against your sending domain's DMARC or DKIM policy." Yahoo doesn't publicly describe how it handles p=quarantine failures, so don't assume a specific folder.

What are the risks of each policy?

Item p=quarantine p=reject
Spoofed mail Usually lands in spam or a quarantine, where some recipients still find and open it Refused at receivers that follow it; never reaches the recipient
Legitimate mail that fails Junked silently; nobody gets an error Bounces back to the sender, so failures are visible
Recovery Recipients or admins can release it The sender has to resend after fixing the problem
Forwarded mail without aligned DKIM Ends up in spam Bounces at the final mailbox
Mailing lists that edit posts Posts go to spam for some subscribers Posts bounce; RFC 9989 warns subscribers can be unsubscribed automatically
Visibility in reports disposition shows quarantine disposition shows reject, unless the receiver overrode it

The quiet failure mode of quarantine is easy to miss. A misconfigured invoicing tool can send to the spam folder for weeks before a customer mentions it. Reject surfaces the same problem immediately, as a bounce, which is painful but obvious.

Both policies carry the same forwarding risk; reject just makes it more costly. RFC 9989 section 7.4 says domains publishing p=reject "MUST NOT rely solely on SPF to secure a DMARC pass and MUST apply valid DKIM signatures to their messages." Our guide to forwarding, SPF and ARC explains why.

When should you move from quarantine to reject?

RFC 9989 section 7.4 gives the cautious path for domains whose users might post to mailing lists: publish p=none "for at least a month", then p=quarantine "for an equally long period of time", and compare the results. It says such domains "SHOULD NOT" publish p=reject at all unless they've checked the impact and told users that list participation "may be hindered".

Move to reject when all of these are true:

  1. You've run p=quarantine for at least a month, including a month-end and any seasonal mail such as payroll or newsletters.
  2. Every legitimate source in your reports passes DMARC through aligned DKIM, not just aligned SPF. Check selectors with the DKIM Checker.
  3. The remaining failures are forwarding, mailing lists you've accepted, or sources you've confirmed aren't yours. Unknown sources in DMARC reports shows how to sort them.
  4. Nobody has reported legitimate mail stuck in spam during the quarantine stage.
  5. Your SPF record has no PermError and you know which ending you use; SPF softfail vs hardfail explains why -all can reject forwarded mail before DMARC runs.
  6. Someone owns the reports after the switch, so new failures get noticed.

Use test mode as a bridge

RFC 9989 replaced pct with t=y. With p=reject; t=y, updated receivers apply the policy one level down, which the RFC spells out: "if the policy is 'reject' and the value of the 't' tag is 'y', a policy of 'quarantine' will be applied to failing messages". Receivers still following the older RFC 7489 ignore t, so some will apply full reject. Treat the step as real enforcement for part of your mail. DMARC record examples shows the exact records, and our DMARCbis guide covers pct and t in detail.

Domains that don't send mail

Skip quarantine. Publish v=DMARC1; p=reject with v=spf1 -all on every parked or non-sending domain straight away. See protect parked domains from spoofing.

Which records should you publish?

Situation Record
Quarantine stage v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
Testing reject at updated receivers v=DMARC1; p=reject; t=y; rua=mailto:dmarc@example.com
Full reject v=DMARC1; p=reject; rua=mailto:dmarc@example.com
Reject on main domain, quarantine on subdomains still being fixed v=DMARC1; p=reject; sp=quarantine; rua=mailto:dmarc@example.com
Parked domain v=DMARC1; p=reject

Keep rua in every record. Reports are how you see a new failure after you tighten the policy. The DMARC Record Generator builds each one, and DMARC subdomain policy explains sp and np.

How do you check what happened to a failing message?

  1. Ask the recipient for the full headers if the message was delivered to spam, or for the bounce text if it was rejected.
  2. In the headers, read Authentication-Results. Look for dmarc=fail and the action, such as action=quarantine or action=oreject at Microsoft 365. Our Email Header Analyzer reads it in your browser.
  3. In a bounce, look for the code: 550 5.7.26 from Gmail, 550 5.7.1 or 5.7.509 from Microsoft 365, 553 or 554 from Yahoo.
  4. In your aggregate reports, check the disposition and any reason. Load them into the DMARC Report Analyzer to see dispositions per source.

Next steps

  • Check your current policy and tags with the DMARC Checker.
  • Confirm every sending service signs with aligned DKIM before you move past quarantine.
  • If you're unsure, run p=quarantine for a month, then p=reject; t=y, then p=reject, reading reports at each step.
  • iBlockSpam's domain monitoring alerts you if your DMARC record changes unexpectedly, weekly on Protect and daily on Protect Plus.

Related: why the "DMARC policy not enabled" warning appears. If you use iBlockSpam, its DMARC monitoring recommends when your own senders pass consistently enough to move from quarantine to reject.

Browse our other SPF, DKIM and DMARC guides.

Frequently asked questions

Is p=quarantine enough to stop spoofing of my domain?

It stops most spoofed mail from reaching the inbox at receivers that honor DMARC, because failing messages go to spam or a quarantine. Recipients can still find them there, and some will. p=reject goes further: receivers that follow it refuse the message, so it never reaches the recipient at all.

Do Gmail and Outlook actually reject mail when my policy is p=reject?

Usually, yes. Gmail bounces it with 550 5.7.26 and the text 'Unauthenticated email from domain-name is not accepted due to domain's DMARC policy.' Microsoft 365's default anti-phishing policy rejects mail detected as spoof when the sender publishes p=reject. Both still weigh other signals, and admins can override the action for their own tenant.

Where does mail go when it fails DMARC with p=quarantine in Microsoft 365?

It depends on the recipient tenant's anti-phishing policy. Microsoft's recommended settings list Quarantine the message as the default action for p=quarantine, with Move to Junk Email folder as the alternative. Its DMARC setup article describes the general behavior as the Junk Email folder, configurable to quarantine, so check Get-AntiPhishPolicy for your own tenant.

Can p=reject cause legitimate email to bounce?

Yes, if a legitimate sender isn't aligned or a message is forwarded or changed on the way. Mailing lists that edit posts are the classic case. That's why RFC 9989 asks domains using p=reject to sign with valid DKIM, not rely on SPF alone, and to test at p=none and p=quarantine first.

Should a domain that never sends email use quarantine or reject?

Reject. A domain that sends no mail has no legitimate messages to lose, so there's no reason for a softer policy. Publish v=DMARC1; p=reject together with an SPF record of v=spf1 -all, and a null MX record if the domain receives no mail either.

Sources

  1. RFC 9989: DMARC, sections 3.2.9, 4.7, 5.4, 7.2 and 7.4
  2. Microsoft Learn: Anti-phishing policies (Spoof protection and sender DMARC policies)
  3. Microsoft Learn: Recommended settings for EOP and Defender for Office 365 (anti-phishing defaults)
  4. Microsoft Learn: Set up DMARC to validate email in Microsoft 365
  5. Google Workspace Admin Help: Recommended DMARC rollout
  6. Google Workspace Admin Help: Gmail SMTP errors and codes
  7. Gmail Help: Email sender guidelines FAQ
  8. Yahoo Sender Hub: SMTP error codes

See how your domain measures up

Run a free Email Health Check: MX, SPF, DKIM, DMARC and transport security in one scan, with the raw records shown. No sign-up.

Keep reading