Blog · Dmarc

What Breaks When You Move to DMARC p=reject: The Forgotten-Sender Trap

What actually breaks when you switch DMARC to p=reject

You changed your DMARC policy from p=none to p=reject. Your email is broken. Legitimate messages from real senders are bouncing or disappearing.

This is not a DMARC bug. It is the intended behavior.

When p=reject is active, any email that fails DMARC alignment is rejected at the receiving server. The problem is that some legitimate senders fail DMARC alignment without anyone noticing until enforcement starts. These are the forgotten senders.

A forgotten sender is any third-party system that sends email using your domain but with a return path, DKIM signature, or both that do not align with your From address. They have always been sending on your behalf. p=none let them through because it only monitors, never blocks. p=reject does not give them that allowance.

The result is visible in your DMARC reports within days of switching: a list of failing sources you did not know existed.

Why alignment is the actual problem

DMARC checks two things: that the sending server is authorized via SPF, and that the email is signed with a valid DKIM key for the sending domain. But the critical check is alignment.

For DMARC to pass, the domain in the From header must align with either the domain in the SPF check (the envelope return path) or the domain in the DKIM signature. If neither aligns, the email fails DMARC regardless of whether SPF or DKIM individually passes.

This is where forgotten senders break. A marketing platform that sends confirmation emails from your domain might use its own servers for sending, making the SPF check pass for its domain, not yours. If the DKIM signature is also signed by the marketing platform rather than your domain, both checks fail alignment and p=reject rejects the mail.

It is not that the sender is unauthorized. It is that the sender is not claiming your domain in a way DMARC can verify.

The forgotten-sender taxonomy

Forgotten senders usually fall into a small number of categories.

Marketing automation platforms that send from their own infrastructure using your domain in the From header. These are among the most common forgotten senders. Examples include email marketing tools, event registration systems, and customer onboarding platforms that send branded notifications. They often sign with their own DKIM key, not yours.

CRM and help desk tools that relay transactional email through third-party servers. Many SaaS tools offer "custom domain" email sending but default to their own infrastructure unless explicitly configured.

Internal IT systems that relay mail through servers with different return paths. Printers that send scan-to-email, legacy applications that send alerts, and scheduled reporting tools are frequent offenders.

Inherited or acquired domains from company mergers. These often have their own email infrastructure with misaligned authentication, and nobody audits them until DMARC reports surface the problem.

Legacy bulk mail services that were set up years ago and never touched since. The vendor may have changed their sending infrastructure without updating your SPF records or DKIM keys.

How to find forgotten senders before switching to p=reject

The only reliable way to find forgotten senders is to read your DMARC aggregate reports while still at p=none.

Aggregate reports arrive daily from every major mailbox provider that enforces DMARC. Each report contains a line for every sending source that attempted delivery to their users. Most reports are XML files, which are machine-readable but not human-friendly.

What you are looking for in the reports:

  • Any row where the DKIM result is "fail" and the signature domain does not match your domain
  • Any row where the SPF result is "pass" but the envelope domain is not yours
  • Any row with high volume from a source you do not recognize by IP or domain

The DMARC specification requires aggregate reports to include the sending IP, the result (pass or fail), and the DKIM and SPF domain selectors. A five-minute scan of a report usually surfaces at least one surprise sender that nobody on the team knew was sending from your domain.

Parsing XML aggregate reports manually is slow and error-prone. Teams that rely on DMARCFlow to surface failed senders automatically find the forgotten-sender inventory significantly faster than those who review raw XML. The practical benefit is straightforward: you see the list of who is failing and why, without building your own report parser first.

If you are not receiving aggregate reports, that is the first problem to fix. Without reports, you are switching to p=reject blind.

Transition checklist

Before you change your DMARC record to p=reject, work through this sequence.

  • Confirm you are receiving DMARC aggregate reports from all major senders. At minimum, check that Google, Microsoft, and Yahoo are sending you reports.
  • Review at least four consecutive weeks of reports. One week's data is not enough; some senders, like monthly billing systems, may only appear once.
  • List every row where the aligned authentication result is "fail." This is your candidate list.
  • For each candidate, identify the sender. Check with your internal teams before assuming a sender is unauthorized. Some senders are authorized by policy but misconfigured.
  • Fix the misaligned senders. The right fix depends on the sender: configure the platform to use your DKIM key, update the SPF record to include the sending infrastructure, or switch to a dedicated sending domain that aligns with your policy.
  • Wait for the next report cycle. Confirm the failures drop to zero for all known senders.
  • Switch to p=reject. Start with a small percentage using the "pct" tag if your DMARC record supports it, then remove it once you are confident.
  • Monitor the first two weeks of p=reject reports carefully. New failures will appear in production that did not appear in testing if your pre-switch review was incomplete.
  • Emergency remediation if you already switched and mail is breaking

    If you switched to p=reject and legitimate mail is now failing, do these steps in order.

    First, check whether the failure is actually a DMARC alignment issue and not something else. Look at the sending logs and compare them to your DMARC aggregate reports. If the failing messages match the sources listed in your reports as alignment failures, DMARC is the cause.

    Second, consider rolling back to p=none temporarily while you investigate. The damage of a brief rollback is usually smaller than the damage of missing legitimate email for days.

    Third, work through your list of failing sources and contact each sender. Most SaaS platforms have documentation for setting up custom DKIM or SPF. Some platforms cannot be fixed quickly; for those, you may need to route their mail through a relay that you control and authenticate properly.

    Fourth, do not use p=quarantine as a long-term fix for misaligned senders. Quarantine makes failed mail go to spam instead of being rejected. The senders are still misaligned, and you are still accumulating failures in your reports.

    Fifth, if you cannot fix a sender quickly, use a subdomain dispatch approach: move that sender to a subdomain with its own DMARC policy, keeping your main domain at p=reject. This protects your main domain while you work on the fix.

    FAQ

    Does p=none allow all email through?

    p=none does not allow or block anything. It is a monitoring-only mode. Mail that would fail DMARC still gets delivered when your policy is p=none. The mailbox provider makes the accept or reject decision independently. p=none simply tells mailbox providers not to apply DMARC enforcement on your behalf and asks them to send you reports.

    Can I use p=quarantine instead of p=reject?

    You can, but it does not fix the underlying alignment problem. Misaligned senders will still fail DMARC when your policy is p=quarantine; their mail will go to spam instead of being rejected. Treat p=quarantine as a staging step on the way to p=reject, not as a permanent solution.

    How long should I stay at p=none before switching?

    A minimum of 30 days is the standard recommendation, with 60 to 90 days being more appropriate for domains with complex sender ecosystems. The goal is to capture at least one full cycle of every sender, including those that send monthly or quarterly. If your reports show zero new failing sources over two consecutive 30-day periods, you are likely ready to switch.

    Who are the most common forgotten senders?

    Marketing automation platforms are the most common. CRM systems, event registration tools, and customer onboarding platforms that send branded email from their own infrastructure also frequently appear. Internal systems like network printers, legacy alert tools, and scheduled report generators are the second most common category.

    Should I switch to p=reject all at once or gradually?

    Gradually where the mail system supports it. The DMARC "pct" tag lets you apply p=reject to a percentage of traffic while monitoring the rest. This is useful for catching residual failures that did not appear in your pre-switch reports. Not all mailbox providers respect the pct tag, so do not rely on it as your sole safety mechanism. It is a supplement to monitoring, not a replacement for it.