DMARC Fail: Why It Happens and How to Fix It

So a test result or a raw header just told you dmarc=fail, and the natural first reading is the scary one: some receiver thinks your email is fake. That is rarely the story. Nearly every DMARC failure I look at is legitimate mail that authenticated as the wrong domain. SPF vouched for the ESP instead of you. DKIM verified, but against a shared key. A forwarder rewrote one header too many. The message was real; the paperwork pointed at somebody else.

The one-sentence answer: DMARC fails when a message cannot show even one authentication check that both passes and matches the domain in your From header. The rest is diagnosis and repair: what the verdict is built from, the seven causes that keep showing up in spam test results, what fixes each one, and when to tighten your policy afterward.

You are in crowded company, for what it is worth. Across the checks run through Unspam, 93% of senders pass SPF and 90% pass DKIM, yet only 49% pass DMARC. No other link in the authentication chain fails half as often, and the list below is essentially the anatomy of that gap.

What dmarc=fail actually means

DMARC does not inspect content, links, or sending volume. It asks exactly two questions about a message claiming to be from yourbrand.com:

  1. Did SPF pass, and is the domain it passed for aligned with the From domain? SPF validates the envelope sender (the Return-Path address used during the SMTP conversation), which the reader never sees. Alignment means that hidden domain and your visible From domain match.
  2. Did DKIM pass, and is the signing domain (the d= tag in the signature) aligned with the From domain?

One aligned pass is enough. SPF can fail completely and DMARC still passes if an aligned DKIM signature verifies, and the other way around. No fact in this topic does more practical work than that single OR. It also explains why so many failures confuse people: both checks can pass individually while DMARC fails, because neither passed for your domain.

Four named DMARC scenarios: a broken DKIM signature still passes on an aligned SPF pass, forwarded mail still passes on an aligned DKIM signature, ESP defaults pass both checks for unaligned domains and fail DMARC, and spoofed mail failing both checks fails DMARC

DMARC never asks "did authentication pass?" It asks "did authentication pass for the domain the reader actually sees?"

By default, alignment is relaxed: any subdomain of the same organizational domain counts, so mail signed by mail.yourbrand.com aligns with a From of yourbrand.com. Your record can demand strict alignment (adkim=s, aspf=s), requiring an exact match, which is a deliberate hardening choice and a common self-inflicted failure, as we will see. For a deeper comparison of how the two underlying checks differ, see DMARC vs DKIM.

First, find out why yours is failing

Do not fix blind. Every DMARC verdict comes with the evidence attached, in three places.

Run a pre-send test. The free Unspam spam test authenticates the exact message you are about to send and shows the SPF, DKIM, and DMARC results side by side, including which domains each check evaluated, next to the SpamAssassin, blacklist, and content checks. This is the only route that catches the failure before a subscriber sees it.

Read the Authentication-Results header. On any delivered message, the receiving server writes its verdict into the headers. In Gmail, open a message and choose Show original; the summary at the top and the raw Authentication-Results line tell the whole story:

Anatomy of an Authentication-Results header showing a classic misconfiguration: SPF passes for the ESP bounce domain, DKIM passes signed by the ESP domain, and DMARC fails because neither passing domain matches the From domain yourbrand.com

This example is the single most common real-world failure. Both checks pass, and DMARC still fails, because bounce.esp-mail.com and esp-mail.com do not align with yourbrand.com. The header hands you the diagnosis: the domains after smtp.mailfrom= and header.d= are the ones that earned the pass, and neither is yours.

Read your aggregate reports. If your DMARC record includes a rua address, receivers email you daily XML summaries of every source that sent mail as your domain: the IPs, the volumes, and how each authenticated. Reports are the only way to see failures on mail that never crossed your desk, including forwarded copies and spoofing attempts.

Before touching anything else, also point the free DMARC checker at your domain to confirm the record itself is present and syntactically sane.

The seven reasons DMARC fails, and the fix for each

Nearly every dmarc=fail traces back to one of these. I have ordered them by how often they turn up in real test results, so work from the top down.

#CauseWhat the header showsFix in one line
1ESP authenticates as itselfspf=pass and dkim=pass for the ESP's domainsTurn on custom domain authentication
2Forwarding broke SPFspf=fail from an IP you don't own, dkim=passAlign DKIM; it survives forwarding
3Mailing list rewrote the messagedkim=fail (body hash mismatch)Nothing on your side; that is what ARC is for
4Strict alignment, subdomain senderpass for mail.yourbrand.com, fail on alignmentUse relaxed alignment or match exactly
5SPF permerrorspf=permerrorGet under 10 DNS lookups
6Broken DMARC recorddmarc=none or tools report no policyOne valid record on the _dmarc host
7Actual spoofingunknown IPs failing everythingNothing; DMARC is doing its job

1. Your ESP authenticates as itself, not as you

Out of the box, most sending platforms use their own infrastructure domains: the envelope sender is something like bounce.esp-mail.com so they can process your bounces, and the DKIM signature uses their shared key with their domain in d=. Both checks pass. For them. Your From domain gets no aligned pass, and DMARC fails exactly as the header above shows.

The fix is the setting every serious platform offers under a name like custom domain authentication, domain verification, or branded sending: you publish a few CNAME records they give you, and from then on messages are DKIM-signed as yourbrand.com (or a subdomain, which aligns under relaxed mode) and use a custom bounce domain like bounce.yourbrand.com for SPF alignment. Do DKIM first. An aligned DKIM signature alone flips DMARC to pass, even while the SPF side still points at the ESP.

2. A forwarder broke SPF

When someone auto-forwards your email (a university address forwarding to Gmail, an old domain forwarding to a new one), the forwarding server delivers it from its IP, which is not in your SPF record, so SPF fails. Forwarders that "fix" this by rewriting the envelope sender to their own domain make SPF pass again, but for their domain, which breaks alignment instead. Either way, the SPF lane is dead on forwarded mail, permanently and by design.

There is no patching SPF here; the repair is to stop needing it. A DKIM signature travels inside the message and verifies no matter which server relayed it, so a clean forward keeps an aligned dkim=pass and DMARC still passes. If your aggregate reports show a tail of SPF-only failures from mailbox providers' own IP ranges, that is forwarding, it is normal, and it is precisely why you should never publish an enforcing DMARC policy on the strength of SPF alignment alone.

3. A mailing list rewrote the message

Discussion lists are the harder cousin of forwarding: they typically add a subject tag like [members], append an unsubscribe footer, and resend from the list's own address. The footer and subject edits change the signed content, so your DKIM signature no longer verifies. The list's envelope breaks SPF alignment. Both lanes fail on mail that everyone involved wanted delivered.

Your options here are honestly limited, and I would rather say so than hand-wave. Modern lists mitigate the problem themselves, either by rewriting the From header to the list's domain (taking your domain out of the DMARC equation) or by adding an ARC seal that lets receivers vouch for the original authentication results. On your side: keep DKIM aligned so plain forwarding survives, and accept a small, harmless residue of list-related failures in your reports. If you run the list, enable its DMARC mitigation options.

4. Strict alignment when you need relaxed

If your record sets adkim=s or aspf=s, only an exact domain match counts: mail DKIM-signed by mail.yourbrand.com with a From of yourbrand.com passes relaxed alignment but fails strict. The pattern behind this one is always the same. A team enables strict mode as a hardening measure, forgets that the newsletter platform signs with a delegated subdomain, and manufactures its own failures.

Check whether your record carries adkim=s or aspf=s (the DMARC checker shows every tag). If the domains that legitimately send for you include any subdomain, either drop back to relaxed (delete the tag; relaxed is the default) or reconfigure the sender to sign with the exact From domain. Strict alignment is worth having only after your reports show a long, clean run with every source exactly matched.

5. SPF permerror: the ten-lookup limit

SPF records are evaluated with a hard budget: mechanisms that trigger DNS lookups (include, a, mx, redirect, exists) may not exceed ten in total, counted recursively through every nested include. Stack enough tools (an ESP, a CRM, a helpdesk, an old include nobody remembers), and evaluation aborts with permerror. A permerror can never become an aligned pass, so the SPF lane goes dark for every receiver, on every message.

Run your domain through the SPF checker, which counts the lookups for you, then remove includes for services you no longer use and consider consolidating or flattening the rest. While you are in there, make sure the record ends in ~all or -all; a +all tells the world anyone may send as you, which defeats the point of the whole authentication stack.

6. The DMARC record itself is broken

A surprising share of failures happen before any message is evaluated, in the DNS record:

  • Two DMARC records. Merging domains, or two teams each adding one, leaves multiple TXT records on _dmarc. The standard is unforgiving: receivers that find more than one record apply none of them.
  • Wrong host. The record must live at _dmarc.yourbrand.com, not at the root and not at dmarc. without the underscore.
  • Syntax slips. The record must start with v=DMARC1, tags are separated by semicolons, and rua addresses need the mailto: prefix. A typo like p=non invalidates the policy.

Paste your domain into the DMARC checker and repair what it flags. If you would rather not hand-assemble the string, the free DMARC record generator builds a valid one from dropdown choices.

7. Someone really is spoofing your domain

Once the six misconfigurations are ruled out, what remains in your aggregate reports (unknown IPs, often geographically improbable, failing both checks on volume you never sent) is DMARC doing its job: catching forgery. This is the failure you want.

The only fix to apply here is restraint: do not loosen your policy because the reports look scary. Confirm the sources are not yours (shadow IT is real; that unknown IP is sometimes the billing system someone connected in 2019), then let your p=quarantine or p=reject policy eat the fakes. This protection is the reason sender reputation and DMARC enforcement go hand in hand.

"No DMARC record found": the five-minute fix

Tools and postmaster pages report this when there is no TXT record at _dmarc.yourdomain.com at all. Strictly speaking that is not a failure of any single message, but it stopped being a cosmetic gap in 2024, when Gmail and Yahoo began requiring senders of bulk email (Google draws the line at about 5,000 messages a day to Gmail) to publish at least a minimal DMARC policy with SPF or DKIM aligned to the From domain. Microsoft has applied the same requirement to Outlook consumer domains since May 2025. Today, no record means throttling, junking, or outright rejection at the biggest mailbox providers, which shows up as exactly the undelivered mail people then spend days chasing.

The starter record is one line, published as TXT on the _dmarc host:

v=DMARC1; p=none; rua=mailto:dmarc@yourbrand.com

It enforces nothing, satisfies the mailbox providers' minimum, and starts collecting the aggregate reports you need for everything else in this guide. Generate yours with the record generator mentioned above if you want the syntax handled for you.

What receivers do with a failing message

The consequence of dmarc=fail is whatever your own record requests, applied at the receiver's discretion:

PolicyWhat you publishedWhat typically happens to failing mail
p=noneMonitor onlyDelivered normally; failure is recorded and reported to you
p=quarantineTreat with suspicionSent to the spam folder
p=rejectRefuse itBounced during delivery; the reader never sees it

Two footnotes matter in practice. Receivers may override your policy in either direction, and a pct tag lets you apply quarantine or reject to only a sampled share of failing mail while you gain confidence. More importantly, p=none is not consequence-free. Filters at Gmail and Outlook weigh authentication results as a reputation signal regardless of your published policy, so a stream with chronic DMARC failures gets progressively worse inbox placement even while every message is technically delivered.

How to fix DMARC failures, step by step

This is the order that works, whether you are clearing one failing campaign or a whole domain:

  1. Publish or repair the record, at p=none, with a rua address. Verify it with the DMARC checker. Enforcement comes last, not first.
  2. Inventory your senders. Give the aggregate reports two to four weeks, then list every service that sends as your domain: ESP, transactional mail, CRM, helpdesk, billing, the office printer.
  3. Align DKIM everywhere first. For each legitimate sender, enable custom domain signing so d= is your domain. DKIM survives forwarding, so it is the alignment that keeps working after the message leaves your hands.
  4. Align SPF second. Set up custom bounce domains where the platform supports them, and get your record under the ten-lookup limit with the SPF checker.
  5. Verify per message, not per domain. Send a real message from each platform through the spam test and check all three verdicts with the DKIM checker alongside. Records can be perfect while a specific mail stream still signs with the wrong key.
  6. Ratchet up the policy. When reports show your legitimate sources passing, move to p=quarantine (optionally sampled with pct), watch, then p=reject. That final step is the point of the whole exercise: it is what actually stops your customers from receiving fake invoices with your name on them.

Check the verdict before your subscribers do

A DMARC fail discovered in an aggregate report already cost you a campaign. The free Unspam spam test shows the same verdict before you send: SPF, DKIM, and DMARC evaluated on your exact message, with the domains each check saw, next to the spam score, blacklist, and content checks, in about 30 seconds, no signup required. If it says pass and aligned, send with a clear conscience. If it says dmarc=fail, you now know which of the seven causes to fix. None of them takes longer than an afternoon.

Frequently asked questions

What does dmarc=fail mean?

It means the message could not produce a single authentication result that both passed and matched the domain in the From header. DMARC checks two things: whether SPF passed for a domain aligned with the From domain, and whether DKIM passed with a signature from an aligned domain. One aligned pass is enough. If SPF fails or passes for an unrelated domain, and DKIM does the same, the receiver records dmarc=fail and applies whatever policy your DMARC record requests.

Why does DMARC fail when SPF and DKIM both pass?

Because of alignment. DMARC does not just ask whether SPF and DKIM passed; it asks whether they passed for your domain. If your ESP sends with its own bounce domain, SPF passes for the ESP, not for you. If the message is signed with the ESP's shared DKIM key, the d= domain is theirs, not yours. Both checks show pass, neither matches your From domain, so DMARC fails. The fix is custom domain authentication at your ESP: your own DKIM signature and a custom Return-Path.

Does email forwarding break DMARC?

Forwarding reliably breaks SPF, because the forwarding server's IP is not in your SPF record, and forwarders that rewrite the envelope sender to fix SPF break its alignment instead. DKIM usually survives forwarding untouched, since the signature travels inside the message. That is exactly why DMARC only needs one aligned pass: as long as your DKIM signature is aligned and the forwarder does not modify the message, DMARC still passes. Mailing lists that add subject tags or footers are the exception, because those edits invalidate DKIM too.

What does 'no DMARC record found' mean and how do I fix it?

It means there is no TXT record at _dmarc.yourdomain.com, so receivers have no policy to apply and testing tools flag the gap. Since 2024, Gmail and Yahoo require bulk senders to publish at least a minimal policy, and Microsoft applies the same bar to Outlook consumer domains since May 2025. The five minute fix is publishing v=DMARC1; p=none; rua=mailto:you@yourdomain.com as a TXT record on the _dmarc host. That enforces nothing yet, but it satisfies the mailbox providers and starts sending you aggregate reports.

Does a DMARC fail mean my email goes to spam?

It depends on the policy in your DMARC record. With p=none, receivers deliver the message normally and just report the failure, though persistent failures still degrade how filters treat your mail. With p=quarantine, failing messages are typically sent to the spam folder. With p=reject, they are refused outright and never reach the mailbox. Gmail, Yahoo, and Outlook also treat missing or failing authentication as a spam signal in its own right, over and above your published policy.

How do I find out which messages are failing DMARC and why?

Three ways. Before sending, run the message through a spam test like Unspam, which shows the SPF, DKIM, and DMARC verdicts side by side with the exact domains each check evaluated. On a delivered message, open the raw headers (Show original in Gmail) and read the Authentication-Results line. For your whole mail flow, add a rua address to your DMARC record and read the aggregate reports receivers send you: they list every source sending as your domain and how each one authenticated.

See where your campaign actually lands.

Start a free spam test Inbox placement test