DMARC p=reject: how to move from p=none safely
By Rasket TeamLast updated 13 min read
The short answer
Move DMARC to p=reject in stages. Publish p=none with a rua address, read aggregate reports until every legitimate sender passes with an aligned SPF or DKIM domain, then publish p=quarantine, then p=reject. Sign everything with DKIM, because forwarding breaks SPF, and expect receivers on RFC 9989 to ignore pct.
What p=reject does, and why p=none is not the end
A DMARC record is a TXT record at _dmarc. plus your domain. Its p= tag is the domain owner’s handling preference for mail that uses the domain in the From header but fails DMARC. RFC 9989, the Standards Track version of DMARC published in May 2026, defines three values: none (“no expression of preference”), quarantine (the mail is suspicious) and reject (“a clear indication that the use of the domain name is not valid”).[1] It obsoletes RFC 7489, the 2015 Informational document most tutorials still quote.[2]
p=none is where every rollout starts, and it is enough to meet the bulk-sender rules: Gmail says “your DMARC enforcement policy can be set to none”,[3] Yahoo asks for “at least p=none”,[4] and Outlook.com accepts none, quarantine or reject.[5] (The full rules are in the bulk sender requirements checklist.) But p=none protects nobody: a phishing message forging your From address is delivered exactly as it would have been without the record. Only an enforcement policy — quarantine or reject — asks receivers to act on it, and that is what the rest of this guide is about.
29.2%
p=none in early 2026, against 22.9% at quarantine or reject, in EasyDMARC’s 2026 adoption report — a vendor’s scan of public DNS, not a survey. Most domains that adopt DMARC stop at monitoring.How DMARC decides: alignment and the organizational domain
DMARC passes when SPF or DKIM passes and the domain it authenticated aligns with the domain in the From header. One aligned pass is enough; RFC 9989 asks senders for “at least one — preferably two”.[1]
- SPF authenticates the envelope sender (the
MAIL FROM, or return path), not the From header you see.[7] A service that bounces mail to its own domain passes SPF for its domain, which does not align with yours. - DKIM authenticates the domain in the signature’s
d=tag, “the SDID claiming responsibility” for the message.[8] A service signing with its ownd=passes DKIM without aligning.
Relaxed and strict alignment
Alignment has two modes, set by adkim= and aspf=, both relaxed by default. Relaxed alignment means the From domain and the authenticated domain share an organizational domain; strict means they are identical.[1] Under relaxed alignment, a From of example.com aligns with a DKIM d=news.example.com or a return path at bounce.example.com; under strict, neither aligns. Stay relaxed unless you have a reason not to: nearly every sending service puts its return path on a subdomain.
The organizational domain
The organizational domain is the registered domain a name belongs to — example.com for mail.eu.example.com. RFC 7489 left finding it to a public suffix list; RFC 9989 defines a “DNS Tree Walk” that queries _dmarc records up the name, capped at eight queries.[1] For an ordinary company domain both give the same answer, and the practical rule is the same: a subdomain with no DMARC record of its own is governed by the organizational domain’s.
Before you start: what has to be true
RFC 9989 lists the domain owner’s work in order: publish SPF for an aligned domain, configure DKIM with an aligned signing domain, set up a mailbox for aggregate reports, publish the record, then collect, analyse and remediate before deciding on enforcement.[1] Three things make that go smoothly.
- An inventory of who sends as you. Your mail platform, your marketing tool, the helpdesk, the invoicing system, the CRM, the office printers that email scans. Write down what you know; the reports will find the rest.
- DKIM on every stream you control. Forwarding breaks SPF but usually leaves DKIM intact, which is why RFC 9989 says domains publishing
p=reject“MUST NOT rely solely on SPF” and “MUST apply valid DKIM signatures”.[1] - A way to read the reports. They are XML, and RFC 9989 recommends they be machine-parsed.[1] A parsing service or a small script both work; reading raw files by hand stops working after the first week.
10
include, a, mx, ptr, exists and redirect — an SPF evaluation may use. Past it, SPF returns a permanent error, so an apex record with an include per vendor fails for everyone.Step by step: from p=none to p=reject
The order is the one RFC 9989 describes and Google’s own rollout guide follows: monitor, fix, then tighten in steps, reading reports between each.[9]
List every service that sends as your domain
Write down your mail platform, marketing tool, helpdesk, billing system, CRM and anything else that puts your domain in the From header. The aggregate reports will show you what the list missed.
Publish p=none with a report address
Add a TXT record at _dmarc on your domain with v=DMARC1; p=none; and a rua=mailto: address that a person or a parsing service reads. Delivery does not change; receivers start sending daily aggregate reports.
Read the reports for a full sending cycle
Match every source in the reports to a service. Google suggests at least a week; RFC 9989 suggests a month for domains whose users write to mailing lists. Wait for the monthly and quarterly sends to appear too.
Fix every legitimate source
Give each service DKIM signing with your own domain in d= and, where it can, a return path on a subdomain of yours, until every legitimate source passes DMARC on an aligned DKIM signature.
Move to p=quarantine
Publish p=quarantine, with a low pct first if you like. Receivers that follow RFC 9989 ignore pct and quarantine all failing mail, so take this step only when the reports show no legitimate source failing.
Move to p=reject and close unused names
Once quarantine has run cleanly for a comparable period, publish p=reject with np=reject for subdomains that do not exist, and bring any subdomain with its own _dmarc record to the same policy.
Keep reading the reports
Leave rua in the record. A new tool, a vendor change or a forwarding problem shows up in the reports first, and every new sender needs aligned DKIM before it goes live.
The records, stage by stage, for a domain whose reports go to its own mailbox:
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"_dmarc.example.com. TXT "v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc-reports@example.com"_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"_dmarc.example.com. TXT "v=DMARC1; p=reject; np=reject; rua=mailto:dmarc-reports@example.com"How long each stage should last
Google suggests a week at p=none as “usually enough time for the daily reports to contain data representative of all your mail streams”, and a starting percentage of 10% for a small organisation or 1% for a large one.[9] The standard is more cautious for domains whose people write to mailing lists:
1 month
p=none, then “an equally long period” at p=quarantine, comparing the dispositions in the reports — RFC 9989’s advice before a domain with general users publishes p=reject.Monthly and quarterly senders need longer: the invoice run that goes out on the first of the month will not appear in a week of reports. RFC 9989 warns it “may take many months” for a domain owner to be sure all its mail is authenticated.[1] Move on when a full sending cycle shows no legitimate source failing, not when a calendar says so.
Reading DMARC aggregate reports
Aggregate reports are defined in RFC 9990: daily (or more frequent) XML summaries from each receiver, listing every source that used your domain in the From header, how many messages it sent, and how SPF, DKIM and DMARC evaluated.[10] Receivers send them only if your record has a rua= tag.[1]
For each source IP in a report, ask four questions:
- Is it mine? Resolve the IP and match it to a service in your inventory. Unknown sources at low volume from scattered networks are usually spoofing.
- Did DKIM pass, and for which domain? Look at the raw DKIM result and its domain, not only the evaluated verdict.
- Did SPF pass, and for which domain? A pass for the vendor’s bounce domain is not an aligned pass.
- Does the DMARC verdict pass on at least one leg? If only SPF carries it, fix DKIM before enforcement: forwarding will break the SPF leg.
The existing post DMARC policy: none, quarantine or reject walks through one report record line by line. If your rua address is on another domain — a reporting service, say — that domain must publish a <your-domain>._report._dmarc.<their-domain> TXT record authorising it, or receivers will not send the reports.[10]
Finding and fixing unauthenticated senders
RFC 9989 is blunt: the failing streams in your reports mix abuse with “legitimate uses … not passing due to Authenticated Identifiers being unaligned or missing entirely”, and the legitimate ones “MUST be addressed prior to” enforcement.[1] Google says the same of third-party services: they must pass SPF and DKIM.[11] The fixes, most reliable first:
| What the report shows | Usual cause | Fix |
|---|---|---|
| DKIM passes for the vendor’s domain | The service signs with its own d= | Set up custom DKIM for your domain in the service (a CNAME or TXT at a selector). |
| SPF passes for the vendor’s domain | The return path is the vendor’s | Use a custom return path on a subdomain of yours, or rely on aligned DKIM. |
| Neither passes, known service | Never configured | Configure DKIM first; add SPF only if the service needs it and lookups allow. |
| SPF fails, DKIM passes aligned | Forwarding | Nothing: DMARC passes on DKIM. This is why DKIM is required. |
| Neither passes, unknown source | Spoofing | Nothing to fix — this is the mail enforcement exists to stop. |
A return path on your own subdomain is what makes the SPF leg align; how it works is in custom return path, explained. When a service cannot sign with your domain at all, move it to a subdomain with its own DMARC record, or send its mail from an address on a domain that is not yours to protect — do not hold the whole domain at p=none for one tool.
pct, t=y and what RFC 9989 changed
RFC 7489 offered pct=: apply the policy to that percentage of failing mail, and treat the rest one step softer — quarantine instead of reject, normal filtering instead of quarantine.[2] RFC 9989 removed it. The reason given: “the ‘pct’ tag was usually not accurately applied, unless the value specified was either 0 or 100”. It is replaced by t=, a testing flag whose values y and n are meant to behave like pct=0 and pct=100.[1]
| Record | Receiver on RFC 7489 | Receiver on RFC 9989 |
|---|---|---|
| p=quarantine; pct=10 | Quarantines roughly 10% of failing mail | pct is ignored: quarantines all failing mail |
| p=quarantine; t=y | t is unknown and ignored: quarantines all | Applies none (testing) |
| p=reject; t=y | t is ignored: rejects all | Applies quarantine (testing) |
| p=reject; pct=0; t=y | Applies quarantine to all | Applies quarantine to all |
Unknown tags “MUST be ignored”,[1] which is what makes the table asymmetric. Three practical consequences while both generations are in service:
- Treat every quarantine step as possibly total. A
pct=10record still dampens the rollout at receivers that honour it, and Google’s rollout guide still uses it,[9] but a receiver on the new standard quarantines everything. Publish quarantine only when the reports show no legitimate source failing. - Never publish
t=yalone to soften a policy. Older receivers ignore it and apply the full policy. - A rehearsal for reject reads the same everywhere:
p=reject; pct=0; t=ymeans quarantine to both generations. It is equivalent to stage 3, so skip it unless you want the reports to show the reject policy early.
Subdomains: sp= and np=
p= covers the domain and its subdomains unless you say otherwise. sp= sets the policy for existing subdomains, and np= — new in RFC 9989, imported from RFC 9091 — for subdomains that do not exist in DNS. Without np=, non-existent names get sp=, or failing that p=.[1] Google’s help says the same: without sp=, “subdomains inherit the DMARC policy set for the parent domain.”[11]
- Close non-existent names early. Nobody legitimately sends from
invoices-secure.example.comif it does not exist, sonp=rejectcosts nothing and can go in while the apex is still at quarantine. - A subdomain’s own record wins. A
_dmarc.news.example.comrecord overrides the parent for that name, in both directions. A forgottenp=noneon a subdomain is a hole in an otherwise enforced domain. - Move a difficult stream aside. If one tool cannot align yet, send it from a subdomain with its own softer record and take the apex to reject. The trade-offs of doing that on purpose, for marketing mail, are in should you use an email subdomain for marketing?
Forwarding, mailing lists and p=reject
Indirect mail flows are DMARC’s known weak spot. When mail is forwarded — an alumni address, a role alias — the forwarding server’s IP is not in your SPF record, so SPF fails, while “DKIM signatures will generally remain valid”.[1] RFC 7960 documents the wider set of cases, including lists that rewrite the subject or add a footer and so break DKIM too.[12]
The consequence matters most for a domain whose people use email to talk. RFC 9989 says domains “that host users who might post messages to mailing lists SHOULD NOT publish” p=reject, and those that do should warn their users.[1] It also notes that list software has broadly adopted workarounds — rewriting the From to the list’s own address — and that ARC is the long-running attempt to carry authentication across hops.[1]
Myths about DMARC enforcement
- Unproven “p=reject improves your inbox placement.” No mailbox provider documents a placement reward for reject over none; Gmail, Yahoo and Outlook.com accept
p=none.[3][4][5] Enforcement protects your name from forgery; it is not a deliverability boost. - Documented by Google “p=none is enough for the bulk-sender rules.” True, and Google says so.[3] It is a floor, not protection.
- “pct=10 quarantines exactly 10%.” False even before RFC 9989, which found values other than 0 and 100 “usually not accurately applied”; under RFC 9989 the tag is ignored.[1]
- “SPF alone is fine for reject.” The standard says the opposite: a domain at reject “MUST apply valid DKIM signatures”.[1]
- “Reject means every forged message bounces.” Receivers may accept failing mail and apply their own analysis.[1] In practice, the same document notes, mail that fails a reject policy “is frequently rejected”, so plan as if it will be.
- “DMARC is set-and-forget.” A new tool or a changed vendor can start failing any day, and the reports are how you find out; RFC 9989 calls consuming them “essential to any successful DMARC deployment”.[1]
After p=reject: keep watching
Leave rua= in the record for good. dmarc.org’s own summary of deployment is to move the policy “from ‘none’ to ‘quarantine’ to ‘reject’ as you gain experience”,[14] and experience keeps arriving: a new vendor added without DKIM shows up in the reports before it shows up as a complaint. Two more things open up at enforcement. BIMI — the brand logo beside your name in supporting mail apps — requires p=quarantine or p=reject in Gmail,[13] and the forgery that p=none only reported is now refused.
On Rasket, a verified domain signs every message with DKIM under your own domain and puts the return path on send. your domain, so both legs align under relaxed alignment. The DMARC card on the domain page builds the record in three steps — a policy, a report address and a record to copy — starting at monitor only; on a subdomain it writes the record for the parent domain unless you ask otherwise. Its middle step writes p=quarantine; pct=25, which you should read, as above, as “up to all failing mail”. See verified domains and the domains documentation; the three records themselves are covered in DKIM, SPF and DMARC explained.
Before you publish p=reject
- Every service in the inventory passes DMARC on an aligned DKIM signature.
- The apex SPF record stays under 10 DNS lookups.
rua=points at a mailbox or service that parses the reports.- A full sending cycle of reports shows no legitimate source failing.
- Subdomains with their own
_dmarcrecords are at the same policy, or have a reason not to be. np=rejectcovers names that do not exist.- Someone is named to read the reports after reject.
Frequently asked questions
What is the difference between DMARC p=none, p=quarantine and p=reject?
They are the three values of the DMARC policy tag. p=none asks receivers to do nothing extra with failing mail and only report it. p=quarantine marks failing mail as suspicious, which usually means the spam folder. p=reject asks receivers to refuse failing mail outright. Receivers may still apply their own judgement.
How long should I stay at p=none before moving to p=reject?
Until the reports cover a full sending cycle with no legitimate source failing. Google suggests at least a week at p=none. RFC 9989 advises a domain whose users post to mailing lists to spend at least a month at p=none and as long again at p=quarantine before reject.
Is the DMARC pct tag still supported?
Not in the current standard. RFC 9989 removed pct because values other than 0 and 100 were rarely applied accurately, and replaced it with t=y for testing. Receivers still on RFC 7489 may honour pct, so for now treat a quarantine record with a low pct as possibly applying to all failing mail.
Will p=reject break email forwarding or mailing lists?
It can. Forwarding usually breaks SPF but leaves DKIM intact, so a domain that signs all its mail with aligned DKIM survives most forwarding. Mailing lists that change the message can break DKIM too; most list software now rewrites the From address to avoid this, but domains whose staff post to lists should test at quarantine first.
Do Gmail and Yahoo require DMARC p=reject?
No. Gmail, Yahoo and Outlook.com require bulk senders to publish a DMARC record and to pass DMARC with an aligned domain, and all three accept p=none. Reject is not required for delivery. It is what stops other people sending mail that claims to come from your domain.
What does sp= do in a DMARC record?
sp= sets the policy for existing subdomains of the organizational domain that have no DMARC record of their own; without it they inherit p=. RFC 9989 adds np= for subdomains that do not exist in DNS, which lets you reject mail from invented names while the main domain is still at quarantine.
Can I go straight from p=none to p=reject?
You can if the reports show every legitimate source passing DMARC on an aligned DKIM signature, and your domain sends only machine mail such as receipts and campaigns. For most domains a quarantine stage is cheap insurance: a missed sender lands in spam rather than being refused.
Does Rasket publish a DMARC record for me?
No. DMARC belongs to your whole domain, so it stays yours to publish. The DMARC card on a Rasket domain builds the record for you in three steps, starting at monitor only, and on a subdomain it writes the record for the parent domain unless you ask otherwise.
Sources
14 primary sources, each read on the date shown.
See all sourcesHide sources
- 1.RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) — IETF (May 2026),
- 2.RFC 7489: Domain-based Message Authentication, Reporting, and Conformance (DMARC) — IETF (March 2015, obsoleted by RFC 9989),
- 3.Email sender guidelines — Gmail Help, Google,
- 4.Sender Requirements & Recommendations — Yahoo Sender Hub,
- 5.Fix NDR error “550 5.7.515” in Outlook.com — Microsoft Support,
- 6.2026 DMARC Adoption & Enforcement Report — EasyDMARC (2026),
- 7.RFC 7208: Sender Policy Framework (SPF) for Authorizing Use of Domains in Email — IETF,
- 8.RFC 6376: DomainKeys Identified Mail (DKIM) Signatures — IETF,
- 9.Recommended DMARC rollout — Google Workspace Admin Help,
- 10.RFC 9990: DMARC Aggregate Reporting — IETF (May 2026),
- 11.Set up DMARC — Google Workspace Admin Help,
- 12.RFC 7960: Interoperability Issues between DMARC and Indirect Email Flows — IETF (September 2016),
- 13.Set up BIMI — Google Workspace Admin Help,
- 14.Overview — dmarc.org,
Keep reading
- GuideShould you use an email subdomain for marketing?When to send campaigns from a subdomain like news.example.com: what it isolates, what it still shares with your domain, and DMARC, alignment and BIMI.
- GuideHow to get out of the Gmail Promotions tabWhy Gmail files your email under Promotions, what Google documents, what research has measured, and the steps that move mail toward Primary. Myths flagged.
- GlossaryDMARCDMARC tells receiving servers what to do with mail that claims to be from your domain but fails DKIM and SPF. You publish one TXT record naming a policy, none, quarantine or reject, and an address for the reports. It also demands alignment: the domain that passed authentication has to match the one a reader sees in the From header.
- GlossaryDMARC alignmentAlignment is the part of DMARC that asks whether the domain that passed authentication is the same one the reader sees. A DKIM signature or an SPF check can pass for a domain that has nothing to do with the From header, and on its own that proves nothing. Alignment closes that gap by requiring the two to match, strictly or at the organisational level.
- GlossarySPFSPF is a TXT record listing which servers may send mail for a domain. A receiving server looks up the record for the return path domain and checks whether the machine that connected is on the list. It breaks when a message is forwarded, because the forwarding server is not on your list, and that is why SPF on its own is not enough.
- FeatureDomainsAdd a domain, publish the generated record set and send from it. A 2048-bit DKIM key per domain, a custom return path, and verification that runs on its own.
- DocsDomainsThe records, where they go at each registrar, and what the page does while you wait.
Written by the Rasket Team. First published ; last checked against its sources . See something out of date? How we correct guides.
