Groundmail

Learn · SMTP errors

SMTP error codes: what they mean and how to fix them

How to read a bounce, which codes mean the address is bad and which mean the sender was refused, and what to do about the common ones at Gmail, Outlook and Yahoo.

Error code guides

How SMTP error codes are built

A bounce usually carries two codes and a sentence, like 550 5.1.1 The email account that you tried to reach does not exist.

  • The basic reply code (550) comes from SMTP itself, RFC 5321. The first digit says how it went: 2 success, 3 send more, 4 temporary failure, 5 permanent failure. The second digit is the category (5 is about the mail system or mailbox) and the third narrows it down.
  • The enhanced status code (5.1.1) comes from RFC 3463 and reads as class.subject.detail. The class repeats the first digit (4 or 5). The subject says what kind of problem it is: 1 addressing, 2 mailbox, 3 mail system, 4 network and routing, 5 protocol, 6 content, 7 security and policy. The detail is the specific reason, registered with IANA.
  • The text is written by the receiving server and is often the most useful part. Gmail, Microsoft and Yahoo publish what theirs mean.

4xx vs 5xx, soft vs hard bounces

4xx (temporary)5xx (permanent)
MeaningNot now; try again laterNo; sending the same thing again won't work
Examples421 4.7.0 try again later, 450 mailbox busy, 452 4.2.2 mailbox full550 5.1.1 user unknown, 550 5.7.1 refused, 554 5.7.1 transaction failed
Often calledSoft bounce or deferralHard bounce
What the sending server doesQueues and retries for hours or daysGives up and sends a bounce

Common SMTP error codes

CodeMeaningAboutWhat to do
550 5.1.1Bad destination mailbox (user unknown)AddressSuppress
550 5.1.10Recipient not found (Microsoft 365)AddressSuppress
550 5.2.1Mailbox disabled or inactiveAddressSuppress
552 5.2.2Mailbox fullAddressRetry later; suppress if it persists
550 5.7.1Delivery not authorized, message refusedSenderFix the cause in the text
554 5.7.1Transaction failed: relay denied, blocklist, policySenderFix the cause in the text
550 5.7.26Multiple authentication checks failed (Gmail: unauthenticated or DMARC)SenderFix SPF, DKIM, DMARC
550 5.7.25Reverse DNS (PTR) check failedSenderAdd a PTR record for the sending IP
550 5.7.509DMARC failed with p=reject (Microsoft)SenderFix DMARC alignment
550 5.7.515Authentication level not met (Outlook.com)SenderPass SPF, DKIM and DMARC
421 4.7.0Try again later; often reputation or missing PTR (Gmail)SenderSlow down; the server retries
421 4.7.28Unusual rate of mail (Gmail)SenderReduce volume spikes; the server retries
535 5.7.8Authentication credentials invalidYour SMTP loginFix the username or password
550 permanent failureGeneric permanent refusalDependsRead the enhanced code and text
SPF PermErrorSPF record can't be evaluatedSenderFix the SPF record

Meanings from RFC 3463, RFC 7372, Google, Microsoft and Yahoo. Linked codes have their own page.

How Groundmail handles bounces

  • Temporary (4xx) replies are retried by the mail server. You get an email.delivery_delayed webhook while it does.
  • Hard bounces (bounce_type: "hard"): the address can't receive mail. It's suppressed automatically, and later sends to it return 422 instead of bouncing again.
  • Block bounces (bounce_type: "block"): the receiver refused the sender for reputation or policy. The address is not suppressed and the bounce doesn't count toward your bounce rate.
  • Every bounce keeps the receiver's full reply in bounce_reason, on the email and on the email.bounced webhook.

Before a send goes out, Groundmail validation also holds back addresses that can't receive mail, such as domains with no mail server, so many hard bounces never happen. Details are in the emails and suppressions docs.

Tools for diagnosing bounces

Frequently asked questions

What's the difference between a 4xx and a 5xx SMTP error?

A 4xx reply is temporary: the receiving server is asking you to try again later, and the sending server retries automatically. A 5xx reply is permanent: the same message won't be accepted if you resend it.

What is an enhanced status code?

The X.Y.Z code after the 3-digit reply, defined in RFC 3463. X is the class (4 temporary, 5 permanent), Y the subject (1 addressing, 2 mailbox, 7 security or policy, and so on) and Z the specific detail.

What's the difference between a soft bounce and a hard bounce?

A soft bounce is a temporary failure, usually a 4xx reply, which the sending server retries. A hard bounce is a permanent failure, a 5xx reply. Among hard bounces, a 5.1.x code means the address is bad and should be suppressed, while a 5.7.x code usually means the sender was refused and the address is fine.

Should I remove an address after a bounce?

Only when the bounce is about the address: unknown user, mailbox disabled, domain with no mail server. Refusals for policy, reputation or authentication are about the sender; fix the cause and keep the address.

Why does my bounce say 550 permanent failure with no detail?

Some sending systems summarise every 5xx as a permanent failure. The full bounce or your provider's logs should include the receiving server's own code and text, which is what tells you the cause.

Sources

Code meanings come from the SMTP standards; receiver-specific wording from each mailbox provider's published documentation.

Bounces sorted for you.

Groundmail suppresses hard bounces automatically, never suppresses an address for a block, and keeps the receiver's reply on every bounce. Free for 3,000 emails a month.