SMTP status codes are the receiving server talking. Your ESP may label them “soft” and “hard”, but you should still read the enhanced status and the text. Misclassification keeps bad addresses on the list or drops good ones.
Hard bounces
Permanent failures: mailbox does not exist, domain does not exist, relay denied for policy that will not change. Remove the address. Sending again is how you look like a dictionary attack. Typical 5xx codes with “user unknown” or “mailbox unavailable” belong here — unless the text says the mailbox is full, which is often temporary.
Soft bounces
Temporary problems: greylisting, rate limits, full mailbox, outage. Retry with backoff. If the same address soft-bounces across many days, treat it as abandoned and suppress. A 4xx from a provider during warmup is often “slow down”, not “delete this user”.
Blocks that look like bounces
Some 550s are policy: spam content, failed authentication, or an IP on a blocklist. Those are not bad recipients; they are a reputation problem. Fix SPF/DKIM/DMARC, cut the campaign, and check listings before you purge the list.


