How to Handle Bounces and Blocks Properly

January 28, 2026

Retrying soft bounces for 30 days works at a basic level, but it ignores a critical distinction between recipient-side issues and sender-side problems. A more resilient approach is to separate hard bounces, soft bounces, and blocks, and handle each differently. Hard bounces should be removed permanently, soft bounces can be retried with limits, and blocks should stop sending immediately and trigger investigation. Using SMTP error codes to drive this logic helps protect sender reputation instead of slowly damaging it.

How to Handle Bounces and Blocks Properly

A product team recently asked for feedback on their approach to handling soft bounces. Their plan was straightforward - don’t delete the email address, keep sending, and if the address keeps soft bouncing for more than 30 days, remove it. If a delivery succeeds in between, reset the clock and treat the address as active again.

At a very high level, this logic is reasonable and will work fine for basic filtering. But if you have the engineering time and want a more resilient system, here what I suggest:

Create three categories:

- soft bounces
- hard bounces
- blocks

Hard bounces - these leads should be removed and never emailed again (or sent to a leadpond for a VA to check for typos / identify the correct email address). These would include things like:

- user does not exist
- invalid recipient address
- domain does not exist

And so on.

Soft bounces - these are temp issues, and you should continue sending emails to these addresses. I’m OK with retrying for 30 days. if the issue persists longer, pause sending for 6 months and then retry.

Examples:

- mailbox full
- infinite routing loop detected
- misconfigured receiving domain / no MX records
- content or formatting issues

And so on.

Blocks - these are emails that are neither hard bounces nor soft bounces. These are intentional blocks of your emails due to specific reasons, for example:

- bad IP reputation
- poor sender reputation
- blocked for policy reasons
- spammy content (incl attachments)

For blocks, sending should be stopped immediately, error codes collected, and an investigation started to address the issue. Emails should not be retried until the problem is resolved.

In short, bounces come from the receiver’s email server & infrastructure, while blocks are caused by issues on the sender’s server and infrastructure.

I recommend reviewing the SMTP error codes below, deciding which ones belong to each category, and building a system that processes emails based on the error codes returned by receiving servers: https://smtp.codes/

Related posts
All posts
Why a 24-Email Batch Triggered a Gmail Lockout

Why a Google Drive link in a Follow Up Boss batch email triggered spam flags and a Gmail sending limit error and how proper domain authentication fixes it

Why a 24-Email Batch Triggered a Gmail Lockout
Google Postmaster v2 API Signals Upcoming v1 Deprecation

Google has updated its Postmaster v2 API documentation, signaling that the v1 API is likely approaching deprecation.

Google Postmaster v2 API Signals Upcoming v1 Deprecation
Why Email Has So Many Rules (And Why That’s a Good Thing)

Email has more rules than ever, and for good reason. Different inbox providers enforce strict standards to protect users and control spam.

Why Email Has So Many Rules (And Why That’s a Good Thing)