# Decoding Bounce Messages — Read the Tracking Log Like a Pro

> Hard bounces, soft bounces, deferred — what AcelleMail's bounce log is actually telling you, and which bounces you can ignore vs. which need action. Read the UI first, dive into the SMTP codes only when needed.

- Canonical URL: https://acellesend.com/kb/articles/decoding-smtp-error-codes-and-bounce-messages
- Author: Ryan Walsh, Audience & Analytics Editor
- Category: Troubleshooting — Common errors, debugging, delivery issues, logs, performance
- Content type: reference · Difficulty: beginner
- Tags: Acellemail
- Published: 2026-07-04 · Last updated: 2026-08-15
- Reading time: 5 min
- Publisher: AcelleMail Knowledge Base, https://acellesend.com/kb

---

## 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:

![Campaign bounce log — hard/soft mix with DSN codes](https://acellesend.com/plugins/acelle/landing/images/help/kb/smtp-error-codes/01-bounce-log-mixed.png)

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 `unsubscribed` after 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:

![Campaign overview — Failed count in stats](https://acellesend.com/plugins/acelle/landing/images/help/kb/smtp-error-codes/02-overview-bounce-stats.png)

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](https://acellesend.com/kb/articles/why-are-my-acellemail-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 `Failed` to 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

<details>
<summary><strong>Advanced: SMTP DSN code reference for operators</strong></summary>

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 status
- `X.5.X` — Mail delivery protocol status
- `X.6.X` — Message content or media status
- `X.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 (matches `5.X.X` class)
- `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:

```bash
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:

```bash
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.

</details>

## Related articles

- [Campaign stuck in Sending status](https://acellesend.com/kb/articles/why-is-my-acellemail-campaign-stuck-in-sending-status)
- [Why are my emails going to spam folder](https://acellesend.com/kb/articles/why-are-my-acellemail-emails-going-to-spam-folder)
- [Email list hygiene — clean your list for better deliverability](https://acellesend.com/kb/articles/email-list-hygiene-clean-your-list-for-better-deliverability)
- [Debugging common email delivery issues](https://acellesend.com/kb/articles/debugging-common-email-delivery-issues)

---

## Related articles

- [My Automation Isn't Triggering — How to Diagnose from the UI](https://acellesend.com/kb/articles/why-is-my-acellemail-automation-not-triggering): A welcome series or drip that won't fire on new subscribers. The Automations dashboard shows you whether the workflow is active, what trigger it's listening for, and which subscribers are eligible — three checks resolve most cases.
- [Email Delivery Issues — UI Diagnostic Checklist](https://acellesend.com/kb/articles/debugging-common-email-delivery-issues): When messages don't arrive — late, bounced, missing entirely — the AcelleMail dashboard surfaces nine signals that tell you whether the issue is sending-side or recipient-side. Walk the checklist, fix from the UI in most cases.
- [My Campaign Is Stuck in "Sending" — What to Check](https://acellesend.com/kb/articles/why-is-my-acellemail-campaign-stuck-in-sending-status): A campaign that still shows "Sending" hours after you hit send. Walk through the three UI signals that tell you what's actually happening — then the two-click fix that resolves it for most teams.
- [My Emails Are Landing in Spam — UI-First Diagnostic](https://acellesend.com/kb/articles/why-are-my-acellemail-emails-going-to-spam-folder): Spam-folder placement happens for measurable reasons. Walk the Insights page, the Sending Server config, and the Test diagnostic — three UI checks isolate the cause before anyone has to look at headers.
- [BIMI with VMC — Cost, Process, and Whether It's Worth It](https://acellesend.com/kb/articles/bimi-with-vmc-cost-walkthrough): VMC (Verified Mark Certificate) costs $1,500/yr per domain and takes 4-8 weeks to obtain. This guide walks the cost math, the trademark requirements, the alternative paths, and a decision framework for whether VMC is right for your sending program.
