550 5.7.1: email rejected per DMARC policy
Last updated 2026-08-14
5.7.1 is the code receivers reach for when they do not want to be specific.
If the text next to it mentions DMARC, the fix is alignment on your side, and the
recipient cannot help.
The strings you will see
Gmail, on a domain publishing quarantine or reject:
A Postfix or Exim host running OpenDMARC, which is most self-hosted receivers:
Yahoo, which uses its own wording for policy rejections:
Yahoo moves its codes around more than the others, and its sender hub at senders.yahooinc.com carries the current list. If your bounce text differs by a word, trust the bounce.
What it means. The receiver evaluated DMARC for the domain in your From header, it failed,
and that domain's policy is p=quarantine or p=reject with
enough of a policy percentage applied to this message to refuse it.
What to change. Make SPF or DKIM pass in alignment with the From domain for the system that sent this. Not the vendor's domain. Yours.
When it clears. Next message after DNS resolves and the sending platform picks up its new signing configuration, which for some platforms takes a verification round of its own.
Confirm it is really DMARC
Three quick checks separate a DMARC rejection from the other things wearing this code.
-
The text names DMARC, or a policy, or your domain. A 5.7.1 that says
Relay access deniedis a misconfigured relay and has nothing to do with authentication. -
Your domain publishes an enforcing policy. Check it:
dig +short TXT _dmarc.example.comIf you get
p=noneback, the rejection is something else, becausep=noneasks receivers to deliver anyway. - It fails for one sending system and not others. A tool that sends through your own mail server is usually fine; the tool that sends through a vendor is usually the one.
The DMARC checker reads every tag in the record, including the ones that surprise
people: sp= for subdomains, and pct=, which applies the policy
to a fraction of messages and produces intermittent rejections that look like flakiness.
The usual causes
- A vendor that was never authenticated for your domain. The single biggest one, every time.
-
A subdomain covered by an inherited policy.
p=rejecton the parent applies tomail.example.comunless you setsp=. Publishing a separate DMARC record on the subdomain is the clean fix, not weakening the parent. -
Strict alignment. If you set
aspf=soradkim=s, an exact domain match is required and a subdomain no longer counts. Most people who set this did not mean to. Alignment, explained covers the difference. - SPF permerror. An SPF record over the lookup limit returns permerror, not pass, so DMARC has only DKIM left to work with. Details here.
Fix
Find the sending system, complete its domain authentication so it signs with
d=example.com, and set a custom return-path if it offers one. Retest with a
single message to a Gmail address and read Show original. If you cannot identify the
system from the bounce, the aggregate reports will name it:
how to read one.
If you are mid-rollout and this is breaking real mail, going back to
p=none for a week is a legitimate move. It is not a failure. Rolling out
DMARC and rolling straight back to reject with a broken sender still in the mix is.
You fixed this sender. Tomorrow the reports name the other hosts still sending as you, and we turn a day of XML into one email with a verdict per sender. On the paid plans, the day a report first names a new sender failing, you hear about it. Get the weekly digest. The first domain is free.
Hear about the next failing sender first
This rejection named one sender, and the next to break sends no warning ahead of it. On a paid plan, the first failing report from a new source reaches you as an email that day, not in Monday's digest. Pro watches 5 domains for $19 a month.
Get the alerts and the digestNo card · 12+ months of history · The free plan does not expire
Questions
Does 550 5.7.1 always mean DMARC?
No. 5.7.1 is the generic 'delivery not authorized' code and also covers relay denied, blocked recipients and content policy. Only treat it as DMARC when the text after the code names DMARC or a policy for your domain.
Whose DMARC policy is being applied, mine or the recipient's?
Yours. The receiving server looks up the DMARC record of the domain in the From header and does what it says. That is why the fix is always on the sending side.
Can the recipient allowlist us to get around it?
Sometimes, at Microsoft and Google via tenant-level overrides, but treat it as a bad answer. It is per-recipient, it hides the real problem, and it does nothing for the next recipient.
Keep reading
Checking as you fix? Our DMARC checker, SPF checker and DKIM checker read the records live, no signup.