Blog · Dmarc

How to move from DMARC p=none to p=reject without breaking mail

Moving your DMARC policy from p=none to p=reject is the point where email authentication stops being theoretical and starts blocking forged mail that spoofs your domain. That is the goal. But tighten the policy before you are ready, and you will break legitimate email without knowing it until users complain.

The solution is not to avoid p=reject. It is to reach it in the right order.

What p=none actually does

p=none tells receiving mail servers to do nothing with messages that fail DMARC alignment. Your domain is being spoofed. You get reports about it. Nothing else happens.

This is useful for a defined period: the phase where you are collecting data and identifying all the legitimate ways your domain is used for sending mail. If you have been at p=none for years without a plan, the data is already there. Start using it.

p=quarantine tells receiving servers to treat failing messages as suspicious, usually by routing them to spam. Legitimate mail from misaligned sources gets through, but users may not see it.

p=reject tells receiving servers to refuse messages that fail DMARC alignment outright. Forged mail that claims to be from your domain never reaches the recipient. This is where DMARC delivers its full protective value.

The upgrade sequence is: analyze, p=quarantine, then p=reject. Each stage has a specific purpose.

Step 1: Read your DMARC reports before changing anything

Every p=none deployment generates aggregate reports. If you are not reading them, you do not know what will break.

A DMARC aggregate report arrives daily from every receiving domain that processes mail from your sending infrastructure. It tells you which sources are sending mail on behalf of your domain, whether they are passing or failing DMARC, and whether they are aligned.

This is where DMARCFlow changes the workflow. Manually reviewing aggregate reports at scale is slow. A report from a large mailbox provider can contain thousands of source IPs. Most of them are passing. Finding the handful that are failing and understanding whether each one is a spoof or a legitimate misconfiguration requires parsing the data, not just receiving it. DMARCFlow processes these reports automatically and surfaces the failures that need attention, along with context about whether each source is new or has been consistently failing.

Look specifically for:

  • Marketing automation platforms that send from their own infrastructure but use your From address
  • CRM tools that relay through third-party mail servers
  • Internal mail systems that forward externally
  • Legacy cloud services that were set up before DMARC existed
  • Subdomain usage where the parent domain sends mail on behalf of subdomains

If any of these are present and important, they need to be resolved before you tighten policy. Resolving them means either aligning them properly or accepting that they will be blocked once p=reject is enabled.

Step 2: Fix the alignment problems you can resolve

Most alignment failures come down to two causes: SPF alignment problems and DKIM alignment problems.

SPF alignment fails when the RFC5321.MailFrom domain does not match the RFC5322.From domain. This is common with third-party mail services that send from their own mail servers but use your domain in the From header.

The fix: use a custom SMTP domain with your provider so the MailFrom matches your From domain. Most major providers support this. It is usually in the domain settings under sending domain or SMTP configuration.

DKIM alignment fails when the signing domain does not match the From domain. This happens when a service signs with its own domain instead of yours.

The fix: configure the service to sign with your domain rather than their default. This requires access to your DNS to add the DKIM record the vendor provides.

After making any changes, wait one or two aggregate report cycles to confirm the failures are resolved before proceeding.

Step 3: Move to p=quarantine and watch for two weeks

Update your DNS record:

v=DMARC1; p=quarantine; rua=mailto:your-reports@yourdomain.com; pct=25; ri=86400

pct=25 tells receivers to apply quarantine to only 25 percent of failing messages. This is your safety brake. If something is still misaligned, only a quarter of affected users see problems. You catch it in the reports before it becomes a full incident.

During this period, DMARCFlow monitors for new failing sources as they appear. A new source after you have started tightening policy often means a business unit connected a service without telling IT. Catching it in the quarantine phase is far better than catching it after p=reject is fully enabled.

Watch for two things in your aggregate reports during this period:

1. Are any legitimate sources still failing? If yes, resolve them before proceeding. 2. Are new sources appearing that were not in the p=none data? If yes, investigate before they become incidents.

If the reports look clean at 25 percent, move to 50 percent, then 100 percent over the following week. Each step is a checkpoint.

Step 4: Move to p=reject in stages

Once p=quarantine is clean, update the record:

v=DMARC1; p=reject; rua=mailto:your-reports@yourdomain.com; pct=25; ri=86400

Again, start at 25 percent. Many administrators skip this and go straight to 100 percent. That works fine until it does not. A configuration change can happen overnight at a vendor you forgot about. Staged rollout catches this.

If no failures appear at 25 percent for a few days, increase to 50 percent, then 100 percent.

Step 5: What to do when something breaks after p=reject

Despite your best preparation, something will occasionally slip through. A business unit spins up a new service. An acquisition brings a mail system you did not know about. A vendor changes their sending infrastructure.

When mail stops flowing and users complain, the first move is not to revert to p=none. It is to check your aggregate reports and identify the source. In almost every case, the fix is faster than reverting policy.

Common causes of post-reject failures:

  • A new marketing or CRM platform was connected without DMARC review
  • A legacy system was updated and now sends from a different IP with a different MailFrom domain
  • An acquisition or merger brought a mail system that sends as your domain
  • A distribution list forwards mail externally in a way that breaks alignment

Once you identify the source, you have two options: fix the alignment or create a subdomain specifically for that use case and exclude it from your DMARC policy with a separate _dmarc.yoursubdomain record set to p=none.

DMARCFlow is designed for this ongoing phase. The upgrade from p=none to p=reject is not a one-time DNS change. It is an ongoing operational process that continues after you reach full enforcement. New senders appear, vendor configurations change, acquisitions bring unfamiliar infrastructure. DMARCFlow monitors continuously so you catch these changes in the reports, not in user complaints.

FAQ

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

At minimum, two weeks. Longer if your environment is complex or you have many third-party senders. The goal is to capture at least one full report cycle from every legitimate sender. Some senders only send weekly or monthly.

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

You can, and many organizations do. The risk is that misaligned legitimate mail is blocked immediately without you knowing. If you skip p=quarantine, start at pct=25 or pct=10 in your p=reject record rather than pct=100.

What causes the most DMARC failures during the transition?

Forwarding is the most common cause that surprises administrators. When a mail server forwards a message, it typically rewrites the envelope sender, which breaks SPF alignment. This is why genuine forwarded mail often fails DMARC at p=reject even when it came from a legitimate source.

Third-party marketing platforms that send from their own infrastructure are the second most common cause. They are legitimate senders but they do not use your domain in their RFC5321.MailFrom, so they fail alignment by design.

What does DMARC reporting actually tell me?

DMARC aggregate reports tell you which IP addresses are sending mail that claims to be from your domain, what percentage of those messages pass or fail DMARC checks, and whether the failures are due to SPF, DKIM, or alignment. They do not tell you the content of messages or who received them.

If I set p=reject, can third-party services still send mail as my domain?

Only if they are properly aligned. A service that signs with your DKIM domain and sends from an IP covered by your SPF record can still send as your domain at p=reject. Services that send from their own infrastructure with their own signing domain will be blocked.

What is the difference between DMARC alignment and DMARC authentication?

Authentication is the check that SPF or DKIM passed. Alignment is the check that the authenticated domain matches your From domain. A message can pass SPF or DKIM authentication but still fail DMARC because the authenticated domain does not align with the sender domain shown to users.