SMTP Error Codes Explained: 4xx and 5xx Bounce Codes and How to Fix Them

Every rejected email comes back with a code. Most people glance at "550" or "421", decide the email failed, and move on - and in doing so throw away the single most useful diagnostic email has. An SMTP reply is the receiving server telling you, in a structured way, exactly why it did or did not accept your message and whether it is worth trying again.
This is a plain-English reference to the SMTP error codes you actually meet: how to read any SMTP reply, what the standard 4xx and 5xx codes mean, the signature rejection codes used by Gmail, Microsoft, Yahoo, Zoho, Fastmail and Apple iCloud, and a fix playbook grouped by root cause. Where a code is documented by the provider we say so; where a code is only ever seen in real bounce logs and is not in the provider's own documentation, we say that too, because guessing at a code's meaning is how senders waste days chasing the wrong fix.
Sources and methodology
The standard codes here are checked against RFC 5321 (basic reply codes) and the enhanced-status-code RFCs (RFC 3463 and the authentication codes in RFC 7372). Provider-specific interpretations are taken from official Google, Microsoft, Yahoo, Apple, Fastmail and Zoho documentation where it exists, and are clearly marked as field-observed where a provider (notably Yahoo and Apple) does not document the exact code or tag.
Quick lookup: the codes people search for
The most-searched codes at a glance - each links to its detailed section below. As always, read the diagnostic text the server actually returned; the same number can carry different reasons.
| SMTP error | Meaning | First action |
|---|---|---|
421 | Temporary deferral / throttling | Back off and let the queue retry |
450 / 451 / 452 | Temporary mailbox / processing / capacity issue (or greylisting) | Retry; investigate if it persists |
550 5.1.1 | User does not exist | Suppress the address |
550 5.7.1 | Policy / security rejection (spam, relay, reputation) | Read the diagnostic text |
550 5.7.26 | Gmail: authentication failure (SPF/DKIM/DMARC) | Fix SPF, DKIM and alignment |
550 5.7.509 | Microsoft: message failed DMARC (policy = reject) | Fix DMARC alignment |
550 5.7.515 | Microsoft: high-volume sender authentication not met | Fix SPF/DKIM/DMARC |
421 4.7.28 | Gmail: unusual rate of email (throttle) | Slow down; warm up |
554 5.7.9 | Yahoo: policy rejection (often authentication/DMARC) | Read the text; fix alignment |
552 5.2.2 | Mailbox full | Retry initially; suppress if chronic |
How to read an SMTP reply code
A modern SMTP rejection carries two codes and a human message. Learn to see all three and most bounces become self-explanatory:
550 5.7.26 This email has been blocked because the sender is
unauthenticated. Gmail requires all senders to authenticate
with either SPF or DKIM. ... gsmtp
↑ ↑ ↑ ↑
basic enhanced human-readable reason server tag
- The basic reply code (three digits, e.g.
550) comes from RFC 5321. The first digit is all you need for triage:2xx= accepted,4xx= temporary failure (try again),5xx= permanent failure (do not retry). - The enhanced status code (three numbers, e.g.
5.7.26) comes from RFC 3463 and pinpoints the reason. It reads class.subject.detail - more on this below. - The human-readable text is where the receiver tells you what actually happened. Two providers can return the same
550 5.7.1for completely different reasons, so the text is not optional reading. - A server tag often trails the line - Gmail appends
gsmtp(orgcdpwhen an admin's custom rule caused the block), Yahoo and Apple append a hostname. It identifies the server, it is not part of the code.
Read the last line, not the first
A rejected SMTP conversation can contain several lines. The line that carries the reason is the final reply the server sent before closing - that is the one with the code and text you want. Bounce (NDR) messages that land back in your inbox usually quote this line under a heading like "Diagnostic-Code" or "The response was".
Synchronous vs asynchronous bounces
There is a second axis to every bounce: when you find out. It decides where the rejection even shows up.
- Synchronous - the receiver returns the code during the live SMTP conversation, before it ever accepts the message, so your sending server sees it immediately in your outbound mail logs. Most rejections in this guide arrive this way.
- Asynchronous - the receiver answers
250 OKand accepts the message, then discovers later that it cannot deliver and sends a separate bounce - a Non-Delivery Report (NDR / DSN) - back to your Return-Path. It arrives as a new email minutes to days later, with the same enhanced status code quoted inside it.
The important part: this is about timing, not a different set of codes. The very same 550 5.1.1 can come back synchronously (the gateway knew the recipient was invalid at RCPT time) or asynchronously (it accepted the message first and only found the mailbox missing afterwards). As a rule of thumb, connection, authentication and reputation blocks tend to be synchronous, while mailbox-full, unknown-user-behind-a-gateway and post-acceptance content filtering tend to come back asynchronously as a DSN - but you read the code the same way in both.
4xx vs 5xx: the one rule that matters
If you remember nothing else, remember this:
| Class | Meaning | Bounce type | What you should do |
|---|---|---|---|
4xx | Temporary / transient failure. "Not now, try again." | Soft bounce | Nothing manual. Your mail server retries automatically for ~24-72h. Do not hammer it faster. |
5xx | Permanent failure. "No, and retrying this message unchanged will not change that." | Hard bounce | Do not re-send the same message unchanged. Suppress the address only on a recipient failure (e.g. 5.1.1 user unknown); for authentication, policy or reputation 5xx, fix the sender-side cause, then sending can resume. |
The trap is a persistent 4xx. A single 4xx is harmless. But when a receiver returns the same 421 deferral to every attempt for two days, it is refusing you politely - treating it as "temporary" and retrying harder makes things worse. Persistent 4xx = a reputation or rate problem to fix, not wait out.
The standard 4xx codes (temporary)
| Code | Standard meaning | Usually caused by |
|---|---|---|
421 | Service not available, closing transmission channel | Server overloaded, connection/rate throttling, or reputation-based deferral. The signature rate-limit code. |
450 | Mailbox unavailable (busy or temporarily blocked) | Recipient mailbox temporarily locked, greylisting, or a temporary per-recipient rate limit. |
451 | Requested action aborted: local error in processing | Greylisting, a temporary content/policy hold, or the receiver could not complete authentication checks (temporary DNS failure). |
452 | Insufficient system storage / too many recipients | Receiver low on resources, or you listed too many recipients in one transaction. |
455 | Server unable to accommodate parameters | A command parameter the server cannot handle right now. Rare. |
Greylisting deserves a note because it alarms people needlessly: some receivers deliberately return a 4xx to the first delivery attempt from an unknown server and accept the retry a few minutes later. It is an anti-spam tactic, not a problem with your mail - a properly configured server just retries and delivers. Fastmail documents doing exactly this, and even adds an X-Spam-greylist header telling you how long the message was delayed.
The standard 5xx codes (permanent)
| Code | Standard meaning | Usually caused by |
|---|---|---|
500 | Syntax error, command unrecognized | A malformed SMTP command - typically a broken or misconfigured sending client. |
501 | Syntax error in parameters or arguments | A bad address syntax or command argument. |
502 | Command not implemented | The server does not support a command your client issued. |
503 | Bad sequence of commands | Commands sent out of order (e.g. DATA before RCPT), often an auth-order problem. |
504 | Command parameter not implemented | An unsupported parameter, sometimes seen when a server demands authentication. |
521 | Host does not accept mail (RFC 7504) | The host explicitly does not receive email at all. |
550 | Mailbox unavailable / request refused | The workhorse rejection. No such user, blocked sender, policy or reputation rejection, relay denied. Read the text. |
551 | User not local | The recipient is not hosted here (and no forwarding address offered). Rare today. |
552 | Exceeded storage allocation | The recipient mailbox is full. |
553 | Mailbox name not allowed | Invalid address format, or the receiver refuses that name (sometimes relay-denied). |
554 | Transaction failed / no valid recipients | A catch-all permanent rejection - spam, policy, blocklist, or the whole transaction was refused. |
556 | Domain does not accept mail (RFC 7504) | The recipient domain advertises that it accepts no mail (a null MX). |
Enhanced status codes: the X.Y.Z that actually tells you what broke
The basic code tells you retry-or-not. The enhanced code tells you why. It is class.subject.detail:
- Class (first digit):
2success,4temporary,5permanent - it mirrors the basic code's first digit. - Subject (second digit) is the useful part:
.1addressing,.2mailbox,.3mail system,.4network/routing,.5protocol,.6media/content,.7security/policy. - Detail (third digit) is the specific condition, and its meaning depends on the subject - the same detail number means different things under different subjects, so read it as part of the whole code (see the table below for the ones you will actually meet).
A .7 in the middle almost always means the block is about you - authentication, reputation or policy - which is the good news, because those are the ones you can fix. The codes below span three layers: the base subjects from RFC 3463, the standard authentication codes added in RFC 7372 (e.g. X.7.25, X.7.26), and higher detail numbers that are provider extensions (e.g. Gmail's 5.7.28 and 5.7.40, in the provider tables further down). Here are the ones you will actually meet:
| Enhanced code | Meaning | Side |
|---|---|---|
X.1.1 | Bad destination mailbox address (user unknown) | Recipient |
X.1.2 | Bad destination system / domain does not exist | Recipient |
X.1.10 | Recipient address has a null MX (RFC 7505) - the domain accepts no mail | Recipient |
X.2.1 | Mailbox disabled / not accepting messages | Recipient |
X.2.2 | Mailbox full (over quota) | Recipient |
X.3.1 | Mail system full | Recipient infra |
X.4.4 | Unable to route | Infra |
X.4.7 | Delivery time expired (your queue gave up after repeated 4xx) | Sender/infra |
X.6.1 | Media / content not supported (e.g. a blocked attachment) | Content |
X.7.1 | Delivery not authorized, message refused - spam, relay-denied, blocklist or policy | Sender |
X.7.25 | Reverse DNS (PTR) validation failed - missing or mismatched PTR (RFC 7372) | Sender |
X.7.26 | Multiple authentication checks failed - e.g. SPF and DKIM both failed (RFC 7372) | Sender |
X.7.9 | Message not accepted for policy reasons - commonly an authentication/DMARC failure; read the accompanying text (used by Yahoo) | Sender |
The fastest triage you can do
Basic code first digit tells you retry-or-stop. Enhanced code middle digit tells you the department: a .1 or .2 is the recipient's address or mailbox (clean your list), a .7 is your authentication, reputation or policy (fix your setup). You can route 90% of bounces correctly before reading a single word of the message.
Provider-specific codes
This is where the standard tables stop being enough. Each major mailbox provider layers its own reason strings on top of the standard codes, and knowing the signature ones tells you the exact fix. The strings below are quoted from real bounces; we note which are documented by the provider and which are only observed in the wild.
Gmail and Google Workspace
Google publishes a full SMTP error reference, and it is unusually systematic: most 2024 bulk-sender rules exist as a matched pair - a 4xx deferral that throttles you first, and a 5xx block for repeat offenders. Gmail appends gsmtp to its error messages; errors caused by a Google Workspace administrator's custom rule can instead show gcdp.
| Code | What it means | Fix |
|---|---|---|
421 4.7.28 | "Unusual rate of email" from your IP, netblock or domain - the signature Gmail throttle | Slow down, warm up, fix list hygiene. Permanent form is 550 5.7.28. |
421 4.7.26 | Rate-limited because the mail is unauthenticated (needs SPF or DKIM) | Set up SPF and DKIM. Permanent form is 550 5.7.26. |
421 4.7.32 | Rate-limited because the From header is not aligned with SPF or DKIM (DMARC alignment) | Align your From domain with an authenticated domain. |
550 5.7.1 | "This message is likely unsolicited email ... has been blocked" - the classic spam block. Also appears with "very low reputation of the sending IP / domain". | Opt-in only, warm the IP/domain, cut complaints. |
550 5.7.26 | Blocked for an authentication failure. Gmail uses this for several cases - SPF and DKIM both failing, an SPF hard-fail, or a DMARC-policy rejection - so read the diagnostic text to see which. | Complete SPF and DKIM so at least one passes and is aligned with your From domain. |
550 5.7.27 / 5.7.30 | Bulk mail failed SPF (.27) or DKIM (.30) | Fix the specific mechanism named. |
550 5.7.40 | The sending domain has no DMARC record / no policy | Publish a DMARC record with a policy. |
550 5.7.25 | Sending IP has no PTR record, or it does not match | Set correct reverse DNS on the sending IP. |
550 5.1.1 | "The email account that you tried to reach does not exist" | Remove the address. Do not retry. |
Microsoft (Outlook.com and Microsoft 365)
Microsoft is really two systems: consumer Outlook.com / Hotmail and business Microsoft 365 (Exchange Online Protection), with separate block lists and delisting paths. The codes below are from Microsoft's official NDR reference unless noted.
| Code | What it means | Fix |
|---|---|---|
550 5.7.606-649 | "Access denied, banned sending IP" - your IP is on Microsoft's block list | Delist via the Office 365 sender portal. |
550 5.7.509 | Sending domain "does not pass DMARC verification and has a DMARC policy of reject" - this is the DMARC rejection | Fix SPF/DKIM alignment so the From domain passes DMARC. |
550 5.7.515 | "Access denied" - Outlook.com's high-volume-sender authentication rule (enforced from May 2025 for domains sending 5,000+/day to consumer Outlook.com/Hotmail): the domain does not meet the required SPF/DKIM/DMARC authentication level. | Ensure SPF and DKIM pass, publish a DMARC record, and make sure DMARC aligns. |
550 5.7.23 | Rejected for an SPF (Sender Policy Framework) failure | Correct your SPF record and the sending source. |
550 5.7.1 | "Delivery not authorized" / "Unable to relay" / "Client was not authenticated" - the relay/permission catch-all | Authenticate, or send from an authorized source. |
550 5.1.10 | "Recipient not found" - the address does not exist in Microsoft 365 | Remove or correct the address. |
432 4.3.2 / 421 4.3.240 | Recipient or connection throttling (too fast / too many concurrent connections) | Reduce concurrency and rate. |
Two Microsoft codes people get wrong
550 5.7.520 is not a DMARC failure - it is the "external forwarding is not allowed" block, a tenant policy. The DMARC-reject code is 5.7.509. And 452 4.3.1 is a generic "insufficient resources" code used by many servers, not a Microsoft-specific throttle - Microsoft's real throttling codes are 432 4.3.2 and 421 4.3.240. On consumer Outlook.com you may also see block tags like S3140 / S3150; those appear in real bounces but Microsoft does not define them in an official reference, so treat the exact meaning with caution.
Yahoo and AOL
Yahoo (which also runs AOL) documents its errors by category rather than a numbered table: temporary errors are 421/451, permanent are 553/554, and it names two tag families, TS* for reputation deferrals and PH* for content/malware blocks. The specific sub-tags below (TSS04, TS01-TS04) are seen constantly in real logs but are not individually defined by Yahoo - their meanings are inferred by email providers and vary, so use them as a signal, not gospel.
421 4.7.0 [TSS04] Messages from 4.16.55.1 temporarily deferred
due to unexpected volume or user complaints;
see https://postmaster.yahooinc.com/error-codes
| Code | What it means | Fix |
|---|---|---|
421 4.7.0 [TS*] | Reputation/volume/complaint deferral (the TS* family - TSS04 is the common one) | Cut Yahoo-bound volume and concurrency, let the queue back off, fix complaints and list hygiene. |
554 5.7.9 | "Message not accepted for policy reasons" - a policy rejection, commonly an authentication/DMARC failure (classic on forwarded mail). Read Yahoo's accompanying text for the exact cause. | Align SPF/DKIM with the From domain; add ARC on forwarding paths. |
553 / 554 | Invalid recipient, or "your IP is listed by Spamhaus" | Remove bad addresses; delist at Spamhaus. |
554 ... [PH*] | Content block - virus, phishing or malicious links | Remove the offending content/links. |
Yahoo's 2024 bulk-sender rules (authenticate with SPF and DKIM, publish DMARC, one-click unsubscribe, low complaints) are enforced through these same codes: complaint and reputation failures surface as TS* deferrals, and authentication or policy failures as 554 5.7.9.
Zoho Mail
Zoho tends to wrap its rejections in a 5.7.1 enhanced code with a descriptive reason, and (unlike most providers) tags its outbound rate limit with a 5xx code even though it behaves like a throttle. The strings below are verbatim from Zoho's help community.
| Code | What it means | Fix |
|---|---|---|
554 5.7.1 | "Email detected as Spam by spam filters" (also "matches a profile the Internet community may consider spam") | Fix authentication and content; recipient admin can allowlist. |
554 5.7.1 | "Relay access denied" - sending through Zoho MX without being an authorized sender | Send only to Zoho-hosted domains, or authenticate via smtp.zoho.com. |
550 5.7.1 | Unauthenticated mail failing the recipient domain's DMARC policy, or an IP flagged for abuse | Fix SPF/DKIM alignment; get the IP delisted. |
550 5.4.6 | "mail rate exceeded limit" - Zoho's outbound rate limit (dynamic, roughly 1000/day on standard policy) | Slow down; heavy/marketing sending belongs on Zoho Campaigns, not Zoho Mail. |
554 5.5.3 | "Too many recipients" in one transaction (about 100, or 50 under a custom policy) | Send in smaller recipient batches. |
550 5.1.1 | User unknown / mailbox does not exist | Remove the address. |
Note: a widely repeated claim that Zoho uses 554 5.7.5 for spam is wrong - the real spam code is 554 5.7.1. Setting Zoho up cleanly is largely an authentication exercise; our Zoho SPF, DKIM and DMARC guides walk it end to end.
Fastmail
Fastmail is the outlier, and it is worth understanding why: it deliberately does almost no content-based rejection at SMTP time. Per Fastmail's own documentation, SPF, DKIM, DMARC and content scoring only adjust the spam score and file to the Spam folder - they do not bounce the message, even for a domain publishing p=reject (which Fastmail treats as a high-scored quarantine, not an SMTP rejection). So there are very few Fastmail rejection codes to learn.
| Code / signal | What it means | Fix |
|---|---|---|
4xx + X-Spam-greylist header | Greylisting - a temporary failure on the first attempt, accepted on retry | Nothing; a normal server retries and delivers. |
Rejection citing xbl.spamhaus.org | The one blocklist Fastmail rejects on: the Spamhaus XBL (compromised/exploited hosts) | Your sending host is compromised or on the XBL - fix it and delist at Spamhaus. |
550 5.1.1 | "Recipient address rejected: User unknown in local recipient table" | Remove the address. |
554 | "Recipient address rejected: Relay access denied" | Send only to Fastmail-hosted recipients, or authenticate. |
Fastmail also rate-limits sending hosts and blocks address-enumeration and RFC-violating spambots at the envelope stage. Fastmail does not publish a full numeric code for the Spamhaus block or greylisting - so if you see a bounce claiming a specific "Fastmail 550" for a spam-content reason, be sceptical; that is not how Fastmail behaves.
Apple iCloud Mail
Apple documents the least of any provider: its postmaster page lists requirements but no codes and no bracket tags at all. The bracketed tags below ([CS01], [HM07], [HM08]) are real and appear in live bounces, but they are undocumented by Apple - known only from mail logs - so treat them as "reputation/policy, slow down and clean up" signals rather than precise diagnoses.
550 5.7.1 [CS01] Message rejected due to local policy.
Please visit https://support.apple.com/en-us/HT204137
| Code | What it means | Fix |
|---|---|---|
550/554 5.7.1 [CS01] | "Message rejected due to local policy" - Apple's proprietary content/reputation filter declined it. Not proof of a complaint or a bad address. | Improve authentication and IP/domain reputation; escalate to [email protected] with logs. |
554 5.7.1 [HM07] / [HM08] | Same "local policy" family; commonly tied to list-hygiene and send-rate problems - Apple's signal to slow down | Prune disengaged subscribers, reduce velocity, tighten authentication. |
550 5.7.1 (DMARC) | "Your message was rejected due to example.com's DMARC policy" | Fix SPF/DKIM alignment for the From domain. |
550 5.7.1 (Spamhaus DBL) | Rejected for a domain on the Spamhaus DBL | Delist the domain at Spamhaus. |
421 4.7.1 | "deferred due to excessive volume" - slow down | Reduce volume; retry with backoff. |
550 5.1.1 / 552 5.2.2 | User does not exist / mailbox over quota | Remove or leave to the recipient. |
Apple runs no feedback loop and no allow list, so with iCloud "local policy" rejections you cannot get a complaint report - the only route is to get your authentication, reputation and list hygiene right, then escalate with logs.
Other systems: gateways and blocklists
A lot of mail is filtered not by the mailbox provider but by a security gateway sitting in front of it, or rejected because of a blocklist. You will meet their codes too - here are the official references to keep on hand:
- Barracuda (Email Security Gateway / Email Gateway Defense) - SMTP error codes reference.
- Mimecast - SMTP error codes (and their rejected-and-deferred message reasons).
- Spamhaus - the blocklist behind many of the rejections above (Fastmail, Yahoo and Apple all cite it). Use the IP and domain reputation checker to see a listing and request removal.
Fix playbooks by root cause
Nearly every 5xx block above collapses into one of four root causes. Fix the cause, not the code.
- Publish and verify SPF, DKIM and DMARC. The 2024 Gmail/Yahoo rules and Microsoft/Apple expectations all require these. Check each with the SPF, DKIM and DMARC checkers.
- Fix alignment, not just presence. Codes like Gmail's 5.7.32 and Microsoft's 5.7.509 are alignment failures - your visible From domain must match the domain that SPF or DKIM authenticated.
- Watch it work with real report data. Turn on the Postbox DMARC Monitor to see which sources pass and fail before you move DMARC to enforcement.
- Understand the moving parts in the SPF, DKIM and DMARC guide.
- Check whether you are blocklisted. Run your sending IP and domain through the blacklist checker; Spamhaus XBL/DBL listings drive Fastmail, Yahoo and Apple rejections directly.
- Warm up new IPs and domains gradually. Sudden volume from a cold source is exactly what triggers Gmail 421 4.7.28 and Yahoo TS* deferrals.
- Cut complaints and clean the list. Honour unsubscribes fast, remove disengaged recipients, and only mail people who opted in.
- Test the message before you send it. A free spam test scores authentication, reputation and content on one send so you fix problems before a provider does it for you.
- Let your server retry - do not resend by hand. 4xx codes are handled by the queue; manual re-sends look like more spam.
- Reduce concurrency and hourly volume to the throttling provider. Especially during warmup, and especially to Yahoo and Microsoft.
- Use the right tool for the job. Provider mailboxes (Zoho, Google Workspace) have low daily limits by design - bulk and marketing mail belongs on an ESP, not a mailbox.
- Remove hard-bounced addresses immediately and never re-mail a 5.1.1. Repeated unknown-user hits are a strong spam signal.
- Verify addresses before you import a list so typos and dead mailboxes never enter your sending in the first place.
- Treat a persistent 5.2.2 (full) as effectively dead after a while - a chronically full mailbox is an abandoned one.
When the code says the problem is not you
Not every bounce is yours to fix. Addressing and mailbox errors - 5.1.1 user unknown, 5.2.2 mailbox full, 5.2.1 mailbox disabled, 5.1.10 null MX - are the recipient's address being wrong, full or closed. There is no sender-side fix beyond removing the address. Likewise a genuine 4.4.x routing error or a one-off 421 during a provider's incident will clear on its own. The codes worth your energy are the 5.7.x security-and-policy family, because those are the ones that are about your authentication, reputation or content - and those you can actually fix.
Bounces piling up and you cannot tell which cause it is?
A full deliverability audit reads your bounce logs, authentication, reputation data and DNS together, and tells you exactly what to fix first - instead of decoding one rejection at a time.
Get a deliverability audit Run a free spam testBookmark this page as a decoder: read the basic code to know whether to retry, read the enhanced code's middle digit to know the department, read the provider table to know the exact fix. An SMTP rejection is not a dead end - it is the most precise instruction email ever gives you.
Frequently Asked Questions
What is the difference between a 4xx and a 5xx SMTP error?
A 4xx code is a temporary (transient) failure - the receiving server is telling your server to try again later, and a well-behaved mail server will keep retrying for a day or more before giving up. A 5xx code is a permanent failure - re-sending the same message unchanged will not help. In bounce terms, a 4xx is a soft bounce and a 5xx is a hard bounce. A 5xx does not automatically mean you should suppress the recipient forever: suppress the address only when the response is a recipient/address failure such as 5.1.1 (user unknown). When the 5xx is about authentication, policy or reputation (for example 5.7.1, 5.7.26 or Microsoft 5.7.515), fix the sender-side cause and sending can resume - but blindly retrying an unchanged 5xx still damages your reputation.
What does 550 5.7.1 mean?
550 5.7.1 is the most common permanent rejection on the internet, and it is deliberately generic: the basic code 550 means the mailbox action was not taken, and the enhanced code 5.7.1 means 'delivery not authorized, message refused' for a security or policy reason. In practice it is used for spam blocks, blocklisted IPs, relay-access-denied, and DMARC or authentication failures - so you must read the human-readable text after the code to know which one you hit. Gmail, Microsoft, Yahoo, Zoho and Apple all use 550 5.7.1 (or 554 5.7.1) for several different policy rejections.
Is a 421 error a bounce?
Not a permanent one. 421 is a transient code meaning the service is unavailable or is throttling you and is closing the connection - your server should back off and retry. It is the signature code for rate limiting and reputation-based deferrals: Gmail's 421 4.7.28 (unusual rate of email), Yahoo's 421 4.7.0 deferrals, and Apple's 421 4.7.1 (excessive volume) are all 421s. If a 421 keeps repeating for the same recipient over a day or two, the receiver is effectively refusing you, and the fix is to reduce volume and improve reputation, not to keep retrying harder.
How do I read an enhanced SMTP status code like 5.7.26?
The enhanced status code has three parts, class.subject.detail (defined in RFC 3463). The first digit is the class: 2 is success, 4 is a temporary failure and 5 is permanent. The second digit is the subject - 1 is addressing, 2 is the mailbox, 4 is network or routing, 7 is security or policy. The third digit is the specific detail. So 5.7.26 reads as: permanent (5), security/policy (7), detail 26 - which RFC 7372 defines as 'multiple authentication checks failed' (typically SPF and DKIM both failing). Gmail also returns 5.7.26 for an SPF hard-fail or a DMARC rejection, so read the accompanying text. Reading the class and subject alone tells you whether to retry and roughly what area to fix.
Why am I getting authentication errors under the new sender rules (2024/2025)?
Enforcement has arrived in waves. Gmail and Yahoo began enforcing bulk-sender requirements in February 2024. Microsoft followed with its own rule: from May 2025, domains sending 5,000+ messages a day to consumer Outlook.com/Hotmail must meet SPF, DKIM and DMARC requirements or get 550 5.7.515. Apple has similar expectations for bulk senders. Requirements now differ per provider, so follow each provider's current SPF, DKIM, DMARC-alignment, complaint-rate and unsubscribe rules. Failing them produces specific codes: Gmail throttles with 421 4.7.26 or 421 4.7.32 and blocks with 550 5.7.26 or 550 5.7.40; Microsoft returns 550 5.7.515; Yahoo rejects with 554 5.7.9. The fix is to complete SPF, DKIM and DMARC correctly - not to change your content.
Which SMTP errors mean the problem is on my side versus the recipient's?
Addressing and mailbox errors (5.1.1 user unknown, 5.2.2 mailbox full, 5.2.1 mailbox disabled) are recipient-side - the address is wrong, full or closed, and the only fix is to correct or remove it. Security and policy errors (anything 5.7.x or a spam or reputation block) are usually sender-side - your authentication, IP or domain reputation, or content triggered the block, and those are the ones you can actually fix. Network and routing errors (4.4.x) are typically transient infrastructure problems that resolve on their own.