Read the bounce log from the campaign report
AcelleMail tracks every send attempt — including bounces — in the campaign's Tracking log. Open any sent campaign → Bounces tab:

Each row shows:
- Recipient email — who didn't receive
- Bounce type — Hard (permanent — invalid address, domain doesn't exist) or Soft (temporary — mailbox full, server unreachable)
- DSN reason — the receiving server's response, in plain-ish English
- Time — when AcelleMail tried to deliver
What AcelleMail does automatically
You don't need to manually clean up most bounces. AcelleMail's bounce handling runs automatically:
- Hard bounces are marked as
unsubscribedafter the first occurrence. They're removed from future sends to the same list. No action needed. - Soft bounces are retried with backoff (next campaign batch). After 5 consecutive soft bounces, AcelleMail auto-promotes to hard bounce (treats as permanent).
- Spam complaints (recipient hit "This is spam") flow through SMTP-vendor webhooks (SES, SendGrid, Mailgun, Postmark) and immediately unsubscribe the subscriber.
The campaign overview shows the totals:

If Failed is <5% of the list, you're fine — that's the industry-typical churn from invalid + abandoned addresses on any list. If Failed is >10%, something needs attention (see "When to take action" below).
When to take action — UI-driven decisions
| What you see in the log | What it means | What to do |
|---|---|---|
| Most bounces say "User unknown" / "Mailbox does not exist" | Stale list — addresses that no longer exist | Normal at <5%. Above that, run Subscribers → Email verification before next send. |
| Most bounces say "Mailbox full" / "Quota exceeded" | Temporary issue on the recipient side | Wait — AcelleMail retries automatically. No action. |
| Bounces concentrate on ONE recipient domain (e.g. all @example.com fail) | The receiving server may be blocking your sending IP | Check Settings → Sending servers for the IP being used. If multiple domains block you, IP reputation issue. See Why are my emails going to spam folder. |
| Bounces say "Authentication failed" / "DMARC failure" | Your domain authentication (SPF / DKIM / DMARC) isn't configured correctly | Run Settings → Domains → Verify and follow the wizard. |
| Bounces growing during a send (started low, spiking) | Your sending IP is being rate-limited mid-send | Sending server warm-up is incomplete OR daily quota exceeded. Wait or split campaign. |
The Subscribers view — clean up manually if needed
If you want to manually mark certain addresses unsubscribed (e.g. an entire former-customer list), open Subscribers in a list, filter by status, and bulk-change:
- Filter by status
Failedto see hard-bounced addresses. - Bulk-select rows → top toolbar → Change status → Unsubscribed.
- The list count + future sends update immediately; no separate suppression step needed.
Common UI signals — quick recap
- Failed count <5% of list → ignore, AcelleMail handles it
- Failed count >10% of list → run email verification before next send
- Bounces clustered on one domain → IP/DNS issue, check sending server
- "Authentication failed" bounces → fix SPF/DKIM/DMARC
Advanced: SMTP DSN code reference for operators
SMTP responses follow RFC 3463 (Enhanced Mail System Status Codes). Three digits, separated by dots: X.Y.Z.
Class (X) — severity:
2.X.X— Success (delivered)4.X.X— Persistent transient failure (will retry — soft bounce)5.X.X— Permanent failure (will NOT retry — hard bounce)
Subject (Y) — what failed:
X.1.X— Addressing status (recipient address)X.2.X— Mailbox status (full, disabled, doesn't exist)X.3.X— Mail system status (overloaded, down)X.4.X— Network and routing statusX.5.X— Mail delivery protocol statusX.6.X— Message content or media statusX.7.X— Security or policy status (authentication, blacklist, DMARC)
Common codes you'll see:
| Code | Meaning | Action |
|---|---|---|
2.0.0 |
Message accepted for delivery | Success — no bounce |
4.2.2 |
Mailbox full | Soft — retried automatically |
4.7.0 |
General temporary failure (often greylisting) | Soft — retried |
5.1.1 |
User unknown (recipient address doesn't exist) | Hard — auto-unsubscribe |
5.1.2 |
Domain doesn't exist | Hard — auto-unsubscribe |
5.2.0 |
Mailbox issue (suspended, archived) | Hard |
5.2.1 |
Mailbox disabled | Hard |
5.7.1 |
Delivery not authorized (blocked) — common when sender on blocklist | Hard — investigate IP reputation |
5.7.26 |
DMARC failure (alignment policy) | Hard — fix DKIM/SPF setup |
Reading the full DSN in the log:
The "DSN reason" column shows the full response string from the receiving server, e.g.:
550 5.1.1 <bob@example.com>: Recipient address rejected: User unknown in local recipient table
550— SMTP-level rejection code (matches5.X.Xclass)5.1.1— Enhanced status code (RFC 3463)- The text after — server's human-readable reason
Querying the bounce log from the database for offline analysis:
php artisan tinker --execute='
\App\Model\BounceLog::where("campaign_id", <id>)
->where("dsn_status", "like", "5.7%")
->select("recipient", "dsn_status", "diagnostic_code")
->get()
->each(fn($r) => print("{$r->recipient}\t{$r->dsn_status}\t{$r->diagnostic_code}\n"));
'
Filtering FBL (Feedback Loop) entries — recipient marked your message as spam:
php artisan tinker --execute='
\App\Model\FeedbackLog::orderByDesc("created_at")
->limit(50)->get()
->each(fn($r) => print("{$r->recipient}\t{$r->feedback_type}\t{$r->created_at}\n"));
'
When the FBL volume rises sharply, your IP reputation is in jeopardy — pause campaigns to that segment, investigate content + frequency.
Related articles
- Campaign stuck in Sending status
- Why are my emails going to spam folder
- Email list hygiene — clean your list for better deliverability
- Debugging common email delivery issues
14 bình luận