# Hard bounce: Definition and How It Works

Source: https://wraps.dev/glossary/hard-bounce

A hard bounce is a permanent delivery failure — the address or domain doesn't exist — reported with an SMTP 5xx code, and the address should never be sent to again without a fresh, confirmed reason to believe it's valid.

## What it actually means

A hard bounce says the recipient's mail server has permanently refused the message, most commonly because the mailbox doesn't exist, the domain doesn't exist or has no MX records, or the account has been closed. Unlike a soft bounce, there is no future retry that fixes this — the condition doesn't resolve itself, it only changes if someone actively re-enters that exact address correctly some other time.

## The SMTP code family and what triggers it

A hard bounce corresponds to an SMTP 5xx response — 550 (mailbox unavailable) is the classic example — distinct from the 4xx family that signals soft, temporary failures. Some receivers are stricter than others about which conditions they report as 5xx versus 4xx, so the boundary isn't always perfectly crisp in practice, but a genuine 5xx is meant to be treated as final.

## SES suppresses it automatically

AWS SES adds a hard-bounced address to the account-level suppression list automatically, and by default refuses to send to a suppressed address again without an explicit override. This is the single biggest structural difference between running SES directly and running a self-hosted mail server, where nothing suppresses a hard-bounced address unless you build that logic yourself.

## This is the number that gets accounts paused — but not every hard bounce counts

AWS's bounce rate is narrower than "hard bounces" as a whole: it counts only hard bounces to domains you have not verified in SES. A hard bounce against a domain you've verified — including your own test domains — is excluded entirely, and soft bounces never count toward this metric either way. There's no fixed window it's measured over; AWS computes it across a representative volume of recent sending that varies per sender, which is also why you can't reproduce the exact number yourself from the console. A list with a persistently high rate against unverified domains is a list-acquisition problem (purchased lists, no confirmation step, years-old addresses never re-verified), and suppressing individual bad addresses after the fact treats the symptom without fixing what keeps adding new ones.

## Why it matters

Hard bounces are the clearest, least ambiguous signal a mailbox provider has that a sender doesn't maintain its list — every other reputation signal has some noise or subjectivity to it, but an address that simply does not exist is unambiguous. That's exactly why it carries so much weight in both AWS's own thresholds and every major mailbox provider's reputation scoring.

## How to check it

```
aws sesv2 list-suppressed-destinations --reasons BOUNCE
```

## Common questions

### Should I ever retry sending to a hard-bounced address?

Not without a specific, fresh reason to believe the address is valid again — the condition that caused a hard bounce (nonexistent mailbox or domain) doesn't resolve on its own. SES will refuse to send to it anyway unless you explicitly override the suppression.

### Does SES automatically stop me from re-sending to a bounced address?

Yes. SES adds hard-bounced addresses to its account-level suppression list and refuses further sends to them by default, which is a meaningful safety net compared to a self-hosted setup where nothing enforces that unless you build it.

### How does a hard bounce affect my SES account's bounce rate?

Only if the domain isn't verified in your SES account. AWS states the bounce rate counts exclusively hard bounces to unverified domains — a hard bounce against a domain you've verified, including your own test domains, doesn't count at all, and neither does a soft bounce either way.
