What does an SMTP 4xx or 5xx response actually tell me, and who should act next?
Start with the basic reply code
At an SMTP handoff, start with the three-digit reply—not a dashboard label such as “blocked.” The first digit establishes the protocol outcome: 2xx is positive completion, 3xx positive intermediate, 4xx transient negative completion, and 5xx permanent negative completion. A 4xx means the command was not accepted and the requested action did not occur, but the condition may be temporary; the client should try again. A 5xx means the request was not accepted and the client should not repeat the same request unchanged. [1]
Treat this as the response to a particular command at a particular hop. Note whether it followed MAIL FROM, RCPT TO, DATA, or the final end-of-data marker. A refusal at RCPT TO can concern one recipient before message content is sent; the final response after DATA determines whether that receiving server accepted the message. Even that acceptance proves handoff acceptance, not inbox placement or whether later filtering hides the message. [1]
Read the enhanced code and the text
Some replies add an enhanced status code such as 4.7.0 or 5.1.1. Its three fields are class.subject.detail: the class signals success, transient failure or permanent failure; the subject broadly classifies the condition; and the detail narrows it. For example, the X.7 family concerns security or policy, while X.1.1 means a bad destination mailbox address. Where used with SMTP replies, the enhanced class agrees with the basic reply class. [2][3]
The human-readable sentence is useful context, not a universal machine code. SMTP reply text is recommended rather than mandatory and may vary; enhanced codes provide a more portable classification, not a system-specific root-cause report. Preserve the exact words, but do not read a generic “policy” message as proof of a particular blocklist, rate limit, reputation score or fix. Interpret it alongside the code, command and logs. [1][2]
Why the class alone cannot identify the cause
A 4xx does not mean “rate limited.” A temporary reply can reflect different conditions, and the class alone only tells you that the request was not completed and may be retried. Enhanced subjects can point toward network or routing, mail-system, content, protocol, or security and policy categories. Conversely, 5xx does not automatically mean “bad address”: the permanent class can accompany different categories of failure. [1][2]
Even a more detailed enhanced code is a classification, not a forensic explanation. For instance, 4.7.0 points broadly to an other or undefined security/policy status; it does not name a specific rule. A 5.1.1 identifies a nonexistent destination mailbox under the standard’s definition, but still needs to be checked against the intended address and the system that replied. Do not infer a provider’s internal reason from the first digit alone. [2][3]
Triage the response, then assign the retry
First preserve the reply and identify which system issued it. Then classify the basic code, inspect the enhanced code if present, and read the text without treating it as definitive. For a 4xx, the SMTP client that received the reply is responsible for the outgoing queue and later attempt; in a relayed path, that client may be your relay rather than your application. RFC 5321 says failed mail is queued and periodically retried by the sender, with a delay after a failed attempt. [1]
For a 5xx, do not keep replaying the same transaction unchanged. Stop and determine what the code, text, transaction stage and local evidence justify changing before resubmission. If a downstream system later returns 250 after the message data, that accepting server has accepted responsibility for delivery; it still does not prove inbox placement. Track outcomes per recipient and per hop, so an earlier relay acceptance is not mistaken for final delivery. [1]
Build a useful evidence trail
A useful incident record lets an operator reconstruct the exact exchange, not merely remember “it bounced.” Save the timestamp with timezone, the complete multi-line response, the reply’s position in the SMTP transaction, and which server was the client and which was the server. Include the recipient and relevant sending identity or source details, but handle addresses and message data under your privacy rules.
Next, correlate the reply with the sending MTA’s queue, attempt history and next scheduled action. If the response repeats, compare whether the same host, recipient and transaction stage produced it, and note any changed codes or text. Escalate with those observations to the operator that controls the responding system or your relay. This turns a broad 4xx/5xx label into a testable troubleshooting question rather than a guessed cause.
Clearly fictional example — synthetic SMTP transcript
Example only. No customer message, real mailbox or live account data is shown.
S: 220 mx.receiver.example ESMTP readyC: EHLO mta.sender.exampleS: 250-mx.receiver.exampleS: 250 ENHANCEDSTATUSCODESC: MAIL FROM:<updates@sender.example>S: 250 2.1.0 Sender acceptedC: RCPT TO:<reader@receiver.example>S: 451 4.7.0 Temporary policy evaluation; try again laterThis invented reply is a temporary negative response to RCPT TO: the recipient command was not accepted in this attempt, and the client should retry later under its queue policy. The 4.7.0 points broadly to a security/policy category, while the synthetic text supplies a generic clue—not a specific rule or confirmed cause. Because the refusal came before DATA, this transcript shows no message-body transfer or acceptance at this hop. Preserve the line and identify the sending client that owns the retry.
What to check next
- 01Exact complete SMTP reply, including enhanced code, all text lines and punctuation.
- 02Timestamp with timezone, SMTP command or stage, and recipient affected.
- 03Identity of the responding host and the client/server roles at this handoff.
- 04Sending MTA or relay queue entry, attempt history, and configured next retry or disposition.
- 05Relevant sending IP/EHLO identity and any correlated results from the same host and recipient; avoid assuming they explain the code without evidence.
Check the source
Standards and provider documentation are linked beside the claims they support. Provider policies can change; check the current document before changing a live sending program.
- [1]RFC 5321 — Simple Mail Transfer Protocol Basic SMTP reply classes and meanings; reply text’s recommended rather than mandatory status; sender queue/retry responsibility; acceptance at the receiving SMTP hop.
- [2]RFC 3463 — Enhanced Mail System Status Codes Enhanced status-code structure and class, subject and detail; broad categories including address and security/policy; meanings such as 5.1.1.
- [3]RFC 2034 — SMTP Service Extension for Returning Enhanced Error Codes Enhanced status codes appear in SMTP response text when the extension is supported and their class agrees with the primary 2xx, 4xx or 5xx reply.
