Blog · Dmarc

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

Why p=none Is Just Monitoring, Not Protection

When your DMARC record has a policy of p=none, receivers do nothing with emails that fail DMARC alignment. They deliver them normally. Your record tells the world "I am watching, but do not take action on my behalf." That is useful for collecting data. It is not a security setting.

p=reject is different. Receivers that see a DMARC fail on a message with p=reject policy will silently drop that message. Nothing bounces back to the sender. The message simply disappears from the recipient's inbox. This is what makes p=reject powerful against spoofing. It is also what makes moving from p=none to p=reject a process that requires preparation.

The goal is not to flip a switch. The goal is to reach a state where every legitimate sending source passes DMARC alignment, so that when you flip the switch, nothing real gets dropped.

What Aggregate Reports Actually Tell You

DMARC aggregate reports arrive daily from receivers that process mail on your behalf. They are XML files, but they tell a human story once you know where to look.

The key fields are:

  • Source IP: the server that sent the email
  • Count: how many messages from that IP
  • SPF result: pass or fail
  • DKIM result: pass or fail
  • Alignment result: aligned or misaligned

A passing result means the sending source is properly configured. A failing result means something is wrong with how that source sends mail, or with your DNS records.

Most aggregate reports also include an envelope-from and header-from domain. When those two domains match, you have "aligned" authentication. When they do not match, you have a misalignment that will cause failures under p=reject.

You do not need to parse XML manually. Tools like DMARCFlow ingest these reports and present the human-readable summary. But knowing which fields matter helps you ask better questions of whatever tool you use.

Classifying Your Sending Sources

Before you fix anything, you need to know what you are looking at. Every sending source in your aggregate reports falls into one of four buckets:

Legitimate aligned - sources that send mail from infrastructure you control and that pass both SPF and DKIM with aligned domains. These are your primary senders: your mail servers, your CRM platform, your helpdesk. They should pass today and continue passing tomorrow.

Legitimate misaligned - sources that send real business email but use their own infrastructure instead of yours. A third-party email vendor sending on your behalf from their own servers falls here. So does a legacy SMTP relay that has not been updated to use your domain. These are the most common source of false failures under p=reject.

Third-party relay - services like mailing lists, forwarded email, or forwarding chains that forward mail on behalf of your domain. These often fail DMARC because forwarding breaks the SPF envelope-from and DKIM signature alignment. Some support ARC (Authentication Results Comment) which helps receivers understand the forwarding chain, but ARC is not yet universally deployed.

Unknown - sources that appear in your reports but that you cannot identify. This is the bucket that requires investigation. An unknown source might be a shadow IT system, an old campaign platform someone forgot to decommission, or a genuine spoofing attempt.

The Three Failure Patterns That Break Mail When You Move to reject

Most migration failures come from one of three root causes. Each has a different fix.

Pattern 1: Missing SPF on subdomains

If your root domain has an SPF record but your subdomains do not, any source that sends from a subdomain will fail SPF. When those subdomains are used by legitimate services like CRM platforms or marketing automation tools, you will lose that mail under p=reject.

Example: your root domain example.com has v=spf1 include:servers.example.com ~all. A vendor sends from marketing.example.com, but that subdomain has no SPF record. The vendor's server is not in your SPF record, so SPF fails for marketing.example.com. Under p=reject, that vendor's mail gets dropped.

Pattern 2: Third-party relay alignment

Services that send bulk email on your behalf often send from their own infrastructure with their own DKIM keys. If their DKIM selector uses their domain rather than yours, DMARC alignment fails even if DKIM itself passes.

Example: you use SendGrid. SendGrid signs outgoing mail with its own DKIM key. If the selector is sendgrid.net rather than yourdomain.com, DKIM passes but alignment fails. The mail fails DMARC. Under p=reject, it disappears.

Pattern 3: Forwarding chains

Email forwarding rewrites the envelope-from and can strip DKIM signatures. A message that passes DMARC at the first receiver may fail at the forwarded destination. This is particularly problematic with legacy forwarding setups that do not support ARC.

Fixing Them in Order: A Practical Sequence

Once you have classified your sources, work through them in this order:

Step 1: Fix subdomain SPF gaps

Add SPF records for every subdomain that sends mail. If a subdomain does not send mail, make sure it has an explicit SPF record of v=spf1 -all so it cannot be used to spoof your domain. Tools like DMARCFlow can flag subdomain SPF gaps automatically as part of your regular report monitoring, so you do not have to audit subdomains manually before every policy change.

Step 2: Enforce DKIM alignment with third-party senders

For vendors sending bulk mail, check whether they support custom DKIM selectors on your domain. Many modern email service providers allow you to configure DKIM keys on your own domain, which means alignment passes. If your vendor does not support this, consider moving to a provider that does, or implement a custom DKIM selector on your domain for that vendor's traffic.

Step 3: Identify and document forwarding chains

If your aggregate reports show failing sources that are clearly forwarding chains rather than direct sends, document these and assess whether the forwarding relationship is intentional and necessary. If it is, consider using a subdomain with a less strict DMARC policy (p=quarantine or even p=none) for those specific forwarding use cases.

Step 4: Remove unknown sources from production

Unknown sources in your aggregate reports need to be traced. Check with your IT team, marketing department, and any external agencies before assuming they are spoofing. If a source is genuinely unidentifiable and appears to be a shadow IT system, shut it down or bring it under proper management.

Step 5: Validate with a test domain before moving production

If you manage multiple domains, use the domain with the cleanest sending profile to test p=reject first. This gives you a controlled environment to observe what actually breaks when the policy is enforced.

How Long Should You Stay at p=none?

There is no universal answer. The right duration depends on how much mail you send, how many sending sources you have, and how quickly you can fix failures.

Most organisations need at least four to eight weeks at p=none to collect enough data for a representative picture. If you have seasonal sending patterns, you need at least one full seasonal cycle in your aggregate reports before you move to p=reject. If you send a monthly newsletter, eight weeks is not enough to see that newsletter appear in your reports.

A practical readiness checklist:

  • You have zero unknown sources in your aggregate reports for at least two consecutive reporting periods. Continuous monitoring tools like DMARCFlow flag new sources as they appear rather than waiting for manual review.
  • Every legitimate sending source appears in your SPF record, or uses aligned DKIM on your domain
  • Your subdomain sending sources are documented and have appropriate SPF records
  • You have tested p=quarantine (p=quar) as a staging policy and observed the failure rate
  • Your IT team has a rollback plan in place

Flipping the Switch: What to Watch in the First 24 Hours

When you change your DMARC policy to p=reject, start watching immediately. The most common issues surface within hours, not days.

Set up real-time alerting so that when a DMARC failure triggers under your new policy, you know about it before affected users start filing tickets. Your aggregate reports will not arrive until the next day, so real-time failure reporting is your only early warning system. DMARCFlow surfaces failures from incoming reports as they arrive, rather than waiting for the next daily digest, which means you can catch a new misconfigured source within hours instead of the next morning.

The first 24 hours, watch for:

  • Complaints from internal teams about missing expected emails
  • Bounce notifications (if any) from receivers that do not fully honor p=reject and send a rejection notice anyway
  • Authentication failures logged by your email service providers

If something breaks, the fix is usually fast: you identified the source during your p=none phase, so you know exactly which sending source is misconfigured. You can move back to p=none, fix the issue, and move forward again.

p=reject is not a permanent lock. You can step back to p=quarantine or p=none while you resolve issues. Treat it as a controlled experiment with a fast rollback.

Frequently Asked Questions

Can I move straight to p=reject without a monitoring period?

You can, but you will likely break mail. If you have a small domain with only your own mail servers as sending sources, and you have verified they pass DMARC alignment today, you might be able to move quickly. For any domain with third-party senders, multiple subdomains, or legacy infrastructure, the monitoring period is worth the time.

What if I have marketing automation that sends from my domain?

Check whether your marketing platform supports custom DKIM selectors on your domain. If yes, configure it before moving to p=reject. If no, use a subdomain with a separate, less strict DMARC policy for marketing sending. Keep your primary domain at p=reject while your marketing subdomain is at p=quarantine or p=none.

What if a vendor refuses to fix their DKIM alignment?

If a vendor cannot or will not sign with your domain, you have three options: move that communication to a different vendor, route that vendor's mail through a relay that can DKIM-sign on your behalf, or accept that mail from that vendor will fail DMARC and be rejected under p=reject. The last option is only acceptable if that vendor's mail is not business-critical.

How do I know if a failure is spoofing or a legitimate misconfiguration?

Look at the source IP in your aggregate report. If the IP belongs to a service you recognise or that resolves to a domain you know, it is likely a misconfiguration. If the IP is from an ISP range or a hosting provider you do not recognise, it may be spoofing. Correlate the source IP with your own sending records to confirm.

What does DMARCFlow do in this process?

DMARCFlow automates the parts of this process that are tedious and error-prone when done manually. It parses your aggregate reports, identifies failing sources, classifies them by risk, and tracks subdomain SPF gaps over time. When you are considering a policy change, DMARCFlow can model what would break under p=reject based on your current sending profile, rather than waiting for failures to surface after the switch.

This matters because aggregate reports arrive with a delay. By the time you see a failure in a report, it may have been happening for 24 hours. DMARCFlow flags failures as they appear in incoming reports, which gives you a head start on fixes before you make the policy switch.