DMARC Policy Modes: p=none vs p=quarantine vs p=reject Comparison (RFC 7489 §6.3)
A head-to-head comparison deep dive of the three DMARC policy modes: p=none (monitoring only), p=quarantine (spam-folder enforcement), and p=reject (SMTP-level enforcement). This page covers per-mode semantics from RFC 7489 section 6.3, when to use and when not to use each mode, a side-by-side comparison table across 11 dimensions, receiver behaviour at the major mailbox providers (Gmail, Microsoft 365, Yahoo, Apple iCloud), how the pct= sampling tag interacts with each mode (including the dmarcbis removal of pct=), how sp= and np= subdomain policy modes interact with the apex p= tag, a scenario-based decision matrix, common mistakes operators make, and an 8-question FAQ.
This reference is provided in English. DMARC is specified in English-language RFCs (RFC 7489, RFC 9091, draft-ietf-dmarc-dmarcbis) and the canonical vocabulary (p=none, p=quarantine, p=reject, pct=, sp=, np=, rua, ruf, "monitoring mode", "aggregate report") does not translate. We keep the body in the source language so technical terms remain consistent with the specifications.
TL;DR
- Three policy modes defined by
RFC 7489 section 6.3:
p=none(monitoring only, no enforcement),p=quarantine(route failing mail to spam folder),p=reject(refuse failing mail at SMTP RCPT TO). - Canonical progression:
p=none→p=quarantine→p=reject. Never skip quarantine - the spam folder is a recoverable failure mode that surfaces problems without dropping mail. - p=none is NOT defensive. It gathers reports but takes no enforcement action. Spoofed mail flows normally to recipient inboxes. Use ONLY during the initial Discovery phase (typically the first 2 to 4 weeks of a DMARC deployment).
- p=reject is the steady-state target. Only mode that fully prevents domain spoofing, only mode that satisfies BIMI requirements, only mode recommended by CISA BOD 18-01 for U.S. federal agencies, only mode that defeats business email compromise via brand impersonation.
- pct= sampling applies the named policy to a percentage of failing mail and downgrades the rest one stage. Being removed in the draft-ietf-dmarc-dmarcbis successor draft.
- sp= and np= set subdomain and
non-existent-subdomain policies independently
of the apex p= tag. Publish
sp=rejectandnp=rejectfrom day one to block spoofing from non-sending subdomains immediately.
1. Overview: what is a DMARC policy mode?
A DMARC policy mode is the value assigned to the
mandatory p= tag in the
_dmarc.example.com TXT record. The
policy mode is the single most important DMARC
deployment decision: it tells receiving mail
servers what to do when a message claiming to be
from your domain fails DMARC evaluation (fails
either SPF alignment OR DKIM alignment OR both).
RFC 7489 section 6.3 defines exactly three policy values:
p=none- the Domain Owner requests no specific action from receivers regarding DMARC failures. This is monitoring mode. Receivers send aggregate reports describing observed DMARC outcomes but do not change message disposition based on DMARC failure. Mail flows normally regardless of DMARC pass / fail status.p=quarantine- the Domain Owner requests that DMARC-failing messages be treated as suspicious. The standard receiver interpretation is to deliver to the recipient's spam or junk folder rather than the inbox. The message reaches the recipient and can be rescued from spam, but its visibility is degraded.p=reject- the Domain Owner requests that DMARC-failing messages be refused outright. The standard receiver interpretation is to issue an SMTP 5xx response at the RCPT TO stage so the message is bounced back to the sending system before any delivery attempt is made. The message never reaches the recipient mailbox.
The three modes form the canonical Discovery to Quarantine to Reject deployment progression. Each mode has explicit semantics, explicit receiver behaviour, and explicit use cases. The next three sections cover each mode in detail.
2. p=none in detail (monitoring mode)
2.1 Semantics
Per RFC 7489 section 6.3: "The Domain Owner requests no specific action be taken regarding delivery of messages."
p=none is the only DMARC policy mode
that does NOT change message disposition. Mail
flows normally regardless of DMARC outcome. The
only effect of publishing p=none is
that receivers send aggregate (rua) reports
describing the observed mail traffic.
2.2 Example record
_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com; fo=1; adkim=r; aspf=r; pct=100"
2.3 When to use p=none
- Discovery phase only. The first 2 to 4 weeks of a fresh DMARC deployment, while you build the sender inventory by reading aggregate reports.
- Pre-Triage validation. While you are still in Phase 2 alignment fixing and before you advance to p=quarantine.
- Short-term rollback. If a production p=quarantine or p=reject deployment causes user-visible issues, fall back to p=none while you diagnose - mail flow restores immediately.
2.4 When NOT to use p=none
- NOT a permanent state. p=none provides no defensive value: attackers can spoof your domain freely, and recipient mailboxes will accept the spoofed mail. Many organisations publish p=none "to set up DMARC" and then never advance - this is a deployment anti-pattern. Steady-state production domains belong at p=quarantine or p=reject.
- NOT a BIMI prerequisite. BIMI requires p=quarantine or p=reject; p=none domains are not eligible for the BIMI brand-logo benefit at major receivers.
- NOT compliant with major frameworks. CISA BOD 18-01, M3AAWG, and NIST SP 800-177 Rev. 1 all recommend p=reject (or at minimum p=quarantine) for production domains.
2.5 What receivers do under p=none
- Disposition: deliver normally to inbox (no DMARC-driven action).
- Aggregate reports: sent daily
to the
rua=mailbox listed in the record. - Forensic reports: sent
per-failure to the
ruf=mailbox if configured (most major receivers do not send forensic reports). - SMTP response code: normal 250 OK at RCPT TO and DATA stages - DMARC failure does not change the SMTP outcome.
3. p=quarantine in detail (spam-folder enforcement)
3.1 Semantics
Per RFC 7489 section 6.3: "The Domain Owner wishes to have email that fails the DMARC mechanism check be treated by Mail Receivers as suspicious."
The exact disposition is at the receiver's discretion, but the universally-adopted convention is to deliver the message to the recipient's spam or junk folder. The message reaches the recipient's mailbox but its visibility is degraded.
3.2 Example record
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; fo=1; adkim=r; aspf=r; pct=100"
3.3 When to use p=quarantine
- Safety-net stage between the Triage phase (alignment fixing) and the Enforcement phase (p=reject) of a deployment. Typical duration: 2 to 4 weeks at pct=100.
- Ramp visibility. Optionally start at pct=10 and ramp to pct=25, pct=50, pct=100 over 4 to 8 weeks to limit exposure during the quarantine window (see Section 7).
- Final defensive tier for organisations that cannot reach a fully-aligned sender estate. p=quarantine is the maximum enforcement compatible with a few stubbornly-misaligned legitimate senders, because the spam folder is recoverable while SMTP reject is not.
3.4 When NOT to use p=quarantine
- NOT a permanent destination. Quarantine is a safety-net stage. The spam folder is a worse user experience than reject + bounce because there is no automatic feedback to the sending system that the message was not delivered. Always advance to p=reject when exit criteria are satisfied.
- NOT a Phase 1 starting point. Skipping p=none Discovery and starting at p=quarantine misses the chance to inventory senders without enforcement risk - legitimate senders that were quietly misaligned will hit the spam folder before you have data to diagnose them.
3.5 What receivers do under p=quarantine
- Disposition: spam or junk folder (receiver discretion; universally adopted convention).
- Aggregate reports: sent daily
to the
rua=mailbox. - Forensic reports: sent
per-failure to
ruf=if configured. - SMTP response code: normal 250 OK at RCPT TO and DATA stages - the receiver accepts the message and then routes it to spam post-delivery.
- Recipient visibility: message reaches the recipient's spam folder; the recipient can rescue it manually. No automatic feedback to the sender that the message landed in spam.
4. p=reject in detail (SMTP-level enforcement)
4.1 Semantics
Per RFC 7489 section 6.3: "The Domain Owner wishes for Mail Receivers to reject email that fails the DMARC mechanism check."
The receiver issues an SMTP 5xx response code at the RCPT TO stage, refusing to accept the message for delivery. The sending mail server receives the rejection in real time and bounces the message back to the original sender with a permanent failure notification.
4.2 Example record
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; sp=reject; np=reject; rua=mailto:dmarc-reports@example.com; fo=1; adkim=r; aspf=r"
4.3 When to use p=reject
- Steady-state production policy. Once Phase 3 quarantine exit criteria are satisfied, advance to p=reject and stay there indefinitely. p=reject is the canonical end state of every well-executed DMARC rollout.
- BIMI deployment. BIMI requires p=quarantine or p=reject; p=reject is strongly preferred by every major BIMI-supporting receiver (Gmail, Yahoo, Apple iCloud Mail, AOL).
- Regulatory compliance. CISA Binding Operational Directive 18-01 mandates p=reject for U.S. federal civilian executive branch agencies. The European Banking Authority, the UK NCSC, and the Australian ACSC all recommend p=reject as the production target.
- Brand impersonation defence. Business email compromise (BEC) and brand impersonation attacks are blocked at the SMTP layer under p=reject - the spoofed mail never reaches recipient mailboxes, so no human can be tricked by it.
4.4 When NOT to use p=reject
- Not before Phase 3 exit criteria. Advancing to p=reject before the quarantine exit criteria are satisfied means legitimate senders still failing alignment will hit hard SMTP bounces and the messages will be lost. The cost of one extra week at quarantine is small; the cost of advancing prematurely is dropped legitimate mail.
- Not without an aggregate-report monitoring pipeline. p=reject without active monitoring of aggregate reports means you will not notice when a previously-aligned sender breaks alignment (rotated DKIM key without updating selector, moved IP range without updating SPF). p=reject demands a running monitoring discipline.
4.5 What receivers do under p=reject
- Disposition: SMTP RCPT TO rejection with 5xx response code (most receivers emit 550 5.7.1 with a DMARC-specific reason phrase).
- Aggregate reports: sent daily
to the
rua=mailbox. - Forensic reports: sent
per-failure to
ruf=if configured. - SMTP response code: 550 5.7.1 or similar at RCPT TO. The sending mail server receives the rejection synchronously.
- Bounce notification: the sending mail server generates a DSN (delivery status notification) and sends it back to the original sender, providing automatic feedback that the message failed.
- Recipient visibility: zero - the message never reaches the recipient mailbox.
5. Side-by-side comparison
The same observable behaviour, the same security posture, and the same operational consequence, laid out side-by-side across the three modes.
| Dimension | p=none |
p=quarantine |
p=reject |
|---|---|---|---|
| Disposition on DMARC fail | Deliver to inbox | Deliver to spam folder | SMTP RCPT TO rejection (5xx) |
| Aggregate (rua) reports | Yes | Yes | Yes |
| Spoofing prevention | None | Partial (recipient can rescue) | Full (message never delivered) |
| Sender feedback on failure | None | None (silent quarantine) | Automatic (DSN bounce) |
| BIMI eligibility | No | Yes (Gmail requires p=quarantine+) | Yes (preferred by receivers) |
| CISA BOD 18-01 compliant | No | No (transitional only) | Yes |
| Risk to legitimate mail | Zero | Low (spam folder, recoverable) | Higher (hard bounce if misaligned) |
| Defensive value | Zero | Moderate | Full |
| Typical use duration | 2 to 4 weeks (Discovery) | 2 to 4 weeks (transitional) | Indefinite (steady state) |
| pct= sampling downgrade | No effect (no enforcement) | Downgrades to p=none | Downgrades to p=quarantine |
| Recovery path on issue | N/A | Lower to p=none (mail flows) | Lower to p=quarantine (mail flows to spam) |
6. Receiver behaviour: Gmail, Outlook, Yahoo, Apple iCloud
RFC 7489 section 6.3 defines the Domain-Owner-requested action but leaves the final disposition to the receiver. In practice every major receiver honours the canonical interpretation:
6.1 Gmail (Google Workspace and consumer)
p=none- deliver to inbox; emitAuthentication-Results: dmarc=fail (p=NONE)header for DMARC-failing mail.p=quarantine- deliver to the Spam label; emitAuthentication-Results: dmarc=fail (p=QUARANTINE). Subject prefix not modified by Gmail.p=reject- SMTP 550-5.7.26 rejection at RCPT TO with the reason phrase "This message does not have authentication information or fails to pass authentication checks."- Gmail also enforces from February 2024 onward
that bulk senders (5000+ messages per day to
Gmail addresses) must publish at least
p=nonewith a validrua=tag.
6.2 Microsoft 365 / Outlook.com
p=none- deliver to inbox or junk based on other anti-spam signals; emitAuthentication-Results: dmarc=fail action=none.p=quarantine- route to Junk Email folder; emitAuthentication-Results: dmarc=fail action=orejectin some configurations (Microsoft historically used a non-canonical action code).p=reject- SMTP 550 5.7.509 rejection in newer configurations; some legacy tenants downgrade to oreject (route to Junk) depending on anti-spoof policy settings. Operators publishing p=reject should verify actual enforcement by inspecting aggregate reports from Microsoft.
6.3 Yahoo Mail / AOL
p=none- deliver to inbox; emitAuthentication-Results: dmarc=fail (p=NONE).p=quarantine- deliver to Bulk folder.p=reject- SMTP 553 5.7.1 rejection at RCPT TO. Yahoo enforces consistently and is one of the strictest DMARC enforcers since their 2014 policy breakage that drove the industry-wide DMARC adoption push.
6.4 Apple iCloud Mail / @me.com / @mac.com
p=none- deliver to inbox.p=quarantine- route to Junk.p=reject- SMTP 5xx rejection at RCPT TO. iCloud Mail enforces the canonical DMARC behaviour consistently.
6.5 Smaller receivers and corporate filters
Corporate Exchange installations, custom MTAs,
Proofpoint, Mimecast, Cisco IronPort, Barracuda,
SonicWall, and similar enterprise filters all
consume the DMARC policy but apply it with
site-local interpretation. Some receivers
quarantine even under p=none if other
anti-spam signals are negative; others under-enforce
p=reject if the site administrator has
relaxed the anti-spoof policy. Aggregate reports
from these receivers are the only authoritative
source of truth for your domain's actual
enforcement experience.
7. pct= sampling tag interaction
7.1 Semantics
The pct= tag (RFC 7489 section 6.3,
"pct" definition) tells receivers what percentage
of failing mail to apply the named policy to. The
remainder is treated as the next less-strict
policy.
p=quarantine; pct=10- 10 percent of failing mail is quarantined; 90 percent is treated asp=none(delivered to inbox, reported only).p=reject; pct=10- 10 percent of failing mail is rejected; 90 percent is treated asp=quarantine(routed to spam).p=none; pct=X- no effect.pct=only modulates enforcement, andp=nonehas no enforcement to sample.
7.2 Typical ramp pattern
Operators historically ramp the pct=
value as a confidence-building mechanism during
the Quarantine and Reject phases:
Week 0: p=quarantine; pct=10
Week 1: p=quarantine; pct=25
Week 2: p=quarantine; pct=50
Week 3: p=quarantine; pct=100
Week 4: p=reject; pct=10
Week 5: p=reject; pct=25
Week 6: p=reject; pct=50
Week 7: p=reject; pct=100 <-- steady state
7.3 dmarcbis removal of pct=
The in-progress
draft-ietf-dmarc-dmarcbis
removes the pct= tag entirely. The
rationale is that the sampling semantics are
confusing (operators routinely interpret
pct=10 as "10 percent of all mail"
instead of "10 percent of failing mail"), several
large receivers (Microsoft notably) inconsistently
honour it, and the staged ramp use case is better
served by simply staying longer at the lower-strict
policy.
For new deployments starting in 2025 or later,
consider skipping the pct= ramp:
Week 0: p=quarantine <-- pct=100 implicit, no sampling
Week 4: p=reject <-- only after the quarantine exit criteria are satisfied
7.4 What pct= does NOT do
- Does NOT sample reporting.
Aggregate reports cover all DMARC outcomes
regardless of
pct=; only the enforcement disposition is sampled. - Does NOT randomly downgrade per-message. Receivers may implement per-message sampling (random) or per-source sampling (consistent per source IP) or per-day sampling - the RFC does not mandate a sampling granularity. Different receivers behave differently.
8. sp= and np= subdomain policies
8.1 sp= (subdomain policy, RFC 7489 section 6.3)
The sp= tag sets the policy for all
subdomains under the apex. If sp= is
omitted, the apex p= tag applies to
subdomains automatically.
Common usage during a phased rollout: publish the
apex with p=none during Discovery but
sp=reject from day one to block
spoofing from non-sending subdomains immediately,
then ramp the apex p= through
quarantine to reject on its own schedule.
_dmarc.example.com. IN TXT "v=DMARC1; p=none; sp=reject; rua=mailto:dmarc-reports@example.com"
8.2 np= (non-existent subdomain policy, RFC 9091)
The np= tag from
RFC 9091
sets the policy specifically for non-existent
subdomains (NXDOMAIN). Independent of
sp=; takes precedence over
sp= for NXDOMAIN subdomains when both
are present.
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; sp=quarantine; np=reject; rua=mailto:dmarc-reports@example.com"
np=reject is a free defensive win:
NXDOMAIN subdomains never send legitimate mail by
definition, so any mail claiming to come from
nonexistent.example.com is by
definition an attacker - rejecting it has zero
legitimate-mail risk.
8.3 Per-subdomain DMARC records
When a subdomain has its own DMARC rollout pace
distinct from the apex, publish a per-subdomain
DMARC record at _dmarc.sub.example.com
with its own p= value. Per-subdomain
records take precedence over both
sp= and the inherited apex
p=.
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc-reports@example.com"
_dmarc.marketing.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"
Here the apex example.com and most
subdomains use p=reject, while the
marketing.example.com subdomain
(still in its Quarantine phase) uses
p=quarantine.
9. Choosing the right mode for your scenario
9.1 Brand-new domain, no mail flow yet
Publish p=reject; sp=reject; np=reject
on day one. The domain has no legitimate senders
to break and the strictest policy prevents any
attacker from establishing spoofing as a baseline.
9.2 Established domain, never deployed DMARC
Standard four-phase rollout: p=none
Discovery (2 to 4 weeks) ->
p=quarantine Phase 3 (2 to 4 weeks)
-> p=reject steady state. Always
publish rua= from day one. Consider
publishing sp=reject; np=reject from
day one (apex p= ramps independently).
9.3 Established domain, already at p=none for months
Advance immediately. p=none provides no defensive value; staying at p=none indefinitely is the most common DMARC anti-pattern. If you have aggregate reports from the existing p=none deployment, you already have most of the sender inventory needed for the Quarantine advance. If you do not have aggregate report ingestion in place, set that up first (this DMARC Analyzer instance is one option), then advance.
9.4 Parked / non-sending domain
Publish p=reject; sp=reject; np=reject
immediately. There is no legitimate mail flow to
break, and the strict policy prevents attackers
from using the parked domain for phishing.
9.5 Subsidiary or acquired domain
Treat the acquired domain as a fresh deployment.
Do not merge the rollout calendar with the parent
domain - each domain advances on its own exit
criteria. If the acquired domain sends low-volume
mail (or no mail), you may short-circuit by going
straight to p=reject after a 2-week
Discovery phase.
9.6 Domain with a stubbornly-misaligned legacy sender
If one legitimate sender cannot be aligned and
moving it off your domain is not possible, the
maximum enforcement compatible with that sender is
p=quarantine. Document the misaligned
sender as an explicit accepted exception, monitor
aggregate reports for any second misaligned sender
appearing, and revisit the migration plan annually.
Do NOT accept indefinite p=none as the alternative
- even p=quarantine with one accepted
exception provides significantly more protection
than p=none.
9.7 Domain with active BIMI deployment
BIMI requires p=quarantine or
p=reject. p=reject is
strongly preferred by every major BIMI-supporting
receiver - it is the only policy that fully proves
the domain controls the From: header it advertises
via BIMI.
10. Common mistakes
- Treating p=none as a defensive policy. p=none provides ZERO spoofing protection. Attackers can spoof your domain freely under p=none. The only operational role of p=none is the initial Discovery phase. Domains that stay at p=none for months or years are advertising "we deployed DMARC" without actually deploying DMARC.
- Jumping from p=none straight to p=reject. Skipping the Quarantine safety-net stage means legitimate senders still failing alignment hit hard SMTP bounces and the messages are dropped. This is the single most common cause of self-inflicted DMARC outages. Always pass through p=quarantine first.
- Forgetting sp= and np=. The
apex
p=tag only protects the apex. Withoutsp=rejectattackers can spoof from sub-subdomains likebilling.example.com. Withoutnp=rejectattackers can spoof from non-existent subdomains. - Misinterpreting pct=.
pct=10does NOT mean "apply DMARC to 10 percent of all mail". It means "apply the named policy to 10 percent of FAILING mail and downgrade the rest one stage". The semantic confusion is one of the reasons pct= is being removed in dmarcbis. - Removing pct= from a p=reject record
too early. Some operators publish
p=reject; pct=10and ramp toward 100 over weeks, but accidentally droppct=mid-ramp - this jumps enforcement from 10 percent to the default 100 percent overnight. If you are using pct=, drop it only when you reach pct=100. - Lowering DNS TTL only on the apex. Lower the TTL on every per-subdomain DMARC record AND the apex during rollout. A subdomain record with an 86400 TTL means a 24-hour wait to roll back if something breaks.
- Publishing p=reject without an aggregate-report monitoring pipeline. p=reject without active monitoring is fragile - a future DKIM key rotation that fails to update the published selector will hard-fail every outbound message until the operator notices through user complaints. Aggregate reports are the primary signal during steady-state p=reject; monitor them.
11. Frequently asked questions
- What are the three DMARC policy modes?
- DMARC defines three policy values for the p= tag in the _dmarc TXT record. p=none requests no enforcement: receivers report DMARC outcomes via aggregate (rua) reports but take no action on failing mail. p=quarantine requests that receivers route DMARC-failing mail to the spam or junk folder. p=reject requests that receivers refuse DMARC-failing mail at the SMTP RCPT TO stage so the message is bounced before delivery. The three modes are defined in RFC 7489 section 6.3 and form the canonical Discovery to Quarantine to Reject deployment progression.
- What is the difference between p=none and p=quarantine?
- p=none is monitoring mode with no enforcement action. p=quarantine is the first enforcement stage: DMARC-failing mail lands in the spam folder, so spoofed mail is contained but recoverable. The transition from p=none to p=quarantine is the moment your sender inventory must be complete - every legitimate sender must produce DMARC-aligned mail before this advance.
- What is the difference between p=quarantine and p=reject?
- p=quarantine is recoverable: DMARC-failing mail lands in the spam folder. p=reject is non-recoverable: the receiver refuses the message at SMTP RCPT TO with a 5xx error so the message is bounced back to the sender with no delivery attempt. Reject is the only mode that fully prevents spoofed mail from reaching mailboxes.
- When should I use p=none?
- Use p=none ONLY during the initial Discovery phase of a DMARC deployment, typically the first 2 to 4 weeks. p=none gathers aggregate reports without taking enforcement action, letting you inventory every legitimate sender. p=none is NOT a defensive policy: spoofed mail flows normally to recipient inboxes under p=none, so attackers can impersonate your domain without obstruction.
- When should I use p=quarantine?
- Use p=quarantine as a 2 to 4 week safety-net stage between Triage and Enforcement. At p=quarantine, DMARC-failing mail lands in the spam folder, so any legitimate sender still misaligned becomes visible as user complaints about missed mail rather than silent SMTP bounces.
- When should I use p=reject?
- Use p=reject as the steady-state policy for any domain that sends mail. p=reject fully prevents domain spoofing, satisfies BIMI requirements, and is the only mode recommended by CISA Binding Operational Directive 18-01 for U.S. federal agencies.
- What does pct= do under each policy mode?
- The pct= tag samples enforcement: receivers apply the named policy to a percentage of failing mail and downgrade the rest one stage. Under p=quarantine pct=10, 10 percent of failing mail is quarantined and 90 percent is treated as p=none. Under p=reject pct=10, 10 percent of failing mail is rejected and 90 percent is treated as p=quarantine. pct= has no effect under p=none and is being removed in draft-ietf-dmarc-dmarcbis.
- How do sp= and np= interact with the apex p= tag?
- sp= sets the policy for all subdomains under the apex regardless of whether they send mail. If sp= is omitted, the apex p= tag applies to subdomains. np= (RFC 9091) sets the policy for non-existent subdomains specifically. Common configuration: publish the apex with p=none during Discovery but sp=reject from day one to block spoofing from non-sending subdomains immediately.
13. Check your current DMARC policy mode now
DMARC Analyzer's free Domain Security Checker
performs live DMARC + SPF + DKIM + MTA-STS + BIMI
lookups against any domain. Use it to confirm your
current DMARC policy mode (the value of the
p= tag in your published
_dmarc TXT record), the subdomain
policy (sp=) and non-existent
subdomain policy (np=) if set, and
the sampling tag (pct=) if present.
The DNS Record Generator builds syntactically-correct
DMARC records with the right
p= + sp= +
np= + rua= tags for any
phase of the rollout. Imported DMARC aggregate
reports (via includes/DmarcParser.php)
drive the per-source-IP pass and fail dashboard
that powers your sender registry under every
policy mode.