The 2 categories of bounce#
Every bounced email falls into one of two buckets:
Hard bounce (5.x.x DSN codes) — permanent failure. The address doesn't exist, the domain doesn't exist, the mailbox is closed. Retrying won't help. AcelleMail auto-marks the subscriber as bounced and stops sending.
Soft bounce (4.x.x DSN codes) — temporary failure. Mailbox full, server busy, greylist delay. AcelleMail auto-retries on a schedule (typically 1h, 6h, 24h). If retries also fail, AcelleMail may eventually flip to hard.
Reading the bounce log = reading the DSN codes + the receiving server's reason text. Most bounces self-explain.
Read the bounce log#
Open the campaign → Bounce log tab:

Each row shows:
- Recipient email — the subscriber that bounced
- Bounce type chip — Hard (red) or Soft (yellow)
- Reason text — the receiving server's verbatim response, with the DSN code in front
- Date — when the bounce was recorded
Common DSN codes + what they mean#
Hard bounces (5.x.x)#
| Code |
Meaning |
What to do |
| 5.1.1 |
"The email account that you tried to reach does not exist" |
Address invalid — typo or deleted account. AcelleMail unsubscribes. |
| 5.1.10 |
Recipient address rejected (NoSuchUser) |
Same as 5.1.1 |
| 5.2.0 |
Mailbox issue (often locked) |
Hard fail; AcelleMail unsubscribes |
| 5.4.1 |
Recipient address rejected (domain doesn't exist) |
Domain dead — typo at signup. Audit signup form validation. |
| 5.4.4 |
DNS resolution failure |
Domain dead |
| 5.7.1 |
"Message rejected — not authenticated" |
Authentication broken (SPF/DKIM/DMARC) — issue is YOUR side, not recipient. Investigate. |
| 5.7.x |
Various authorization failures |
"Delivery not authorized" — likely IP blocked or DMARC alignment broken |
Soft bounces (4.x.x)#
| Code |
Meaning |
What to do |
| 4.2.2 |
Mailbox quota exceeded |
AcelleMail retries; may eventually hard if persists |
| 4.3.1 |
Server out of disk space |
Receiver issue — wait |
| 4.4.1 |
Connection timeout |
Receiver overloaded — AcelleMail retries automatically |
| 4.5.3 |
Too many recipients in this connection |
AcelleMail batches reduce; usually auto-resolves |
| 4.7.0 |
Greylisted — retry later |
Anti-spam tactic. AcelleMail retries; succeeds on second try usually |
| 4.7.1 |
"Try again later" — could be soft or escalating |
Watch the rate; if 4.7.1 spikes >5%, may be reputation hit |
Real bounces from the screenshot#
From the bounce log screenshot above, you can see real examples:
mooreevamaa@howarra.com hard 550 5.1.1 The email account...
clayton87@ledisra.info soft 550 5.2.2 The email account ...
cosbynicky@dboy.com hard 550 5.7.1 Message rejected...
saraganthan@nichols-house.info hard 550 5.2.5 The message exceeded...
Each row tells the story:
mooreevamaa@... — address doesn't exist. Hard bounce. Already unsubscribed.
clayton87@... — mailbox capacity issue (5.2.2). Soft bounce. Retry.
cosbynicky@... — authentication issue (5.7.1). Hard. Investigate YOUR setup.
saraganthan@... — message too large for recipient. Hard. Reduce attachment size.
What AcelleMail does automatically#
| Bounce category |
Auto-action |
| Hard (5.1.x, 5.4.x) |
Subscriber flipped to bounced status; future sends skip them |
| Hard (5.7.x — auth issues) |
Subscriber may NOT be flipped (issue is your side); investigate before bulk unsubscribe |
| Soft (4.x.x) |
Retry queued at 1h, 6h, 24h; after 3 fails, may convert to hard |
| Spam complaint (separate from bounce) |
Subscriber flipped to unsubscribed; future sends skip |
| Trap hit (specific 5.7.x patterns from known traps) |
Subscriber unsubscribed; sending IP flagged for monitoring |
Common UI signals + fixes#
| Symptom |
Likely cause |
UI fix |
| 5.1.1 spike to 10%+ on first send to a freshly imported list |
Bad import source (purchased list?) |
Pause; run email verification on full list; re-import only verified addresses |
| 5.7.1 across all messages |
Your DKIM signing broken |
Sending-server detail → verify DKIM record at DNS host |
| 5.7.x to one specific recipient domain |
That receiver blocking you |
Investigate per-domain; possibly add to suppression until reputation recovers |
| 4.7.0 (greylisted) on 30% of sends |
Many receivers greylisting |
Wait — AcelleMail retries within 5-30 minutes; usually self-resolves |
| 4.2.2 (mailbox full) creeping up |
Stale list with abandoned addresses |
After 3 retries fail, convert to hard; clean list periodically |
| 5.2.5 (message too large) |
Email body or attachment too big |
Reduce inline images; host externally |
| Hard bounce on engaged subscriber (who opens regularly) |
Address temporarily off (DNS glitch, account locked) |
Wait 24h; manually re-activate if they re-engage |
When to manually re-add a bounced subscriber#
If a subscriber bounces hard but you have evidence they still want emails:
- Open subscriber detail in Audience → list → [subscriber email]
- Verify they explicitly re-confirm via a fresh signup form OR direct email request
- Re-add manually OR flip status from
bounced back to subscribed
- Send first email at low volume to verify deliverable
DO NOT bulk-re-add bounced addresses without re-confirmation. Bounce-rate damage compounds.
Advanced: DSN code deep reference + per-domain bounce mining + auto-reactivation patterns
The DSN (Delivery Status Notification) standard is RFC 3463 + 5248. Three-part code:
X.Y.Z
│ │ │
│ │ └── Detail (subject status — e.g. 1 = mailbox doesn't exist)
│ └───── Subject (status class — e.g. 7 = security issue)
└───────── Major (5 = permanent, 4 = transient, 2 = success)
Common subject codes (Y position):
| Y |
Status class |
| 0 |
Other/undefined |
| 1 |
Addressing — bad mailbox or address |
| 2 |
Mailbox status — exists but unable |
| 3 |
Mail system — receiving server issue |
| 4 |
Network — connection issue |
| 5 |
Mail delivery protocol — SMTP-level issue |
| 6 |
Message content — body/MIME issue |
| 7 |
Security — authentication/policy block |
Detail codes (Z position) get specific. Examples:
- 5.1.1 = "Bad destination mailbox" (most common hard)
- 5.7.1 = "Delivery not authorized" (auth issue)
- 5.7.7 = "Message integrity failure" (DKIM check failed)
Most receivers also include human-readable text after the code. Read both — the code categorizes, the text specifies.
Per-domain bounce mining via SQL (replace bounce_logs with your DB_TABLES_PREFIX):
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', -2) AS recipient_domain,
SUM(CASE WHEN bounce_type = 'hard' THEN 1 ELSE 0 END) AS hard_total,
SUM(CASE WHEN bounce_type = 'soft' THEN 1 ELSE 0 END) AS soft_total,
COUNT(DISTINCT dsn_code) AS distinct_codes,
GROUP_CONCAT(DISTINCT LEFT(reason, 60) ORDER BY created_at DESC) AS sample_reasons
FROM bounce_logs
WHERE created_at >= NOW() - INTERVAL 7 DAY
GROUP BY recipient_domain
HAVING hard_total + soft_total > 50
ORDER BY hard_total DESC
LIMIT 20;
Reveals: which receivers are giving you trouble + what they're saying. Often surfaces patterns like "all yahoo.com bouncing 4.7.0" → greylisting from Yahoo → patience required.
Auto-reactivation pattern for soft → hard conversions that resolved:
# Daily cron: identify subscribers in `bounced` state that received successful
# sends from OTHER systems (e.g. via CRM bridge) — auto-reactivate.
# Pseudo-code; adapt to your tooling
for subscriber in subscribers.bounced:
if recent_crm_activity(subscriber, days=30) and reason_was_soft_to_hard(subscriber):
flip status to subscribed
send_low_volume_test_campaign(subscriber)
monitor first 2 sends
Recovers ~5-10% of bounced subscribers who're still valid but had a temporary issue (server outage, account lock that resolved).
Hard-to-soft retry policy via per-server config:
Some operators want more retries before flipping soft to hard. In the sending-server admin config, the Retry policy field accepts:
default — 3 retries (1h, 6h, 24h) then flip to hard
aggressive — 5 retries (1h, 6h, 24h, 72h, 168h)
conservative — 2 retries (1h, 24h)
For B2B receivers (Proofpoint, Mimecast) that greylist heavily, aggressive retains more addresses.
Bounce-to-list-update pipeline — feed hard bounces back to your CRM-of-record to mark the contact as undeliverable:
# Wire AcelleMail's `subscriber.bounced` webhook to your CRM
# (configurable in admin → API & Webhooks)
# Webhook fires on each bounce flip with:
{
"event": "subscriber.bounced",
"subscriber_email": "...",
"list_uid": "...",
"dsn_code": "5.1.1",
"bounce_type": "hard",
"reason": "..."
}
# CRM updates: contact.email_status = bounced
# Sales team sees the warning before next email outreach
End result: bounces don't just live in AcelleMail — they propagate to wherever the contact also exists.
Related articles#