Blog · Dmarc

Why DMARC Fails Even When SPF Passes

Your SPF record passes. Every sending IP is listed. Your DMARC report still shows failures. The reason is straightforward once you see what each test is actually checking.

Here is the core distinction: SPF validates whether the sending IP is authorized for the Return-Path domain. DMARC validates whether the From domain aligns with that same Return-Path domain. They are two separate checks. A message can pass one and fail the other.

If you are using DMARCFlow or any other monitoring tool, this alignment gap is exactly what aggregate reports are designed to surface. Most organizations discover the problem only after mail starts bouncing.

What SPF Actually Checks

SPF checks the Return-Path domain against the sending server IP address. The Return-Path domain is the bounce address, set by the delivering mail server. When a message passes through a marketing platform, CRM, or any relay, the Return-Path gets rewritten to point to that service's domain, not your From domain.

If the sending IP is in your SPF record, SPF passes. If it is not, SPF fails. Simple enough.

The SPF check says nothing about whether the From domain and the Return-Path domain have anything to do with each other.

What DMARC Actually Checks

DMARC adds the alignment check. It asks whether the From domain matches the Return-Path domain (via SPF) or the DKIM signing domain.

Relaxed alignment allows a subdomain match. Strict alignment requires an exact domain match.

A message that passes SPF because the sending IP is authorized does not automatically pass DMARC alignment. The domains must also match. When they do not, DMARC fails.

The Three Scenarios Where SPF Passes But DMARC Fails

Third-party senders breaking alignment

When you route outbound mail through a marketing platform, the platform typically sets its own domain in the Return-Path. Your SPF record may include the platform's sending IPs, which makes SPF pass. But the Return-Path domain is platform.yourprovider.com, not yourdomain.com. DMARC sees two different domains and fails alignment.

This is one of the most common causes of DMARC failures for organizations that use third-party email services. The fix is either DKIM signing through the ESP with your domain key, or routing all ESP traffic through a subdomain with its own DMARC policy.

Shared sending infrastructure

Bulk email providers, some CRM platforms, and shared relay services host multiple customers on the same sending infrastructure. Each customer's messages may carry a generic Return-Path from the platform rather than the customer's own domain.

The IP is authorized under your SPF record. The Return-Path is not yours. DMARC alignment fails.

Mailing lists and forwarding services

When a mailing list forwards your message, it rewrites the Return-Path to its own domain for bounce handling. Your original SPF record no longer applies to the forwarded message. The receiving server sees the list's domain in Return-Path, not yours. DMARC alignment fails.

Forwarding-related failures are unavoidable in some scenarios. The mitigation is to publish a policy that accounts for forwarding or to rely on DKIM rather than SPF alignment for forwarded mail.

How to Diagnose Alignment Failures in Your DMARC Report

Your DMARC aggregate report (RUA) tells you exactly what is failing. In each record, look at the auth_results section. When SPF passes but aligned_spf shows fail, the sending IP is authorized but the Return-Path domain does not match your From domain. When DKIM passes but aligned_dkim shows fail, the message was signed but the signing domain does not match your From domain.

The report source IP identifies which sending system is causing the failure. A spike in alignment failures from a specific IP usually means a new third-party sender was added to your infrastructure without proper DKIM configuration.

DMARCFlow aggregates these reports continuously and flags failures within minutes of receipt, rather than waiting for bounce notifications to surface the problem.

How to Fix DMARC Alignment Failures

Option 1: DKIM signing through your ESP

If your email service provider can sign outbound mail with your domain's DKIM key, DKIM alignment can pass where SPF alignment fails. DKIM signatures are attached to the message itself, independent of the sending IP or Return-Path domain. This is the most reliable fix for organizations that depend on third-party senders.

Option 2: Subdomain isolation for third-party senders

Route all third-party sender traffic through a subdomain like marketing.yourdomain.com. Publish a separate DMARC record for that subdomain with a relaxed alignment policy set to p=quarantine or p=none for the transition period. Keep your main domain at p=reject once you have confirmed no breakage.

Option 3: Include the ESP in SPF properly

This only works if the ESP uses your domain in the Return-Path. Many platforms do not support custom Return-Path domains on shared infrastructure. If yours does, adding the include to your SPF record still leaves alignment as the problem unless the Return-Path domain matches your From domain exactly.

How DMARCFlow Fits Into This

DMARCFlow is not an authentication mechanism. It is a monitoring layer that sits on top of your DMARC reports and catches alignment failures before they become bounced mail.

The practical benefit for this specific problem: when you add a new third-party sender to your infrastructure, DMARCFlow alerts you to the alignment failures within minutes. Without it, you find out when the first recipient mail server starts rejecting your messages and your support inbox fills up.

For organizations planning a migration from p=none to p=reject, DMARCFlow provides the discovery phase. You get a complete inventory of every sending source touching your domain, including any misconfigured third-party services that will break under a strict policy.

The Bottom Line

SPF and DMARC check different things. SPF verifies the sending IP is authorized for the Return-Path domain. DMARC verifies the From domain and Return-Path domain are aligned. A third-party sender can satisfy SPF while breaking DMARC alignment, and the fix is almost always DKIM-based rather than SPF-based.

Before moving to p=reject, run your domain through a monitoring phase. Find every sending source, every ESP, every forwarding service. Make sure each one passes alignment through DKIM or is covered by a subdomain with its own policy. Only then is p=reject safe to deploy without surprise breakage.