Blog · Dmarc
Why Your Email Passes SPF and DKIM But Still Fails DMARC
Why Your Email Passes SPF and DKIM But Still Fails DMARC
The Paradox: All Three Checks Pass, But the Email Fails
You have checked everything. Your SPF record covers your sending servers. Your DKIM signature is signing correctly. Your DMARC record is published and looks right. A third-party DMARC checker confirms all three records are valid.
Then an email lands in spam at one receiver but arrives cleanly at another. Or worse - a receiver reports your email as failing DMARC even though your tools show all three checks passing.
The first place to look when this happens is your DMARC aggregate report - it shows which specific receiver is failing your messages and why. DMARCFlow collects these reports automatically and surfaces the alignment failures per receiver, so you can see exactly which check is failing at which provider without manual XML parsing.
The reason is almost always the same: passing SPF and DKIM is not the same as passing DMARC alignment.
DMARC requires two things to pass. First, at least one of SPF or DKIM must individually verify. Second, that verified SPF or DKIM result must align with the domain shown in the message's From header. If the domains do not match, DMARC fails - even when every individual check is green.
Authentication Pass vs. Alignment Pass
Here is the distinction that trips up almost every practitioner who runs into this problem.
SPF pass means a sending server is authorized to send email for the domain specified in the RFC5321.Mailfrom envelope. That domain is not always the same as the From header address your recipients see.
DKIM pass means a cryptographic signature tied to a selector domain was verified. That selector domain is also not always the same as the From header address.
DMARC alignment pass means the domain that passed SPF or DKIM is the same as - or a registered subdomain of - the domain in the From header (RFC5322.From).
Put another way: SPF and DKIM check whether a server or signature is authorized. DMARC checks whether the authorized sender is allowed to send on behalf of the From address.
This distinction matters because most email sending infrastructure does not send from the same domain that appears in the From header.
Four Scenarios That Break Alignment Even When SPF and DKIM Pass
1. The RFC5321.Mailfrom Does Not Match the From Header
This is the most common cause. Many platforms send bounce messages and transactional email using a generic noreply address or platform-level sending domain that differs from your branded From address.
Example: Your From header reads support@yourdomain.com but your sending infrastructure uses an RFC5321.Mailfrom of bounce@send.yourplatform.com. If your SPF record covers send.yourplatform.com but not yourdomain.com, your SPF check passes - but your alignment fails because the From header domain does not match.
2. DKIM Signs the Wrong Domain
If your DKIM selector is configured to sign a subdomain or a third-party domain rather than your exact From header domain, DKIM can pass without helping your DMARC alignment.
Example: Your From header is hello@yourdomain.com. Your DKIM selector is configured at selector._domainkey.yourplatform.com - a different domain entirely. The signature verifies, but DMARC alignment fails because the signed domain does not match yourdomain.com.
3. Forwarded Mail Breaks the Chain
When your email is forwarded by a recipient's mail system, the forwarded copy often loses its original authentication context. The forwarding server may rewrite the envelope, add headers, or modify content in ways that invalidate the original SPF or DKIM results.
This is one reason forwarded mail frequently lands in spam or gets flagged by DMARC, even when the original message was fully authenticated. The receiving server at the forwarding step has no reason to trust authentication results from the original sender's infrastructure.
4. Subdomain Sending Without Proper Alignment
If your From header shows noreply@mail.yourdomain.com but your DMARC policy is published on yourdomain.com, alignment requires that the authenticated domain - mail.yourdomain.com - is a subdomain of the From domain yourdomain.com. This usually works with p=quarantine or p=reject policies if alignment is set to relaxed. But if alignment is strict, only an exact match passes.
Many organizations hit this when they use subdomains for different sending channels without checking whether their DMARC policy accounts for those subdomain variants.
Why Different Receivers Make Different Calls
Beyond the alignment mechanics, different receivers apply their own policies on top of what DMARC specifies.
A message can technically pass DMARC but still get quarantined because:
- The receiver's internal reputation score for the sending IP is low
- The content matches patterns the receiver associates with spam
- The receiver applies additional DMARC-like checks that go beyond the RFC
This is also why a message can pass DMARC at Gmail but fail at a stricter corporate mail gateway. The gateway may apply p=reject strictly, while Gmail's algorithm is more nuanced and weighs reputation alongside authentication results.
This is not a bug in DMARC. The standard defines authentication and alignment. What happens after authentication is at each receiver's discretion.
How to Diagnose Which Receiver Is Failing and Why
The DMARC aggregate report is the definitive diagnostic tool. When you implement DMARC reporting, participating receivers send you daily XML files that show:
- How many messages they received from your domain
- How many passed or failed DMARC and why
- Which sending IPs sent the mail
- Whether SPF or DKIM aligned
If you see failures from a specific receiver but not others, the aggregate report breaks down exactly which alignment check is failing at that provider.
Without aggregate reports, you are guessing. With them, you have evidence.
This is where DMARCFlow becomes directly relevant to this problem. Aggregate reports arrive as XML from multiple receivers, in different formats, on different schedules. DMARCFlow collects those reports automatically, parses them, and surfaces alignment failures per receiver in a structured view. For the specific scenario of SPF and DKIM passing but receivers disagreeing, the aggregate report is the only way to see which provider is failing your alignment checks and whether the failure is in SPF alignment, DKIM alignment, or something else entirely. Most practitioners who run into this problem have no visibility into their aggregate reports. DMARCFlow makes that data accessible without requiring manual XML parsing.
How to Fix Alignment Failures
Once you know which alignment check is failing, here is how to address each case:
For RFC5321.Mailfrom mismatches: Configure your sending platform to use your branded domain as the envelope sender. Many transactional email providers support custom Return-Path domains for this purpose. Set up an SPF record that covers your actual sending infrastructure for that domain.
For DKIM domain mismatches: Ensure your DKIM selector is configured to sign the exact From header domain, not a parent domain, subdomain, or third-party domain. If you use a third-party sending platform, they should either sign with your domain via custom DKIM configuration, or you should use their dedicated sending infrastructure with your own DKIM key.
For forwarded mail: Set up ARC headers on your outbound mail. ARC records the authentication state at each hop, so forwarding receivers can see that the original message was authenticated before modifications occurred. This does not guarantee delivery - it gives forwarders evidence to make a better decision.
For subdomain alignment issues: Audit every subdomain you send email from and ensure your DMARC policy at the parent domain uses relaxed alignment, or publish separate DMARC records for each subdomain with policies that match their sending behavior.
---
Frequently Asked Questions
Does passing SPF and DKIM mean my email will pass DMARC?
No. DMARC requires both an individual SPF or DKIM pass AND alignment between the authenticated domain and the From header domain. You can have both SPF and DKIM pass individually while still failing DMARC if the domains do not align.
Why does my email fail DMARC at some receivers but not others?
Receivers interpret authentication results through their own filtering layers. A message can technically pass DMARC but still be flagged based on reputation, content analysis, or policy decisions specific to that receiver. Different receivers also enforce DMARC policies with different levels of strictness.
What is the most common cause of alignment failure when SPF and DKIM pass?
The RFC5321.Mailfrom domain not matching the From header domain. Many sending platforms use a generic platform-level domain for the envelope while displaying your branded domain in the From header. This causes SPF alignment to fail even when SPF passes for the platform domain.
Can forwarded emails cause alignment failures?
Yes. Forwarded mail often loses its original authentication context. The forwarding server may rewrite the envelope or headers in ways that invalidate the original SPF or DKIM results, causing alignment failures at the final receiver.
What is ARC and how does it help?
ARC (Authenticated Received Chain) is an email authentication extension that records the authentication state at each hop in the delivery chain. It helps forwarded mail reach the intended recipient by giving downstream receivers evidence that the original message was properly authenticated before forwarding modifications occurred.
How do I see which receiver is failing my emails?
You need DMARC aggregate reports. These are XML reports that participating receivers send to the rua address in your DMARC record. They show per-receiver pass/fail counts and failure reasons. Without these reports, you cannot systematically diagnose which providers are failing your messages and why. DMARCFlow automates the collection and parsing of these reports, giving you a structured view of which receivers are failing alignment checks and whether the failure is in SPF alignment, DKIM alignment, or the alignment check overall.