Email infrastructure
DMARC from p=none to p=reject, safely.
Moving DMARC from p=none to p=reject is what actually stops other people from spoofing your domain — and p=none, despite being published, provides none of that protection. The safe path is not a calendar but a sequence: publish p=none, read the aggregate reports, make every legitimate sender pass SPF or DKIM with alignment, then advance through p=quarantine to p=reject only when the mail still failing is mail you do not authorise. Rushing it blocks real email; done from the reports, enforcement is a controlled change that also unlocks BIMI.
In short
- p=none is monitoring, not protection. At p=none anyone can spoof your domain and receivers still deliver it.
- Reports drive the ramp, not the calendar. Advance only when legitimate mail passes; never while real mail is failing.
- Third-party senders break it most. Marketing, CRM, and transactional vendors are the top source of DMARC failures.
- DMARCbis removed pct. Staged rollout is now operational, not a percentage in the record; np and t are the new tags.
- p=reject unlocks BIMI and stops spoofing — but it does not by itself place mail in the inbox.
Why is p=none not actually protecting you?
A DMARC record at p=none tells receiving servers to take no action on messages that fail authentication. Every message is delivered normally, whether it passes or fails; the record's only job is to generate the aggregate reports that show who is sending mail as your domain. That makes p=none a discovery tool, not a defence — and a domain that sits there permanently is watching spoofing happen without stopping it.
This is not theoretical. Audit a domain at p=none and its reports routinely show mail from IP addresses in countries where the organisation has no presence, sent through servers it has never used. Those spoofed messages get marked as spam and reported as phishing by recipients, and mailbox providers fold that behaviour into your domain reputation — they do not distinguish between mail you sent and mail someone else sent in your name. Staying at p=none lets that damage accumulate.
The scale of the gap is striking. Across domains engaged enough to run a monitoring tool, around forty percent still sit permanently at p=none, and of the top ten million domains by traffic only a few percent enforce quarantine or reject at all. Reaching enforcement therefore does more than protect you — it puts you ahead of the overwhelming majority of the internet that has published DMARC but never switched it on.
What does an enforced DMARC record look like?
The destination is a single TXT record at _dmarc on your domain. The important
parts are the policy itself, the subdomain policies, the alignment modes, and a reporting
address you actually read. Here is a record at full enforcement, written to be DMARCbis-ready —
note that there is no pct tag, because staged rollout is no longer something you express in the
record.
# _dmarc.example.com — TXT record at full enforcement (DMARCbis-ready)
v=DMARC1; p=reject; sp=reject; np=reject;
adkim=s; aspf=r;
rua=mailto:dmarc-agg@example.com;
ruf=mailto:dmarc-forensic@example.com; fo=1
# pct is gone in DMARCbis — staged rollout is now operational, not a record knob
Keep exactly one DMARC record at that name — multiple TXT records cause receivers to ignore the
policy entirely. The rua address is what makes the whole migration possible, because
without aggregate reports you cannot see which senders pass and which fail, and you cannot
enforce what you cannot see.
The 2026 spec
Which DMARC tags changed in DMARCbis?
DMARCbis — RFC 9989 / 9990 / 9991 (replaces RFC 7489) — replaces RFC 7489. Your v=DMARC1 — there is no "DMARC2" records stay valid; a few tags moved.
| Tag | What it does | Status in DMARCbis |
|---|---|---|
| p | Policy for the organizational domain itself: none, quarantine, or reject. | Unchanged |
| sp | Policy for existing subdomains. Omit it and subdomains inherit p. | Unchanged |
| np | Policy for non-existent subdomains — closes spoofing of subdomains you never published. | New in DMARCbis |
| t | Binary testing mode; downgrades enforcement one level instead of a percentage. | New (replaces pct intent) |
| pct | Percentage-based staged rollout. Receivers now treat pct<100 as pct=100. | Removed |
| rua / ruf | Where aggregate and failure reports are sent. Keep rua on every record. | Unchanged |
The change that matters most for a migration is the removal of pct. It was the
protocol's only built-in mechanism for staged rollout, and it was so rarely used correctly that
the spec dropped it; a DMARCbis receiver now treats pct<100 as if it were 100. The
practical consequence is that staged rollout is now entirely operational — you progress by fixing
senders and watching reports, not by turning a percentage knob. The new t tag offers a
binary testing mode, but it downgrades enforcement by a level rather than applying it to a fraction
of mail.
The migration
The staged path from monitoring to enforcement
Six phases, each gated by what your reports show rather than how much time has passed. The pause after a problem is the most important part.
- 1
Publish p=none and collect reports
Start at p=none with a valid rua address. Receivers take no action but send you aggregate reports showing every IP sending as your domain — this is your discovery period, not a protection setting.
- 2
Inventory every legitimate sender
From the reports, list every system that sends for you: marketing automation, CRM, ticketing, transactional ESP, and legacy apps. Third-party senders are the single most common source of DMARC failures, so find them now.
- 3
Fix SPF and DKIM alignment
Make each sender pass DKIM and SPF with alignment to your visible From domain. Watch the 10-DNS-lookup SPF limit, broken DKIM CNAMEs after migrations, and vendor instructions that are simply wrong until corrected.
- 4
Move to p=quarantine and hold
Once reports show your legitimate mail passing, advance to quarantine. Failing mail now lands in spam rather than the inbox, so hold here long enough to capture weekly and scheduled senders, not just daily ones.
- 5
Advance to p=reject when failures are clean
When the only mail still failing is mail you do not authorize, move to reject. Consider p=reject with sp=quarantine briefly to give subdomains a softer landing, then tighten sp once they are clean.
- 6
Keep monitoring after enforcement
Enforcement is not set-and-forget. New tools, platform migrations, and acquisitions silently reintroduce failures; keep reading aggregate reports so a domain that was aligned six months ago does not drift out of compliance.
The single rule underneath all six steps: if a source fails after you tighten the policy, stop. Fix the source, wait for fresh reports, then continue. Treating the ramp as a race is how legitimate mail gets blocked and how a panicked rollback undoes months of progress.
What about subdomains and the sp and np tags?
Subdomains are where many enforcement projects quietly leak. If you omit the sp tag,
subdomains inherit your p policy automatically — so a root at p=reject also rejects
for every subdomain, which is usually what you want. The misconfiguration to hunt for is the
opposite: p=reject paired with sp=none, which locks your root domain
while leaving every subdomain spoofable. sp governs existing subdomains; np governs non-existent ones. Omit sp and subdomains inherit p. The p=reject with sp=none mismatch is the misconfiguration to watch.
DMARCbis adds np for subdomains that do not exist at all. An attacker can forge mail
from a subdomain you never created, and without np a receiver falls back to your sp or p policy
for those names. Setting np=reject closes that gap, but test it first — some services
spin up dynamic subdomains, and a blanket np=reject can catch legitimate mail you had forgotten
about. Under the new DNS Tree Walk, receivers find your organizational domain by walking up the
DNS tree rather than consulting the Public Suffix List, which changes nothing day to day but can
matter in deep domain hierarchies.
One piece of DMARCbis guidance deserves a direct mention: The spec explicitly advises against p=reject for domains with active mailing-list traffic, to avoid breaking subscribers. If your people post to open-source project lists, industry forums, or association newsletters from your primary domain, full reject can break those messages for subscribers. The usual fix is to send list traffic from a dedicated subdomain with its own, softer policy, keeping the root domain strict.
One DMARCbis pitfall deserves a warning of its own, because it surprises careful administrators.
The new t=y testing tag is meant to let you signal "I am still testing enforcement"
without applying full policy — but it only works on receivers that already understand DMARCbis. To
the large population of receivers still running the older specification as of 2026, t
is an unknown tag, so they ignore it and apply your p=reject directly, with no
downgrade. The result is two receiver populations behaving differently for the same record: some
treating your mail as a test, others rejecting failures outright. If you reach for t=y expecting a
universal soft-launch, you will not get one, and the safer path remains the operational ramp —
prove your senders pass, then commit to the policy rather than relying on a testing flag whose
effect depends on who is reading it.
The third-party senders that break enforcement
If a migration fails, the cause is almost always a sender you forgot you had. The reports surface them, but only if you read them: a marketing platform added last year, a help desk that emails on your behalf, a billing system on a legacy server, an acquisition's old domain still sending invoices. Each one has to pass DKIM or SPF with alignment to your visible From domain before you tighten the policy, and each one tends to fail in its own quietly specific way.
SPF is capped at ten DNS lookups, and that ceiling is easy to breach as you bolt on tools. Add a CRM, a help desk, a marketing platform, and a transactional provider, and the chained includes can push past ten, at which point SPF returns a permanent error and cascades straight into DMARC failures for legitimate mail. The fix is to audit and flatten the record, keeping it inside the limit, and to move providers that send from their own subdomains off the root SPF entirely where the platform allows it.
DKIM has its own failure modes that hide until enforcement catches them. Signatures configured correctly at setup break during a migration — a website provider changes, a CRM is swapped, DNS moves to a new host — and nobody verifies the DKIM records came along. Records get applied to a www subdomain instead of the root, TTL values cause validation failures at strict receivers, and vendor CNAME instructions are simply wrong until the vendor issues corrected values. None of these show up while you are at p=none; all of them block real mail the moment you reach quarantine, which is exactly why the monitoring phase exists.
What reaching enforcement unlocks
Enforcement is worth the care it takes, and not only because it stops spoofing. A reject policy is the precondition for BIMI, the standard that places your verified logo beside authenticated mail in supporting inboxes — a visible trust signal that lifts recognition and, by several measures, engagement. BIMI needs your DMARC at quarantine or reject before it will work at all, and Gmail's verified checkmark wants a Verified Mark Certificate; the barrier has lowered recently because Gmail now also accepts a Common Mark Certificate, which does not require a registered trademark.
The compliance picture rewards enforcement too. Beyond Gmail, Yahoo, and Microsoft's bulk-sender rules, a growing list of frameworks expects a reject policy: government domains across several countries mandate it, and payment-handling and federal contexts increasingly require it rather than merely recommend it. A domain at p=reject is not just protected from spoofing; it is positioned ahead of the regulatory direction of travel rather than scrambling to catch up later.
There is a reputational dividend as well. Because spoofed mail sent in your name damages your domain reputation whether or not you sent it, shutting that channel down protects the deliverability of the mail you do send. The same enforcement that stops an attacker impersonating your billing department also stops their spam from dragging your legitimate invoices toward the spam folder — the protection and the deliverability benefit are the same action seen from two sides.
The ramp
Reading the ramp as a spectrum
Three policy states, and the gate you must clear before moving right.
The gate between each state is the same question: which legitimate systems still fail DMARC? At p=none you answer it from the reports; at p=quarantine you confirm the answer is stable; at p=reject the only failures left should be mail you never authorised. Read left to right, the spectrum runs from pure visibility with no protection to full protection — and the move rightward is earned with clean reports, never with a date on a calendar.
Where we stand
We host sending infrastructure, so reaching enforcement matters to us: mail sent from clean, well-authenticated infrastructure is what makes a reject policy safe in the first place. But the migration itself is yours to drive from your reports, and the honest advice is the unglamorous kind — go slow, fix senders before you tighten, and never advance a stage to hit a deadline. A domain rushed to p=reject that blocks its own invoices has not improved its security; it has created an outage.
If you run your sending with us, we will make sure your streams pass SPF and DKIM with alignment and keep your reputation clean enough that enforcement is a non-event. If you self-host or send through an ESP, the same sequence applies regardless of who runs the servers: publish p=none, read the reports, fix every legitimate sender, and walk the policy up only as the data lets you. The reward at the end is real — spoofing stopped, reputation protected, and BIMI within reach.
Questions
Answered plainly
The questions teams ask before tightening a production DMARC policy.
How long does it take to go from p=none to p=reject?
There is no fixed timeline — it is driven by your reports, not the calendar. A small B2B domain with few senders can move through the stages in a couple of weeks; a large organisation with many third-party platforms, subdomains, and scheduled systems usually needs a week or more at each stage to capture normal sending patterns. The one rule that matters: never advance a stage while legitimate mail is still failing. Rushing is exactly how teams block real email and roll back to p=none, sometimes permanently.
What changed with DMARCbis in 2026?
DMARCbis is the 2026 revision published as RFCs 9989, 9990 and 9991, which replaces the original RFC 7489. Your existing v=DMARC1 records stay valid — there is no "DMARC2". The headline changes are the removal of the pct tag (so there is no in-protocol staged rollout anymore), the addition of np for non-existent subdomains and t for testing mode, and a DNS Tree Walk that replaces the Public Suffix List for finding your organizational domain. The spec also now explicitly advises against p=reject for domains with active mailing-list traffic.
What does the np tag do, and do I need it?
np sets the policy for subdomains that do not exist at all — ones you never created. Attackers can forge mail from madeup.example.com even if you only send from your root domain, and without np a receiver falls back to your sp or p policy for those. Setting np=reject closes that hole. It matters most for sensitive domains; test it first, because some services create dynamic subdomains and np=reject could catch legitimate mail you forgot about.
Why did my newsletters land in spam after I moved to quarantine?
Almost always because a legitimate third-party sender was missed during monitoring and is now caught by the stricter policy. The fix is not to roll back blindly — find the failing source in your aggregate reports, correct its SPF or DKIM alignment, confirm it passes consistently, and only then continue. ESPs that require a root-domain SPF include and vendors whose DKIM CNAME values are wrong until corrected are common culprits.
Does p=reject guarantee my mail reaches the inbox?
No. DMARC enforcement stops others from spoofing your domain and protects your reputation, but it does not by itself place mail in the inbox — reputation, engagement, complaint rate, and the rest of your authentication still decide that. What p=reject does unlock is BIMI: with quarantine or reject in place and a Verified Mark Certificate (or now a Common Mark Certificate for Gmail), your logo can appear beside authenticated mail, which is a visible trust signal.
Should I set sp explicitly?
Usually no. If you omit sp, subdomains inherit your p policy automatically, which is the safe default. Set sp deliberately only when subdomains send through different infrastructure than the root, or when you want to enforce on them faster or slower than the root. The one combination to avoid is p=reject with sp=none, which locks your root domain while leaving every subdomain spoofable — a misconfiguration found in roughly one in thirteen fully-enforcing domains.
Want enforcement to be a non-event?
Tell us how you send, and we will help you reach p=reject from clean, well-authenticated infrastructure — without blocking a single legitimate message.