← Back to blog
退信到达率列表清理开发者
Bounce Handling: Hard Bounces, Soft Bounces, and List Hygiene
The difference between bounce types, receiving bounce webhooks, rate thresholds, and prevention strategies.
Updated October 12, 2026

Bounce Handling: Hard Bounces, Soft Bounces, and List Hygiene
Bounces are one of the fastest ways to destroy sender reputation. Ignoring them eventually gets you blacklisted by major providers.
Hard vs soft bounces
| Type | Meaning | Action |
|---|---|---|
| Hard bounce | Address doesn't exist or domain is invalid | Remove immediately, never send again |
| Soft bounce | Inbox full, server temporarily unavailable | Retry after a day; mark invalid after 3 consecutive failures |
Receiving bounce notifications from Rovela
app.post('/webhooks/rovela', async (req, res) => {
const { event, data } = req.body;
if (event === 'email.bounced') {
const { type, email } = data;
if (type === 'hard') {
await db.query(
'UPDATE contacts SET status = $1 WHERE email = $2',
['hard_bounced', email]
);
} else if (type === 'soft') {
await db.query(
'UPDATE contacts SET soft_bounce_count = soft_bounce_count + 1 WHERE email = $1',
[email]
);
}
}
res.sendStatus(200);
});
Bounce rate thresholds
- Hard bounce rate above 2% triggers warnings from major providers
- Soft bounce rate above 10% indicates a list quality problem
Prevention
- Validate email format at registration — regex out obviously invalid addresses
- Double opt-in — send a confirmation email at signup; only add confirmed addresses to your list
- Prune inactive addresses — remove contacts who haven't opened anything in 6 months
- Never buy email lists — purchased lists have terrible quality and high bounce rates
Rovela's Suppressions feature automatically records bounced and complained-about addresses and skips them on future sends, so you don't need to maintain a manual blocklist in your application code.