Blog · Dmarc

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

Most domains that use DMARC run it at p=none. That is the default. It tells receiving servers to do nothing with mail that fails DMARC, other than send you reports. It is a safe starting point.

The problem is that p=none does not actually protect anything. A p=none policy means you are monitoring, not enforcing. Someone can forge your domain and the receiving server will accept the mail without complaint. You only find out about it later from a report.

Switching to p=reject closes that gap. When you set p=reject, receiving servers block any mail that fails DMARC. No more silent failures. No more domain spoofing.

But most organizations stay at p=none because they are afraid of breaking their own legitimate mail. The real risk is not the DNS change itself. It is the sending sources you have forgotten about. Third-party platforms, marketing tools, SaaS applications that send as your domain without proper DKIM signing will simply stop delivering mail the moment p=reject is active. There is no bounce notification. The mail just disappears.

This guide covers exactly how to make that switch without an outage. It also covers how to find the senders you do not know about before they become a production problem.

A DMARC monitoring tool like DMARCFlow helps here in a specific way: it processes your aggregate reports and alerts you when a new sending source appears that you have not authorized. During the transition from p=none to p=reject, that visibility is the difference between a controlled migration and a silent mail outage affecting customers you will not hear from.

Why p=none Is Where Most Organizations Get Stuck

The fear is real. When you set p=reject, any mail that does not align with your DMARC record gets rejected at the receiving server. If you have a third-party platform sending as your domain and that platform is not properly aligned, the mail disappears. No bounce notification to you. The recipient never sees it.

This is not a hypothetical. It is the most common reason legitimate mail breaks after switching to p=reject.

Aggregate DMARC reports show you exactly which sending sources are not aligned. But most admins set p=none and then never look at the reports again. When it is time to switch to p=reject, they have no data about which senders are actually authorized.

The result: organizations stay at p=none for years because reviewing the reports is time-consuming and there is no clear way to know if a sender you forgot about will break.

The Three-Phase DMARC Migration Path

The safe migration follows three steps:

1. p=none -- Monitor only. Collect aggregate reports for at least 30 days. Identify every legitimate sender using your domain.

2. p=quarantine -- Instruct receiving servers to mark non-aligned mail as suspicious, not to reject it outright. This gives you a safety net. Legitimate non-aligned mail lands in spam instead of disappearing.

3. p=reject -- Full enforcement. Mail that fails DMARC is rejected at the border. This is the target state.

The quarantine step exists to catch problems that p=none monitoring missed. Some senders only appear occasionally. Some only send during specific campaigns or seasonal traffic. Running p=quarantine for two to four weeks before switching to p=reject gives you a chance to see those rare senders without losing mail.

Skipping quarantine and going straight to p=reject is possible if your monitoring data is thorough and you have contacted every third-party sender in advance. But it is a higher-risk approach with no margin for error.

What to Check in Your Aggregate Reports Before Switching

Before you touch your DMARC record, review the reports you have been collecting. Look for these specific patterns:

SPF alignment failures

DMARC requires either SPF or DKIM alignment, not both. If a message fails SPF alignment, it still passes DMARC if DKIM aligns. But if you see a high volume of messages with SPF failures and no DKIM signature, that sender is one misconfiguration away from disappearing at p=reject.

Third-party senders not using your authorized servers

Any sending source in your aggregate reports that is not your own mail server is a third-party sender. For each one, ask: is this platform authorized to send as our domain? If yes, is it signing with DKIM using your domain? If it is sending as user@yourdomain.com but signing through its own DKIM key, it will break at p=reject.

DKIM signature failures

If you see DKIM failures alongside SPF failures, the sender may be using a custom DKIM key that is not published in your domain's DNS. That sender will break at p=reject.

New sources appearing over time

One month of reports is a snapshot, not a complete picture. Check if any sending sources appear only during specific weeks. Financial platforms, CRM tools, and marketing automation often send from infrastructure you did not configure.

The Most Common Reasons Legitimate Mail Breaks After p=reject

Third-party platforms sending from your domain without proper DKIM

This is the top cause. A marketing platform, onboarding tool, or billing system sends transactional email as noreply@yourdomain.com. It authenticates through its own SMTP servers, not yours. At p=none, the receiving server accepts the mail and you get a failure report. At p=reject, the mail is blocked silently.

The fix: either move that sender to a subdomain with its own DMARC record, or require the vendor to sign with your DKIM key.

Marketing automation tools with inconsistent DKIM signing

Many marketing platforms offer DKIM signing but enable it per campaign or per sender profile. If the DKIM signature is missing or uses the wrong selector, mail fails DMARC alignment. The tool may have worked fine for months and then suddenly stop working if someone changes a sender profile without checking DKIM.

Internal mail systems not in your SPF record

Legacy internal mail relays, printers that scan to email, and old SMTP gateways sometimes relay mail through servers that are not in your SPF record. If those servers are not authorized and not signing DKIM, they will fail at p=reject.

Your Pre-Switch Checklist

Run through every item before changing your policy to p=reject:

1. Collect at least 30 days of aggregate DMARC reports.
2. List every sending source that appears in the reports.
3. For each source, confirm it is authorized to send as your domain.
4. For each source, confirm it uses either your SPF record or DKIM signing with your domain.
5. Check for sources that only appear during specific periods. Wait at least one full cycle before switching.
6. Contact any third-party senders that are not aligned. Get confirmation they will fix their configuration.
7. Set p=quarantine as a trial run. Monitor for two to four weeks.
8. Confirm zero quarantine incidents from senders you care about before proceeding.
9. Publish your p=reject record during low-traffic hours with a colleague on standby to monitor.
10. Have your registrar access ready in case you need to roll back quickly.

How to Roll Back Quickly If Mail Breaks

If legitimate mail disappears after switching to p=reject, the fix is immediate: change your DMARC record back to p=quarantine or p=none. This takes less than five minutes if you have access to your DNS.

The more useful question is: how do you catch the problem fast enough to react before a large volume of mail is lost?

The answer is real-time alerting. Most aggregate DMARC reports are delivered daily. That is too slow for a live migration. You need a tool that flags DMARC failures within minutes of a policy change, not hours or days later.

This is where DMARCFlow earns its place during the migration. DMARCFlow processes aggregate reports as they arrive and can alert you within minutes of a new failure pattern appearing. During the critical 24 hours after switching to p=reject, that speed matters.

DMARCFlow also maintains a live overview of your sending sources. If a new third-party sender appears that you did not authorize, you see it immediately rather than discovering it three days later when a customer reports not receiving a confirmation email.

What to Do After You Switch

Once you are at p=reject, the job is not done. New sending sources appear over time. Vendors change their email infrastructure. Teams spin up new tools that send as your domain without notifying IT.

DMARCFlow monitors that ongoing change and alerts you when something new shows up in your aggregate reports, so you catch it before it becomes a customer complaint.

Before you make any DNS change, you can check any domain's DMARC record instantly using DMARCFlow's free DMARC record checker. If you are about to onboard a new email platform, use it to verify the platform's DKIM setup is correct before you go live at p=reject.

Frequently Asked Questions

How long should you run p=none before switching to p=reject?

At minimum 30 days, but longer is better if you have seasonal sending patterns. Some sending sources only appear during specific times of year. A full quarter of data is the safest baseline.

Can you skip p=quarantine and go straight to p=reject?

Yes, if you have confirmed that every sending source using your domain is properly aligned. In practice, most organizations discover at least one forgotten sender when they switch. The quarantine phase exists to catch those surprises without losing mail.

What happens if a third-party sender you did not know about starts sending as your domain?

At p=reject, that mail is blocked. You will see the failure in your aggregate reports. The sender will not receive a bounce notification unless the receiving server sends one, which is not guaranteed. This is why pre-switch monitoring is critical.

Does p=reject affect inbound mail or only outbound?

Only outbound mail that purports to be from your domain. Inbound mail addressed to your domain from external senders is not affected by your DMARC policy. Your DMARC record only controls what happens to mail you claim to have sent.

What is the fastest way to identify which sender is causing failures after switching?

Check your aggregate reports immediately. Look for the sending source IP, then match it against your authorized senders list. If it is not there, it is either an unauthorized sender or a misconfigured authorized sender. DMARCFlow's daily digest shows failure spikes within hours of a policy change.

Summary

Moving from p=none to p=reject is the point where DMARC becomes a real security control instead of just a monitoring tool. The migration is straightforward if you do the preparation: collect reports, identify every authorized sender, fix alignment issues, and run p=quarantine as a buffer before going to full enforcement.

The biggest risk is not the DNS change itself. It is the senders you forgot about. Thorough monitoring before you switch is the only way to know who is actually sending as your domain.