RejectDMARC Policy (p=reject)
Reject is the strictest DMARC policy, set with p=reject, that tells receiving servers to block mail failing authentication, ideally during the SMTP transaction with a 550 error, before it can reach the inbox or spam folder. It is the only policy that actually stops exact-domain spoofing, and it is the intended end state after ramping through p=none and p=quarantine.
- Failing mail is refused outright, not foldered. The recipient never sees it
- It is the only DMARC policy that fully stops exact-domain spoofing
-
Reach it last, after
p=noneandp=quarantinereports are clean - Every legitimate sender must authenticate and align before you enforce it
p=reject
550 reply)
none then quarantine
What reject does
A message fails DMARC when neither SPF nor DKIM passes and aligns with the visible From: domain. Under p=reject, the receiver refuses that message rather than filing it. RFC 7489 recommends doing this during the SMTP transaction, so the receiving server returns a 550 rejection and the sending server gets an immediate bounce. The message is never accepted, so it lands in neither the inbox nor the spam folder.
This is the crucial difference from quarantine. Quarantine still delivers a forged message to the spam folder, where a careless recipient can open it. Reject means the forgery never arrives at all. That is why p=reject is the only policy that genuinely shuts down exact-domain spoofing of your From: address.
Anatomy of a reject record
A reject record is the same single TXT record at _dmarc.yourdomain.com, with the policy turned up to its strictest setting. A robust enforcing record covers subdomains too and keeps reporting switched on:
v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; pct=100; rua=mailto:dmarc@example.com; fo=1
p=reject: block failing mail for the main domain.sp=reject: apply the same policy to subdomains, closing a common spoofing gap.adkim=s/aspf=s: demand strict alignment so a near-match cannot slip through.pct=100: enforce on all failing mail (the default; lower it only to ramp).rua=mailto:…: keep aggregate reports flowing even at reject, so you spot new sources.
How to reach reject safely
Publishing p=reject before your reports are clean is the fastest way to block your own invoices, password resets, and newsletters. The safe route is a staged rollout:
- Start at
p=none. Collect aggregate reports and inventory every service that sends as you, including shadow IT and old vendors. - Fix authentication. Make sure each legitimate source passes SPF or DKIM and aligns with your
From:domain. - Move to
p=quarantine. Apply consequences with a safety net, optionally ramping withpct=, and watch for anything unexpectedly foldered. - Then enforce
p=reject. Once a full cycle of reports shows only authorised, aligned senders, turn it up to reject and keep reading reports.
Why reject matters for reputation and brand
Reject protects the asset your whole sender reputation is built on: your domain. Exact-domain spoofing is one of the fastest ways to torch a previously good reputation, and a published reject policy makes it dramatically harder for attackers to send phishing in your name. Since February 2024, Gmail and Yahoo require bulk senders to publish at least p=none; reject is the level that turns that baseline into real protection.
Reject is also the gold-standard prerequisite for inbox branding. To display your logo through BIMI with a VMC, you need an enforced DMARC policy, and while quarantine technically qualifies, reject is the recommendation. You can confirm your record and policy at any time with the DMARC checker.
How reject handles a failing message
From:p=reject policy applies550, so it never arrivesReject vs quarantine vs none
| reject | quarantine | none | |
|---|---|---|---|
| Action on failure | Block outright | Treat as suspicious | None, monitor only |
| Where it acts | SMTP, before inbox | After accepting | No action |
| Recipient sees it? | Never | In spam | In inbox |
| Stops spoofing? | Yes | Partly | No |
| When to use | Reports are clean | Middle step | First step |
By the numbers
p=reject DMARC policy.none, then quarantine, then reject.Common mistakes
p=rejectnone and quarantine first.p=reject leaves subdomains exposed unless you also set sp=reject. Attackers happily spoof billing.yourdomain.com if the subdomain policy is weaker.rua once you reach reject leaves you blind to new senders and misconfigurations. Keep aggregate reports flowing so a newly added service does not get silently blocked.Frequently asked questions
550, so it never reaches the account at all. Reject is the only policy that fully stops exact-domain spoofing.p=reject block my legitimate email?p=none and p=quarantine first: read your aggregate reports, confirm every real sender passes SPF or DKIM with alignment, then enforce reject. Done in that order, only forgeries get blocked.p=reject required?p=none, not reject. But reject is the recommended end state because it is the only policy that actually prevents spoofing, and it is the gold-standard prerequisite for BIMI logo display with a VMC.550 permanent failure. The message is never accepted, which is why it appears in neither the inbox nor the spam folder.