Blog · Dmarc
How to Safely Move from DMARC p=none to p=reject Without Breaking Your Email
When your DMARC record has a policy of p=none, receivers do nothing with emails that fail DMARC alignment. They accept them normally and send you a report. That is the entire arrangement.
If you are running p=none, you are collecting data but getting no protection. Attackers who spoof your domain will still land in inboxes. The policy tells receivers: "tell me what you see, but do not act on it."
The problem is that p=none feels like progress. You have a DMARC record. You are watching the reports. And at some point, someone decides it is time to flip to p=reject and get real protection.
That switch is where legitimate email breaks.
The most common cause: third-party senders. These are vendors, marketing platforms, internal tools, and legacy systems that send email on your behalf using their own infrastructure. When they do this, the From header shows your domain but the DKIM signature comes from their domain, and the SPF check runs against their IP. None of this aligns with your DMARC policy. Under p=none, these failures are invisible. Under p=reject, they become bounces.
The solution is not to stay at p=none forever. It is to move through the transition deliberately, with the right information first.
The Core Risk: Third-Party Senders and Alignment Failures
Before you move to p=reject, you need to know who is sending mail on your behalf and whether those sources will pass DMARC alignment.
Common culprits:
Marketing platforms -- platforms like Mailchimp, HubSpot, and SendGrid send from your domain in the From header but sign with their own DKIM key. Under strict alignment, this fails unless you use custom DKIM domains.
Legacy SMTP relays -- some organizations have mail relays that rewrite headers or add Received lines, breaking DKIM signatures in transit.
Internal tools -- HR systems, ticketing platforms, and homegrown applications that trigger transactional email often route through external providers without proper DKIM setup.
Shared infrastructure -- cloud platforms that send on your behalf sometimes use pool IP addresses, which will not align with your domain.
When any of these send a message under p=reject, the receiver refuses it. The sender gets a bounce. Your users stop receiving password resets, order confirmations, and notifications.
You need a third-party sender inventory before you switch.
Step 1: Read Your Aggregate Reports Before Touching Policy
Your DMARC aggregate reports (sent to the rua address in your record) tell you exactly what sources are sending on your behalf and how many are failing alignment. This is the most important document in your transition process.
Look for:
High-volume failure sources -- if a source is sending 500 messages per day and 80% are failing alignment, that is a serious problem when you switch. You need to fix that source first.
Unknown sending IPs -- sources you do not recognize are red flags. A sudden new sending IP appearing in your aggregate reports after you move to reject means something legitimate will break.
Subdomain inconsistency -- if you have example.com in your policy but are also sending from app.example.com without a separate ._dmarc.app.example.com record, subdomain mail will fail.
A good rule of thumb: if a source accounts for more than 1% of your total mail volume and has a failure rate above 5%, do not switch until you have resolved it.
This is also where DMARCFlow earns its place. Reading raw aggregate reports in XML format is painful. DMARCFlow parses them continuously, alerts you when new sending sources appear, and tracks alignment failure rates per domain over time. If you are managing multiple domains, DMARCFlow is the difference between a controlled transition and a weekend of emergency rollbacks. It shows you exactly which sources are failing, which domains are ready for the next policy step, and when something new appears in your reports after you have already switched.
Step 2: Move to p=quarantine First (Even If Just for 30 Days)
p=quarantine tells receivers to mark failing mail as suspicious, not to reject it outright. This is a useful intermediate step because it surfaces alignment failures in a way that is disruptive but recoverable.
When a message fails DMARC under p=quarantine, the receiver typically moves it to spam or applies a yellow warning banner. Your users may miss some legitimate mail. You will hear about it quickly. That feedback is valuable.
You should run p=quarantine for at least 30 days. 60 to 90 days is better if your sending patterns are complex. The goal is to get at least one full regular sending cycle -- including any monthly or quarterly campaigns -- covered under quarantine before you escalate.
During the quarantine period, watch for:
- spike in complaints from users not finding expected messages
- partners reporting that your transactional mail is landing in spam
- any new sending sources that were not present in your p=none period
If none of these materialize, you are ready to proceed.
Step 3: Build a Domain Rollout Sequence
If you manage more than one domain, do not switch them all at once. Start with the simplest domain and work toward the most complex.
A useful prioritization framework:
- Low-risk first -- domains that send low volume, have few third-party integrations, and have consistently clean aggregate reports under quarantine. These are your proof of concept.
- Secondary domains next -- marketing domains, regional variants, and subdomains that are less critical to operations.
- Problem domains last -- domains with the most third-party senders, the highest mail volume, or the most complex infrastructure. These require the most remediation before they are ready.
For each domain, the readiness criteria are the same: aggregate report failure rate below 5% for at least 30 days, no unknown sending IPs, all known third-party senders confirmed as alignment-compliant.
If a domain is not ready, do not force it. Keep it at p=quarantine or p=none until the underlying issues are fixed.
Step 4: Execute the p=reject Switch and Watch for 72 Hours
When you are confident a domain is ready, change the policy to p=reject and watch the next 72 hours closely.
Set up active monitoring for:
- helpdesk tickets related to missing email
- partner notifications about bounces or delivery failures
- DMARC failure rate spikes in your aggregate reports
If legitimate mail starts bouncing, you need to know within hours, not days. The rollback procedure is simple: change p=reject back to p=quarantine in your DNS record. DNS TTL determines how quickly receivers pick up the change, so keep your TTL low (300 seconds or less) on your DMARC record during the transition window.
After rollback, investigate the aggregate reports for the new failure source. Remediate the issue. Wait another reporting cycle. Then try again.
This is not failure. This is the expected behavior of a cautious rollout.
How DMARCFlow Makes the Transition Safe
The transition from p=none to p=reject is fundamentally a monitoring problem. You need to see what is happening before it breaks, and you need to know immediately when it does break.
DMARCFlow provides:
- continuous aggregate report ingestion and parsing
- new sending source alerts so you catch unexpected infrastructure changes
- per-domain alignment failure rates tracked over time
- multi-domain overview showing which domains are ready for policy escalation and which need more time
- historical baseline comparison to detect anomalies after the switch
Without this level of monitoring, you are making a policy change blind. With it, you are making an informed decision with evidence.
FAQ
How long should I stay on p=none before moving to quarantine?
At minimum 30 days, but 60 to 90 days is better. You want to capture at least one full regular sending cycle, including any monthly newsletters, quarterly reports, or seasonal campaigns that happen infrequently.
Can I move to p=reject on all domains simultaneously?
Not if they have different sending profiles. Each domain has its own set of third-party senders and alignment characteristics. Move them one at a time in priority order, starting with the lowest-risk domain.
What should I do if legitimate mail starts bouncing after I switch to p=reject?
Change p=reject back to p=quarantine in your DNS record immediately. Check your aggregate reports for the new failure source. Fix the alignment issue with that sender. Then wait a full reporting cycle before attempting p=reject again.
Does moving to p=reject affect inbound email or only outbound?
Only outbound. DMARC alignment is checked on mail where your domain appears in the From header. Inbound mail addressed to your users from external senders is not affected by your DMARC policy.
Does DMARCFlow support multiple domains?
Yes. DMARCFlow can monitor unlimited domains from a single dashboard, with per-domain reporting, alerting, and readiness assessment for DMARC policy escalation.