Definition
Every step of an SMTP conversation gets a reply code from the receiving server. Bounce messages quote them, so they are worth learning to read.
The basic reply code has three digits (RFC 5321). The first digit is what matters most:
- 2xx: success.
250means the command was accepted. - 4xx: temporary failure. Try again later.
421and451are common. - 5xx: permanent failure. Do not retry.
550and554are common.
The enhanced status code (RFC 3463) adds detail in the form class.subject.detail, for example 5.1.1:
| Code | Usual meaning |
|---|---|
| 5.1.1 | Mailbox does not exist |
| 5.1.2 | Domain does not exist or cannot be reached |
| 5.2.2 | Mailbox full (often treated as temporary in practice) |
| 5.7.1 | Delivery not authorised, often a policy or block |
| 4.7.x | Temporary policy or reputation deferral |
A full bounce line might read 550 5.1.1 The email account that you tried to reach does not exist. The text after the codes varies by provider and often contains a link to their sender guidelines.
Why it matters
The code tells you what to do next. A 5.1.1 means remove the address. A 4.x.x means wait, and your platform will usually retry for you. A 5.7.x often points at you rather than the recipient: authentication, reputation or content. Removing the address will not fix that.
Treating every bounce the same way leads to bad decisions, like suppressing good contacts after a temporary block or retrying dead mailboxes forever.
How SimpleCold handles it
During verification, SimpleCold maps what the mail server says to a status code and a plain reason. A "user unknown" reply becomes mailbox_not_found ("This mailbox does not exist."). Other server errors map to statuses such as server_error, rejected or mailbox_disabled. The failType field separates permanent from temporary, which mirrors the 5xx and 4xx split.