What 550 and 554 actually mean
Every SMTP response is a three-digit code. A 5xx code is a permanent failure — the receiving server is telling you not to try again with the same message. The two most common are:
- 550 — mailbox unavailable, address rejected, or policy-based refusal (usually per-recipient).
- 554 — transaction failed, often because the whole message or connection was rejected (usually per-message or per-connection).
The text after the code is where the real diagnosis lives. Servers include phrases like "user unknown", "spam content", "blocked using Spamhaus", or "sender not authorized". Read it before assuming.
The seven most common causes and how to fix each
- Address doesn't exist. Confirm with how to check if an email address exists, then suppress the address using the rules in remove hard bounces from your list.
- Domain has no MX record. Domain is dead or misconfigured — suppress.
- SPF / DKIM / DMARC failure. Fix authentication with the SPF, DKIM and DMARC setup guide.
- IP or domain on a blocklist. Check with email blacklist check and delist and follow the delisting flow for each RBL.
- Spam trap or reputation block. Learn what triggers this in email spam traps and clean the segment before sending again.
- Content-based rejection. Common triggers: bare-URL heavy body, mismatched From/Reply-To, or subject-line spam signals. Rewrite and re-test.
- Rate limit or throttling. Slow the send. This is often a soft 4xx first — see greylisting explained for the temporary case.
How to read the bounce string
A useful habit: extract the code and the reason string from every bounce and log both. The text after the code is the fastest diagnostic tool you have. For example:
550 5.1.1 The email account that you tried to reach does not exist→ hard bounce, suppress.550 5.7.1 Message rejected due to content restrictions→ content rewrite, not a list issue.554 5.7.1 Service unavailable; Client host [IP] blocked using Spamhaus→ blocklist issue, delist.
Before your next send
If 550/554 rates are climbing, the fastest win is to verify the segment you're about to mail. This alone removes the bulk of address-level rejections and lets you focus on the smaller reputation and content issues.
Key takeaways
- 550 is usually per-recipient rejection; 554 is usually per-message or per-connection rejection
- The text after the code is the diagnosis — read it before guessing
- Address errors, authentication failures, and blocklist hits cause the majority of 5xx bounces
- 4xx codes are the temporary version — retry, don't suppress
- Cut future 5xx bounces with the free ListEmailCheck bulk verifier or the verification API at signup.