Blog · Dmarc

How to Move Your DMARC Policy from p=none to p=reject Without Breaking Mail

Here is what actually happens when an organization moves to p=reject without preparation: a legitimate email from a subsystem nobody remembers configuring starts bouncing. The switch got flipped because the policy looked safe and someone wanted to check a compliance box. That scenario is entirely avoidable.

Moving your DMARC policy from p=none to p=reject is one of those tasks that looks simple and is not. The DNS change takes seconds. The damage if something is misconfigured takes days to untangle. This guide covers the preparation, the decision criteria, and the rollback if it goes wrong.

What p=none Actually Means (And Why Most Admins Waste It)

p=none tells receiving mail servers to take no action on messages that fail DMARC alignment. It is monitoring mode. You get reports. Nothing else happens to failing messages.

Most domains sit at p=none for months or years without reading a single DMARC report. That is the wasted opportunity. p=none gives you visibility into every source sending mail as your domain, whether you authorized it or not. If you are not reading those reports, you are flying blind when you finally change your policy.

The move to p=reject should not begin until you have answered one question from your DMARC reports: what is currently sending mail as my domain, and does all of it have valid SPF and DKIM alignment?

If you cannot answer that question, you are not ready. The tool you use to answer it matters less than actually doing it. DMARCFlow is designed to surface exactly this information from your reports, so you can see which sources are passing and which are failing before you change anything.

Before You Change Anything: Subdomain and Third-Party Sender Inventory

The most common reason legitimate mail breaks after moving to p=reject is that a subdomain inherits the policy but has no SPF record, no DKIM key, or both.

This is how it happens. Your root domain example.com has p=none, SPF covering your mail server, and DKIM published. You set p=reject on example.com. Everything looks fine. Then noreply@example.com works and support@example.com does not, because a vendor added a support subdomain for your account and it sends mail as your domain with no SPF record. The mail from that subdomain silently fails at p=reject.

Before you change anything, run this checklist:

  1. List every subdomain that sends mail as your domain. Check your DNS, your email vendor configurations, your CRM, your helpdesk, your marketing platform, and any SaaS tool that sends notifications on your behalf.
  2. For each subdomain, confirm it has a valid SPF record.
  3. For each subdomain, confirm it has a valid DKIM key published in DNS AND that the key is actually used by the sending service.
  4. Identify every third-party service that sends mail as your domain. Note whether each one uses DKIM signing with a key you control.

Any subdomain without SPF, or any third-party sender without aligned DKIM, will break when you move to p=reject unless you either fix it first or exclude it using a subdomain policy (sp=none or sp=quarantine).

How to Read DMARC Reports for Migration Readiness

DMARC reports come in two formats: aggregate reports (RUA) and failure reports (RUF). For migration planning, aggregate reports are what you need.

In your aggregate reports, look at these fields:

The aligned authentication failure rate. A message can fail SPF or DKIM individually but still pass DMARC if the other mechanism aligns. Look specifically at rows where both SPF and DKIM show fail and the disposition is none. Those are your aligned failures - the ones that will start getting rejected at p=quarantine or p=reject.

Source volume by sending domain. If 95% of your volume is from your main mail server and 5% is from a vendor whose alignment is inconsistent, that 5% is your risk. It only takes one misconfigured vendor to generate enough complaints to damage your sender reputation.

SPF and DKIM pass rates by source. A source showing 100% pass is safe to trust. A source showing 97% pass with sporadic failures means something is inconsistent - a rotating IP not in your SPF record, a DKIM selector added mid-campaign, a forwarding chain that breaks alignment.

The reports you receive depend on who you are sending to. Gmail, Yahoo, and Microsoft provide useful aggregate data. Most other receivers send nothing. Your pass rate with large inbox providers is the most important signal.

Reading raw DMARC XML reports is painful. This is the step where most teams either skip the analysis or spend hours manually extracting data. DMARCFlow automates this step - it parses the reports and tells you which sources are failing, by how much, and whether the trend is getting better or worse over time. If you are doing this manually, it is worth knowing that most aggregate reports contain exactly the fields listed above and nothing more complex.

Three Gates Before You Move to p=quarantine

Before moving from p=none to p=quarantine, these three things must be true:

Gate 1: You have at least 30 days of DMARC report data. One month of reports captures most sending patterns including monthly newsletters, quarterly billing runs, and seasonal campaigns. Less than 30 days means you are making a decision on incomplete data.

Gate 2: Your aligned failure rate is below 1% for all high-volume sending sources. If your main mail server is failing alignment for more than 1% of messages, something is misconfigured. Fix it before you tighten the policy.

Gate 3: You have contacted every third-party sender that shows up in your reports. If a vendor sends as your domain and they cannot provide aligned DKIM signing, you need either to remove that sending method or add an sp=quarantine policy for their subdomain specifically.

Three Gates Before You Move to p=reject

Moving from p=quarantine to p=reject requires stricter criteria because rejected mail does not land in quarantine - it disappears from the recipient perspective.

Gate 1: Your aligned failure rate at p=quarantine was below 0.1% for 14 consecutive days. If mail was being quarantined, you would have heard about it from users or IT. If no complaints came in during quarantine mode, you have a clean signal.

Gate 2: All subdomains that send mail have either aligned DKIM or explicit subdomain policies. No subdomain should inherit p=reject if it cannot pass alignment. Either fix the subdomain's authentication or add sp=none for it.

Gate 3: Your sending infrastructure is stable. If you are mid-migration to a new email platform, wait until it is complete. Changing mail servers while at p=reject guarantees failures during the overlap period.

These gates are where DMARCFlow earns its place in the workflow. Tracking failure rates across 14-day windows, monitoring new sending sources appearing in reports, and getting alerted when a previously quiet subdomain starts generating failures - that is the operational work that makes the gates reliable. You can do it manually with weekly report exports. You can also let a tool handle the monitoring and focus your attention on fixing problems instead of finding them.

The First 48 Hours After Changing Your Policy

Once you change to p=reject:

  1. Watch your inbox for delivery failure notifications. Bounces from recipients will arrive within minutes to hours.
  2. Check your sending platform's delivery dashboard if it has one. A spike in rejected messages is your first signal.
  3. Ask your helpdesk to flag any inbound complaints from external senders.
  4. Do not make any other DNS or authentication changes during this window. If something breaks, you want to be able to attribute it to the one change you made.

If nothing breaks in 48 hours, you likely have a clean bill of health. Continue monitoring for a full week before considering the migration complete.

How to Roll Back Safely If Mail Breaks

If legitimate mail starts bouncing after you move to p=reject, the fix is immediate even if the full recovery is not.

The DMARC policy change takes effect as soon as the DNS TTL expires. If your DMARC record has a TTL of 3600 (one hour), the change propagates within an hour. If the TTL is 86400 (one day), it takes up to a day.

Immediate rollback: Change your DMARC record back to p=none. The receiving mail servers will accept the update within one TTL cycle.

What does not help immediately: Changing your SPF record, updating your DKIM key, or contacting receiving mail servers. The DMARC policy is the gate. Get it back to p=none first, then fix whatever caused the failure.

The most common causes of post-rollback breakage are:

  • A third-party sender added since your last inventory that you did not know about
  • A forwarding chain that breaks DKIM alignment
  • A subdomain used by a business unit that did not notify IT

After any rollback, read your DMARC reports again. The failure sources you see now are the ones you missed the first time.

FAQ - DMARC p=none to p=reject

How long should I stay at p=none before moving to p=quarantine?

At least 30 days of data, and only move when your aligned failure rate is below 1%. Time alone is not the criterion.

What percentage of mail should pass alignment before I move to p=reject?

The readiness gates matter more than a percentage. At p=quarantine, your failure rate should be below 0.1% for 14 consecutive days. That is a better signal than a percentage because it accounts for volume and time.

My reports show mostly pass but some failures. Can I move to p=reject?

Only if you have identified every failure source and confirmed that none of them represent legitimate mail from authorized senders. Unknown failures are the risk. A 2% failure rate from a known vendor you are working with is manageable. A 0.5% failure rate from an unknown source is not.

I changed to p=reject and legitimate mail started bouncing. What do I do first?

Change the policy back to p=none immediately. Then read your DMARC reports to find the failure source. Do not try to fix the SPF or DKIM configuration while the policy is still set to reject - you will be chasing bounces while making changes.

Do subdomains inherit my DMARC policy?

Yes, by default. A policy set on example.com applies to mail.example.com unless you explicitly override it with the sp tag. If a subdomain sends mail but does not have proper SPF and DKIM configuration, it will fail alignment under p=reject. Either fix it or exclude it with sp=none before you change the policy.

Summary

Moving from p=none to p=reject without breaking mail comes down to one thing: knowing what is in your DMARC reports before you change the policy. The steps are straightforward - inventory your senders, fix alignment problems, confirm readiness from data, make the change, monitor for 48 hours. The part most teams skip is the report analysis. Do not skip it.