Skip to content
Groundmail

Guides

Soft bounce vs hard bounce: what's the difference?

A soft bounce is a temporary 4xx failure to retry; a hard bounce is a permanent 5xx failure. How to tell them apart, common codes, and what to do with each.

By GroundmailUpdated All guides →

Short answer

A soft bounce is a temporary failure: the receiving server answers with a 4xx code (mailbox over quota, rate limited, try again later) and the sending server retries. A hard bounce is a permanent failure: a 5xx code, where sending the same message again won't work.

The code tells you which, but not why. A hard bounce about the address (550 5.1.1, the mailbox doesn't exist) means stop sending to it. A hard bounce about the sender (550 5.7.26, failed authentication) means the address is fine and your setup needs fixing. Suppress the first kind; fix the cause of the second.

Soft bounce and hard bounce, defined

TopicSoft bounceHard bounce
Also calledDeferral, temporary failure, transient failurePermanent failure, rejection
SMTP reply code4xx, for example 421, 450, 4525xx, for example 550, 552, 554
Enhanced status code4.x.x, for example 4.2.2, 4.7.05.x.x, for example 5.1.1, 5.7.1
What the standard saysThe error is temporary and the request may be made againThe client should not repeat the exact request
What the sending server doesKeeps the message in its queue and retriesStops and reports the failure
What you doUsually nothing; let the retries runDepends on whether it's about the address or about you

Reply classes from RFC 5321, section 4.2.1; enhanced status classes from RFC 3463.

RFC 5321's rule of thumb: a reply is 4xx if the same command could succeed if repeated unchanged, and 5xx if something has to change first, such as the spelling of the address or the recipient's account status. RFC 3463 says the same for its classes: 4.x.x is a "persistent transient failure" where "sending in the future may be successful", and 5.x.x is a permanent failure.

"Bounce" is used loosely. Strictly, a soft bounce is a deferral, and you only get a bounce message if the sending server gives up. RFC 5321 suggests retrying for at least 4 to 5 days before giving up, though providers choose their own window.

How to tell them apart

A bounce carries a three-digit reply code, usually an enhanced status code, and a line of text from the receiving server. Read them in that order:

  • First digit of the reply code: 4 is a soft bounce, 5 is a hard bounce.
  • First digit of the enhanced code repeats it: 4.x.x or 5.x.x.
  • Middle digit of the enhanced code says what the problem is about: 1 addressing, 2 the mailbox, 3 the mail system, 4 network and routing, 5 the protocol, 6 the message content, 7 security and policy.
  • The text says why, in the receiver's words. It's often the only way to tell whether a 5.7.1 is about you or the recipient.
A soft bounce from Gmail (shortened)
452 4.2.2 The recipient's inbox is out of storage space. Please direct the recipient to [...]
A hard bounce about the address (shortened)
550 5.1.1 The email account that you tried to reach does not exist. [...]
A hard bounce about the sender (shortened)
550 5.7.26 This email has been blocked because the sender is unauthenticated. [...]

The same mailbox can produce either kind. Gmail answers 452 4.2.2 when a recipient's inbox is out of storage, and 552 5.2.2 when it's out of storage and inactive. The first will probably clear; the second probably won't.

Common soft and hard bounces

Soft bounces (4xx)

CodeWhat it meansAbout
452 4.2.2Mailbox full (Gmail: "The recipient's inbox is out of storage space")Recipient
450 4.2.1The recipient is receiving mail too fast (Gmail)Recipient
421 4.7.0Try again later. At Gmail, also used for a missing PTR record or very low IP or domain reputationOften the sender
421 4.7.28Gmail has seen an unusual rate of mail from your IP or domainSender
421 4.7.26Rate limited because the message is unauthenticated (Gmail)Sender
451 4.3.0, 421 4.4.5A temporary problem or a busy server at the receiverReceiver

Wording from Google's Gmail SMTP error list.

Soft bounces aren't always harmless. Gmail uses 4xx replies to slow down senders it doesn't trust yet, so a run of 421 4.7.0 or 421 4.7.28 deferrals is an early warning about your reputation or authentication, not a recipient problem.

Hard bounces (5xx)

CodeWhat it meansAboutWhat to do
550 5.1.1The mailbox doesn't existAddressSuppress
552 5.2.2Mailbox full, and at Gmail also inactiveAddressSuppress; send again only if the person tells you it's cleared
550 5.7.26Gmail: unauthenticated, or failed your DMARC policySenderFix SPF, DKIM and DMARC
550 5.7.1Delivery not authorized: a block, a policy or a recipient restrictionUsually the senderRead the text, fix the cause
554 5.7.1Transaction failed: relay denied, blocklist or policyUsually the senderRead the text, fix the cause
SPF PermErrorYour SPF record can't be evaluatedSenderFix the SPF record
550 permanent failureA generic permanent refusal with the detail strippedDependsFind the receiver's original reply

What to do with each

  • Soft bounces: let the retries run. Your provider queues the message and tries again. Don't resend it from your own code as well, or the person may get two copies once the first one is delivered.
  • Repeated soft bounces from many recipients at one provider: slow down. Google's sender guidelines say that if messages start bouncing or being deferred, reduce the sending volume until the error rate falls.
  • Hard bounces about the address: suppress. Stop sending to the address until the person gives you a corrected one. Google's guidelines say to automatically unsubscribe recipients who have multiple bounced messages.
  • Hard bounces about you: fix the cause, keep the address. Read the text. Authentication failures are fixed in DNS (SPF, DKIM and DMARC); blocklist listings need delisting (blocklist checker).
  • Fix the source of bad addresses. Most 5.1.1 bounces start as a typo at sign-up. A verification email, or a check on the address before you accept it, catches them before they cost you.

What's a good bounce rate?

Lower is better, and there's no single published line. Google's sender guidelines set a limit for spam complaints (below 0.3% in Postmaster Tools, ideally below 0.1%), not for bounces; for bounces they say to remove addresses that keep bouncing and to slow down when bounces or deferrals rise.

As a practical bar, Groundmail's own new-account sending limit only grows while an account's bounce rate stays under 2% (and complaints under 0.1%). Transactional mail to people who just signed up usually sits well below that. A sudden jump almost always means one of three things: a batch of imported or old addresses, a broken sign-up form, or a receiver blocking you, which shows up as 5.7.x bounces rather than 5.1.1.

Count only address bounces in that rate. Block bounces say nothing about your list, and counting them hides the real cause.

How Groundmail handles soft and hard bounces

What the receiver saidWhat Groundmail doesAddress suppressed?
A temporary 4xxRetries automatically. The email shows delayed, an email.delivery_delayed webhook fires, and the receiver's reply is kept in delivery.deferred_response. If the receiver keeps deferring until the retries run out, the email ends as failed with an email.failed webhook.No
A permanent refusal of the address (550 5.1.1, disabled mailbox, 552 5.2.2 mailbox full)Sets bounce_type: "hard" on the email and keeps the reply in bounce_reason. The email is bounced (with an email.bounced webhook) when the receiver sent a bounce message, or failed (with email.failed) when it refused the email during delivery. Later sends to the address return 422 with it under suppressed.Yes, automatically
A refusal of the sender (blocklist, reputation, failed authentication, spam policy)Marks the email bounced with bounce_type: "block" and fires email.bounced. The bounce doesn't count toward your bounce rate.No: you can send to it again once the cause is fixed
A refusal for the message's size (552 5.3.4)Marks the email failed with bounce_type: null. A smaller email reaches the same person.No

Groundmail reads the receiver's whole reply, not just the code, to tell an address bounce from a block. Before a send goes out, Groundmail validation also holds back addresses that can't receive mail (a malformed address, a domain with no mail server, a mailbox already known not to exist), so many hard bounces never happen. If a suppressed person tells you their address works again, remove it with DELETE /suppressions. Details are in the emails, webhooks and suppressions docs.

Frequently asked questions

Is a soft bounce bad for deliverability?

One isn't. A full mailbox or a busy server is the recipient's problem and clears on retry. Many soft bounces from one mailbox provider are different: Gmail and others defer mail from senders with low reputation or failing authentication, so read the text of the deferrals.

When does a soft bounce become a hard bounce?

When the sending server gives up retrying, the message fails for good and you get a bounce, but the cause was temporary, so the address may still be fine. Don't suppress an address for a single expired deferral. If one address soft-bounces on every send for weeks, it's probably abandoned.

Should I retry a hard bounce?

Not the same message to the same address. If the bounce was about the address, suppress it. If it was about you (a 5.7.x block), fix the cause first; once it's fixed, new mail to that address can go out normally.

Is a full mailbox a soft or hard bounce?

Either. RFC 3463 describes mailbox full as a condition the recipient can fix by deleting messages, and many servers answer 452 4.2.2 (soft). Some answer 552 5.2.2 (hard); Gmail uses it for a full mailbox that's also inactive.

What's the difference between a bounce and a block?

Both are refusals, usually 5xx. A bounce in the strict sense is about the address: it can't receive mail. A block is about the sender: the address is fine but the receiver won't take mail from you right now. They need opposite responses: suppress the address, or fix your setup and keep it.

Sources

Facts on this page about other companies' products, prices and policies come from these public pages. They change, so check them before you decide.

Email for apps. Set up by your agent.

Sign-in codes, receipts and alerts kept separate from marketing mail, with inbound, templates and automations included. Start free with 3,000 emails a month, and move to a dedicated IP or server without changing your code.