Blog · Dmarc

Why Safe Sender Lists Can Override Your DMARC p=reject Policy (And What to Do About It)

DMARC p=reject tells the receiving mail server to refuse delivery of messages that fail authentication. When a message arrives and fails DMARC alignment, the MTA (mail transfer agent) is supposed to reject it at the SMTP level.

That enforcement happens at the MTA -- before the message reaches the mailbox or the email client. It is a server-level decision.

Now consider what happens when a user adds a sender to their safe sender list in Outlook, or when an Exchange administrator creates a transport rule that routes certain messages to the inbox regardless of spam verdicts. These are also server-level or client-level decisions, but they operate on a different axis. They can override the outcome that DMARC established.

This is the gap that surprises many teams who deploy p=reject and then still see suspicious messages delivered. Organizations using DMARCFlow typically spot these gaps first through the aggregate report dashboard, where delivery outcomes that should not exist often become visible before anyone reports the problem.

A safe sender list in an email client like Outlook or Thunderbird tells the client's local spam filter to treat those senders as trusted. It does not send any instruction to the MTA and it does not change what the receiving mail server decided to do with the message.

The MTA already delivered the message. It either delivered it to the inbox or to the spam folder. The client's safe sender list then tells the client to move messages from that sender out of spam and into the inbox.

The practical consequence: if the MTA delivered a non-aligned message to the spam folder because the domain's DMARC policy is p=reject, but the receiving infrastructure overrode that delivery decision for other reasons, the safe sender list can still pull that message into the inbox.

The deeper problem is that client-side safe sender lists are invisible to DMARC reporting. Your aggregate reports will show the delivery outcome, but they will not tell you whether a safe sender list or a transport rule altered the final placement.

In Microsoft Exchange Online and on-premises Exchange, transport rules run during the message transport pipeline. Some of these rules can apply spam verdicts or change message routing before DMARC evaluation is complete, or they can override the verdict that DMARC enforcement would otherwise produce.

The most common scenarios:

Transport rules that set spam confidence level (SCL): A rule that assigns SCL = -1 (bypass spam filtering) effectively tells Exchange to deliver the message regardless of what the spam filter or DMARC policy would otherwise decide.

Anti-spam policy allow entries: When an administrator adds a sender domain to the allow list in Exchange Online anti-spam policies, messages from that domain bypass spam filtering. This bypass is evaluated separately from DMARC. If the domain is not aligned, DMARC reports will show the failure, but the message still arrives.

Spoof intelligence in Defender for Office 365: Microsoft Defender's spoof intelligence feature allows administrators to configure "allowed spoofed senders" based on senders that are deemed trustworthy. This is a deliberate override of the anti-spoofing protection that DMARC provides. When a sender is on this list, messages from that sender bypass spoofing blocks even when they fail DMARC alignment.

The pattern here is consistent: DMARC p=reject works at the MTA level, but it is one layer in a stack of filtering decisions. Other layers can override it.

For example, suppose finance@contoso.com receives a message from attacker@contoso-real-looking.com. The sending domain fails DMARC alignment. The MTA would normally reject it under p=reject. But if the Exchange administrator previously added contoso-real-looking.com to the anti-spam allow list to handle a vendor migration last quarter, the message arrives in finance's inbox before the DMARC failure is ever evaluated as a block.

DMARC aggregate reports (RUA) tell you whether messages passed or failed DMARC alignment, and where they were sent. They do not tell you whether a safe sender list, a transport rule, or a spam verdict override caused a non-aligned message to reach the inbox anyway.

For example, you may see in your aggregate reports that a spoofed message from an attacker domain was delivered successfully. Your p=reject policy was not applied. The report shows "pass" on the sending side, but you still received the message in your inbox because an override was active on the receiving side.

This is one of the less-discussed gaps in DMARC reporting: the receiving infrastructure can deviate from the sending policy, and the sending domain only sees delivery success, not the filtering decision that produced it.

Aggregate reports also do not show why a message was delivered when it should not have been. Correlating delivery events with Exchange message tracing (available in the Exchange Admin Center) is the only reliable way to reconstruct what actually happened to a specific message.

Here is what to check in a Microsoft 365 environment:

Step 1: Review anti-spam policy allow entries

In the Microsoft Security portal, go to Email & collaboration > Anti-spam policies. Check the "Allowed Senders" and "Allowed Domains" lists. If any entries exist there, verify that each one is intentional and regularly reviewed. Remove anything that is no longer needed.

Step 2: Check transport rules for bypass conditions

In the Exchange Admin Center, go to Mail flow > Rules. Look for rules that:


  • Set SCL to -1 or bypass spam filtering

  • Route messages from specific senders directly to the inbox

  • Modify message headers or routing based on sender address

For each rule, ask whether the bypass is still justified. A rule created to handle a temporary vendor migration should be removed after the migration is complete.

Step 3: Audit Defender for Office 365 spoof intelligence

In Microsoft Defender, go to Email & collaboration > Policy & rules > Anti-phishing. Under "Spoofing," review the allowed spoofed senders list. Every entry there is a deliberate override of DMARC enforcement. Confirm each one is documented and reviewed quarterly.

Step 4: Use DMARC aggregate reports to identify anomalies

Look for patterns where aligned messages from a trusted domain suddenly show unusual volume spikes, or where non-aligned messages appear frequently from the same source. This can indicate that a third party is sending on behalf of your domain without proper authentication.

This is where DMARCFlow is useful. DMARC aggregate reports arrive as compressed XML, often hundreds or thousands of messages per day for larger organizations. DMARCFlow parses and visualizes these reports, making it easier to spot anomalies -- including delivery outcomes that do not match what your p=reject policy should be producing.

Setting DMARC p=reject is not the end of email security configuration. It is one layer in a stack that includes spam filtering, transport rules, anti-spoofing exceptions, and client-level settings. Each of those layers can override what DMARC enforcement would otherwise produce.

Auditing those layers regularly is the only way to know whether your p=reject policy is actually doing what you configured it to do. The gaps between sending policy and receiving infrastructure are where spoofing and BEC attacks succeed, and they are almost entirely invisible without deliberate investigation.

Does setting DMARC p=reject mean all non-aligned email goes to spam?

No. p=reject instructs the receiving MTA to refuse delivery, but transport rules, spam verdict overrides, and safe sender lists can all cause messages to be delivered regardless. p=reject is not the same as "all bad email is blocked."

Can a safe sender list in Outlook bypass DMARC p=reject?

The safe sender list does not bypass MTA-level DMARC enforcement. It bypasses the mailbox's local spam filter. If the MTA delivered the message to the inbox despite a DMARC failure, the safe sender list is not the cause. The MTA-level override is elsewhere in the stack.

What Exchange settings can override DMARC p=reject?

Anti-spam policy allow entries, transport rules that set SCL to -1, and Defender for Office 365 spoof intelligence allowed senders are the most common culprits. Each is configured independently of DMARC and can override its enforcement.

How do I correlate DMARC failures with actual Exchange delivery events?

Use Exchange Admin Center message tracing. Search by sender address and time range to see what transport rules and spam filtering decisions were applied to messages from that sender. Compare that with the DMARC aggregate report entry for the same message.

How often should I audit override settings?

At minimum quarterly. Any time you onboard a new email vendor, change your spam filtering configuration, or receive a report of a suspicious message that was not blocked, audit the relevant override settings immediately.