Home / Learn / Hard vs soft bounce

Hard bounce vs soft bounce

A hard bounce means the address will never work. A soft bounce means it didn't work this time. Treat them differently, and remove hard bounces straight away.

Updated 2026-10-17

TL;DR

  • Hard bounce: permanent. The server answered with a 5xx code, for example 550 5.1.1 "user unknown". Remove the address.
  • Soft bounce: temporary. The server answered with a 4xx code (busy, rate limited, greylisted). Your platform retries it.
  • Hard bounces are what burn domains. Verifying before you send removes most of them.

Where bounces come from

When you send an email, your sending server talks to the recipient's mail server over SMTP. Every step gets a three-digit reply code. Codes starting with 2 mean success, 4 means "not now, try later", and 5 means "no, and don't try again" (RFC 5321, checked 2026-10-17). A bounce is your server reporting one of those failures back to you. The first digit is what separates hard from soft.

Hard bounceSoft bounce
SMTP code5xx (permanent)4xx (transient)
Enhanced code5.x.x4.x.x
Typical causesMailbox doesn't exist, domain doesn't exist, domain accepts no mail, address malformedServer busy or down, rate limiting, greylisting, mailbox temporarily over quota
Does the server retry?NoYes, usually for hours to days before giving up
What to doRemove the address at onceLeave it; remove it if it keeps failing across campaigns

Common hard bounces

  • 550 5.1.1 The mailbox doesn't exist. The most common hard bounce, and the one verification catches best.
  • 550 5.1.10 The domain publishes a "null MX", meaning it accepts no mail at all.
  • 553 5.1.3 The address isn't valid syntax.
  • No MX or DNS record at all: your server can't find anywhere to deliver, so the message fails without a reply from the recipient.

Common soft bounces

  • 421 4.7.0 or 421 "try again later": the server is limiting how fast it accepts mail from you.
  • 450 / 451 with a greylisting message: the server refuses first contact from an unfamiliar sender and accepts a retry a few minutes later.
  • 452 4.2.2 The mailbox is over quota for now.

See the full table in email bounce codes.

The grey zone: blocks and full mailboxes

Policy blocks such as 550 5.7.1 "client host blocked using Spamhaus" are 5xx codes, so platforms often count them as hard bounces. But they're about your sending server or domain, not the address. The mailbox may be perfectly fine. If you see a run of 5.7.x bounces, fix your sending reputation or authentication rather than deleting the contacts.

Full mailboxes are sometimes reported as 552 5.2.2, a permanent code for what is often a temporary state. A mailbox that has been full for months is usually abandoned, though, so repeated full-mailbox bounces are a good reason to drop the address.

Why hard bounces matter more

Mailbox providers read a high hard-bounce rate as a sign that you're mailing a list you didn't build carefully. Sending platforms watch it too: Instantly, for example, pauses a campaign at 5% bounces after 200 sends by default. Aim for under 2%. The numbers per platform are in how many bounces burn a domain? and Instantly campaign paused for bounce rate.

How verification relates to bounces

A verifier asks the recipient's server the same "will you take mail for this address?" question your sender would, then stops before sending anything (how that works). If the server answers 5xx for the mailbox, we report undeliverable (rejected_email), which is a hard bounce you avoided. If it keeps answering 4xx, we retry after a pause, and if there's still no clear answer we report unknown and refund the credit. A 5.7.x block aimed at our server is also reported as unknown, never as a dead address.

Verification can't prevent every hard bounce. Catch-all domains accept every address during the check and may bounce later. That's why we label them risky instead of deliverable.

Related