- SMTP error codes are three-digit numbers returned by mail servers that tell you exactly why an email was accepted, deferred, or rejected.
- Codes starting with 2xx indicate success, 4xx indicate temporary (soft bounce) failures that will be retried, and 5xx indicate permanent (hard bounce) failures that require action.
- Enhanced status codes (like 5.1.1 or 4.7.0) provide more specific diagnostic detail beyond the basic three-digit code.
- Common codes like 550, 421, and 554 each point to different root causes ranging from invalid addresses to blacklisting to policy violations.
- Monitoring your bounce codes is critical for maintaining sender reputation and diagnosing deliverability problems before they escalate.
When an email fails to deliver, the receiving mail server does not just silently drop it. It sends back a numeric response code that explains exactly what went wrong. These SMTP error codes are your single best diagnostic tool for understanding why emails bounce, get deferred, or get rejected outright.
The problem is that most senders never look at them. They see "delivery failed" in their logs or ESP dashboard and move on. But buried in those three-digit codes (and their enhanced counterparts) is precise, actionable information about whether the issue is on your end, the recipient's end, or somewhere in between.
In this guide, we will break down every major SMTP error code you are likely to encounter, explain what each one means in plain language, and walk through the fixes for each category.
How SMTP Response Codes Work
Every time your mail server communicates with a receiving server, the conversation follows the SMTP (Simple Mail Transfer Protocol) standard. Each step in the exchange produces a response code. These codes follow a consistent structure that makes them predictable once you understand the pattern.
The Three-Digit Code Structure
Traditional SMTP codes are three digits long. The first digit tells you the overall result category:
| First Digit | Meaning | Action Required |
|---|---|---|
| 2xx | Success | None. The command was accepted. |
| 3xx | Intermediate | Server is waiting for more data (e.g., message body after DATA command). |
| 4xx | Temporary failure (soft bounce) | Your server should automatically retry. If it persists, investigate. |
| 5xx | Permanent failure (hard bounce) | Do not retry. Identify and fix the root cause, or remove the address. |
Enhanced Status Codes (x.y.z Format)
Because the original 12 or so SMTP codes were too vague, RFC 3463 introduced enhanced status codes with three separate numbers separated by periods (e.g., 5.1.1, 4.7.0). These provide much more specific detail:
- First number (class): 2 = success, 4 = temporary failure, 5 = permanent failure
- Second number (subject): Identifies the category (0 = other, 1 = addressing, 2 = mailbox, 3 = mail system, 4 = network, 5 = protocol, 6 = content, 7 = security)
- Third number (detail): The specific condition within that category
For example, 5.1.1 means: permanent failure (5), addressing issue (1), user unknown (1). When you see 550 5.1.1 User unknown, the 550 is the traditional code and the 5.1.1 is the enhanced code providing the specific diagnosis.
Always look at the enhanced status code (x.y.z) rather than just the three-digit code. Multiple different problems can produce the same three-digit code (e.g., 550), but the enhanced code will tell you specifically whether it is an invalid address, a policy rejection, or a blacklist block. Use the email header analyzer to parse bounce messages and extract these codes automatically.
2xx Success Codes
These codes confirm that the receiving server accepted your command. You will see them in server logs during normal, successful delivery.
| Code | Enhanced | Meaning |
|---|---|---|
| 220 | - | Server ready. The receiving server has accepted the connection and is ready for commands. |
| 250 | 2.0.0 | Command completed successfully. Used after EHLO, MAIL FROM, RCPT TO, and final delivery confirmation. |
| 250 | 2.1.5 | Recipient address validated. The receiving server confirmed the address exists. |
| 354 | - | Start mail input. The server is ready to receive the message body after the DATA command. |
4xx Soft Bounce Codes (Temporary Failures)
A 4xx code means the delivery failed right now, but may succeed later. Your mail transfer agent (MTA) should automatically queue these messages and retry for a configured period, typically 24-72 hours. If the same 4xx code persists after all retries are exhausted, the message will bounce permanently.
421 - Service Not Available
This is the most common temporary failure. The receiving server is telling your server to slow down or try again later. Common causes include:
- Rate limiting: You are sending too many messages too quickly. This is especially common with Gmail, which limits inbound messages per minute.
- Server overload: The receiving server is busy or undergoing maintenance.
- Greylisting: The server intentionally rejects the first delivery attempt from an unknown sender, expecting legitimate servers to retry (spammers usually do not).
- Reputation issues: Some providers use 421 codes to throttle senders with marginal reputation rather than outright rejecting them.
Fix: Ensure your MTA is configured to retry with exponential backoff. If you see 421 codes consistently from a specific provider, reduce your sending rate to that domain. Check your sender reputation to rule out reputation-based throttling.
450, 451, 452 - Mailbox and System Errors
| Code | Enhanced | Cause | Fix |
|---|---|---|---|
| 450 | 4.2.1 | Mailbox busy or temporarily unavailable | Retry automatically. If persistent, the recipient may have a full or suspended mailbox. |
| 451 | 4.3.0 | Server error or processing issue | Usually resolves on its own. If persistent, there may be DNS or configuration issues on the recipient's side. |
| 452 | 4.2.2 | Insufficient storage on receiving server | The recipient's mailbox is full. Retry later, but if it persists for days, the mailbox may be abandoned. |
5xx Hard Bounce Codes (Permanent Failures)
A 5xx code means the delivery has permanently failed. Do not retry these messages without fixing the underlying issue first, as repeated attempts will damage your sender reputation.
550 - Mailbox Unavailable or Policy Rejection
The 550 error is the single most common hard bounce code, but it covers a wide range of problems. The enhanced code tells you which one:
| Enhanced Code | Meaning | Action |
|---|---|---|
| 5.1.1 | User unknown / address does not exist | Remove from your list immediately. Verify the address for typos. |
| 5.1.2 | Domain not found | The recipient domain does not exist or has no MX records. Remove the address. |
| 5.7.1 | Message rejected due to policy (spam, blacklist, or auth failure) | Check your blacklist status, verify SPF/DKIM/DMARC configuration. |
| 5.7.26 | DMARC authentication failed | Your email failed DMARC alignment. Check your DMARC, SPF, and DKIM setup. |
| 5.2.1 | Mailbox disabled or suspended | The address exists but is no longer active. Remove from your list. |
Other Critical 5xx Codes
| Code | Enhanced | Meaning | Fix |
|---|---|---|---|
| 552 | 5.2.2 | Mailbox full / exceeded quota | Recipient's mailbox is over quota. If persistent, consider removing the address. |
| 553 | 5.1.3 | Invalid address syntax | The email address format is malformed. Correct or remove it. |
| 554 | 5.7.1 | Transaction failed / message rejected | Broad rejection. Often caused by content filtering, blacklisting, or failed authentication. |
| 521 | 5.2.1 | Server does not accept mail | The host blocks all SMTP. Find an alternative way to reach the recipient. |
| 530 | 5.7.0 | Authentication required | Your server needs to authenticate before sending. Check SMTP credentials. |
Warning: If you see a sudden spike in 550 5.7.1 errors, your IP or domain may have been blacklisted. Run an immediate check with the blacklist checker and review your recent sending patterns for anomalies like a compromised account or a bad list segment.
Provider-Specific Error Codes
Major mailbox providers add their own custom error messages on top of standard SMTP codes. Here are the most common ones you will encounter:
Gmail / Google Workspace
421 4.7.0 ...unsolicited mail originating from your IP- Google has detected spam-like behavior. Reduce volume, warm up your sending, and check reputation via Google Postmaster Tools.550 5.7.26 ...does not pass DMARC verification- Your message failed DMARC. Fix SPF/DKIM alignment with your From domain.550 5.7.1 ...not RFC 5322 compliant- Your message headers are malformed. Check your email construction.
Microsoft 365 / Outlook
550 5.7.606-649 Access denied, banned sending IP- Your IP is on Microsoft's blocklist. Use the delist portal at sender.office.com to request removal.5.7.25 ...sender not authenticated for domain- SPF or DKIM is failing for your domain. Verify your DNS records.5.7.20 ...sender not authenticated by SPF- Specifically an SPF failure. Check that your sending IP is included in your SPF record.
How to Diagnose Bounce Issues
When you encounter bounce codes, follow this systematic approach:
- Collect the full bounce message. Do not just look at the three-digit code. Get the full NDR (Non-Delivery Report) including the enhanced code and any human-readable text.
- Classify the bounce. Is it a 4xx (temporary, will retry) or 5xx (permanent, needs action)?
- Read the enhanced code. The x.y.z format narrows the problem to a specific category (addressing, mailbox, security, etc.).
- Check the provider's custom message. Gmail, Microsoft, and Yahoo often include specific text explaining the rejection reason and sometimes linking to their support documentation.
- Cross-reference your infrastructure. Run your domain through the SPF checker, DKIM checker, and DMARC checker to verify authentication is properly configured.
The original SMTP specification (RFC 821, published in 1982) defined only about 12 useful response codes. The enhanced status code system (RFC 3463) was introduced in 2003 to address the problem of overloaded codes, where a single number like 550 was being used to represent dozens of different failure conditions.
Preventing Bounce Issues
Rather than constantly reacting to bounce codes, implement these preventive measures:
- Validate email addresses at collection. Use real-time email verification to catch typos, disposable addresses, and invalid domains before they enter your list.
- Maintain proper authentication. Ensure your SPF, DKIM, and DMARC records are correctly configured and aligned. Use the authentication checkers in our email authentication guide.
- Monitor bounce rates continuously. Industry best practice is to keep your overall bounce rate below 2% and your hard bounce rate below 0.5%.
- Process bounces immediately. Hard bounces (5xx) should trigger automatic removal from your sending list. Soft bounces (4xx) that persist beyond your retry window should also be flagged for review.
- Implement a suppression list. Maintain a master list of addresses that have hard-bounced and ensure they are excluded from all future sends across all your platforms.
Frequently Asked Questions
A soft bounce (4xx code) is a temporary delivery failure where the receiving server says "not right now, try again later." Your mail server will automatically retry these messages. A hard bounce (5xx code) is a permanent failure where the server says "this will never work." Hard-bounced addresses should be removed from your list immediately to protect your sender reputation.
SMTP error 550 5.7.1 means the receiving server rejected your message due to a security or policy violation. This is most commonly caused by your IP or domain being on a blacklist, failing SPF/DKIM/DMARC authentication, or your message being flagged by content filters. Check your blacklist status and authentication records to diagnose the specific cause.
A 421 error indicating too many connections means you are overwhelming the receiving server with simultaneous SMTP sessions. Reduce the number of concurrent connections your MTA opens to that domain, implement rate limiting in your sending configuration, and use exponential backoff on retries. Most major providers publish their connection limits in their postmaster documentation.
No. A 5xx code indicates a permanent failure, and retrying without fixing the underlying problem will waste resources and further damage your sender reputation. Instead, identify the root cause from the enhanced status code, fix the issue (remove invalid addresses, resolve blacklist listings, fix authentication), and only then attempt to resend if the fix is confirmed.
Enhanced SMTP status codes are three-part numbers in the format x.y.z (like 5.1.1 or 4.7.0) that provide more specific diagnostic information than the traditional three-digit SMTP codes. The first number indicates the class (success, temp fail, perm fail), the second indicates the subject category (addressing, mailbox, security), and the third provides the specific condition. They were introduced in RFC 3463 to disambiguate the limited set of original SMTP codes.