Blog · Dmarc

How to Safely Move from DMARC p=none to p=reject

What p=none Actually Means (and Why "None" Is Not a Long-Term Strategy)

When you set your DMARC record to p=none, you are telling receiving mail servers to take no action on messages that fail DMARC. The failures still happen. You just will not see them blocked.

That makes p=none useful as a starting point. You get visibility into who is sending mail from your domain without risking legitimate messages being rejected. But p=none is a monitoring tool, not a security posture.

The real goal is p=reject. When your DMARC policy is set to reject, unauthenticated mail from your domain is discarded at the receiving server. Spoofed emails that impersonate your domain never reach the inbox. That is the protection you actually want.

The problem is that switching straight from p=none to p=reject without preparation breaks legitimate email. Somewhere in your infrastructure there are systems sending mail that do not quite align with your authentication records. They work fine at p=none. They vanish at p=reject. This is predictable and preventable if you read the reports first.

Before You Switch: Read Your Aggregate Reports

p>Aggregate reports are XML files sent daily by receiving mail servers. They tell you which sources sent mail from your domain, whether those sources passed or failed SPF and DKIM, and whether the results aligned with your From domain. You cannot safely move to p=reject without reading them.

The key question is: what percentage of your legitimate mail is failing DMARC today? If that number is above zero, you need to understand why before you switch.

A few specific things to look for in aggregate reports:

  • Sources that consistently fail SPF or DKIM. These may be third-party senders, legacy systems, or internal relays that are not configured to sign outgoing mail.
  • Subdomains sending mail you did not know about. Marketing platforms, product tools, and internal services often send from subdomains you forgot existed.
  • Alignment failures. A source may pass SPF or DKIM individually but fail DMARC because the authenticated domain does not match the From domain. Relaxed alignment (adkim=r) allows organizational domains to match, but strict alignment requires exact FQDNs.

Most practitioners who have been running at p=none for a month or longer will find at least one of these patterns. The question is whether the volume is small enough to fix before switching.

A rough readiness benchmark: if less than 1% of your legitimate mail volume is failing DMARC, you are close. If the failures are concentrated in known senders you can fix in a few days, you are ready.

This is also where DMARCFlow earns its place. Reading aggregate reports is tedious in raw XML format. DMARCFlow parses them into a dashboard that shows you at a glance which sources are failing, which subdomains are active, and whether your alignment pass rate is improving week over week. During a migration, you should be checking these reports weekly. DMARCFlow makes weekly checks fast enough that practitioners actually do them.

Use Subdomain Policy as Your Testing Ground

You do not have to switch the root domain to p=reject all at once. You can test the waters first by setting sp=reject on your subdomains while keeping p=none on the root.

The sp tag applies a separate policy to subdomains. If you set sp=reject and p=none, your root domain continues to accept everything while your subdomains start rejecting unauthenticated mail. This tells you whether any of your subdomain senders are misconfigured before that misconfiguration causes an outage on your main domain.

Common subdomain problems that sp=reject surfaces quickly:

  • Marketing automation platforms sending from offers.example.com without DKIM signing
  • Product notification systems sending from notify.example.com with SPF but no DKIM
  • Legacy internal tools using the root domain as their MAIL FROM without proper alignment
  • Third-party CRMs that send on your behalf but do not implement DKIM signing

Running sp=reject for two to four weeks before switching the root domain is a low-risk way to catch these issues. You will see failures in your aggregate reports, investigate, and fix them. At the end of that window you will have a cleaner picture of your actual migration readiness.

Common Problems That Block the Switch

In practice, most alignment failures that prevent a safe p=reject switch fall into a few predictable categories.

Third-party senders not aligned. Your marketing automation, CRM, support platform, or billing system sends email from your domain but does not use your DKIM keys. This is the most common issue. The fix is usually to configure DKIM signing within the third-party platform, or to route that mail through your own mail infrastructure with proper signing.

Shared infrastructure with no DKIM signing. Some sending platforms use shared IP pools and do not offer custom DKIM signing. Mail from these sources will fail DKIM alignment. You may need to move that traffic to a dedicated infrastructure that you control, or accept that those senders cannot use your domain.

Internal mail relays that strip authentication. If internal mail passes through a relay that rewrites headers or strips DKIM signatures before forwarding to the internet, your authentication results will not survive transit. This is less common but shows up in older enterprise environments.

Legacy systems using the root domain as MAIL FROM. Some internal tools construct the envelope sender (MAIL FROM) using the company domain without SPF authorization. When DMARC checks the MAIL FROM against the From header domain, alignment fails even if SPF technically passes. The fix is usually updating the MAIL FROM to use a subdomain that is covered by your SPF record.

Before switching to p=reject, go through your aggregate reports and categorize every failing source. Unknown sources should raise more concern than known sources you have already investigated.

The Step-by-Step Migration Checklist

A realistic timeline for a small-to-medium organization:

Weeks 1-4: Collect and analyze aggregate reports. Set up DMARC reporting and resist the urge to change policy. Build your inventory of all sources sending from your domain, including subdomains.

Weeks 5-8: Fix identified alignment issues. Work through your failure list. Configure DKIM signing for third-party platforms where possible. Update MAIL FROM records for legacy systems. Remove or retire sources that cannot be fixed.

Weeks 9-12: Test with sp=reject on subdomains. Set sp=reject while keeping p=none on the root. Monitor aggregate reports weekly for subdomain failures. Fix what surfaces.

Week 13 onward: Switch root domain to p=reject. Start with pct=10 (10% of messages subject to the policy) to catch any remaining issues at low volume before full rollout. If no major problems surface after two weeks, increase to pct=100.

This timeline assumes you have a small team doing the work between other responsibilities. Larger organizations with more sending infrastructure will need more time, particularly if third-party sender configuration requires vendor coordination.

After the Switch: What to Monitor

Once you are at p=reject, your aggregate reports become your early warning system. A spike in DMARC failures after the switch usually means one of two things:

A new source started sending from your domain. This could be a new marketing platform, a product feature, or an acquisition. It could also be someone impersonating your domain from a source you did not know about.

A previously fixed source regressed. Configuration changes, platform migrations, or vendor updates can break DKIM signing on senders you already fixed.

Set up a weekly review habit. DMARCFlow can alert you to sudden changes in failure volume so you catch regressions before they become inbox problems.

When to roll back: if you see failure rates above 5% on legitimate mail volume within the first week of switching, roll back to p=none and investigate. Use pct to avoid full rollback in the future.

Frequently Asked Questions

How long does DMARC migration take?

Most organizations need three to six months from setting the first p=none record to safely switching to p=reject. Organizations with complex sending infrastructure, many third-party platforms, or legacy systems may need longer. Rushing this timeline is the most common cause of outages.

What percentage of legitimate email typically fails DMARC before migration?

For organizations that have never reviewed their sending sources, it is not unusual to see 5-15% of legitimate volume failing DMARC at p=none. After fixing known issues, most organizations can get below 1% before switching to p=reject.

Can I switch to p=reject without fixing all alignment issues?

You can, but you will lose legitimate mail. Every alignment failure at p=none is a source that will cause hard bounces or silent drops at p=reject. Fix the major sources (high volume) first. Very low-volume failures may be acceptable to address after switching, depending on your risk tolerance.

How do third-party senders affect DMARC p=reject?

Third-party senders that do not implement DKIM signing for your domain will cause DMARC failures when you switch to p=reject. Before switching, audit every third-party platform that sends from your domain and configure DKIM signing where supported. For platforms that cannot sign, you may need to route their mail through your own infrastructure or accept that those messages will be rejected.

What is the subdomain policy (sp=) and should I use it?

The sp tag applies a separate DMARC policy to subdomains of your root domain. Use sp=reject to protect subdomains even when your root domain is at p=none. This gives you broader protection while you work through root domain migration. It also surfaces subdomain senders you may not know about.