← 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

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

TypeMeaningAction
Hard bounceAddress doesn't exist or domain is invalidRemove immediately, never send again
Soft bounceInbox full, server temporarily unavailableRetry 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

  1. Validate email format at registration — regex out obviously invalid addresses
  2. Double opt-in — send a confirmation email at signup; only add confirmed addresses to your list
  3. Prune inactive addresses — remove contacts who haven't opened anything in 6 months
  4. 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.