# My Campaign Is Stuck in "Sending" — What to Check

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

- Canonical URL: https://acellesend.com/kb/articles/why-is-my-acellemail-campaign-stuck-in-sending-status
- Author: Ryan Walsh, Audience & Analytics Editor
- Category: Troubleshooting — Common errors, debugging, delivery issues, logs, performance
- Content type: troubleshooting · 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

---

## What to check from the dashboard

A campaign that says **Sending** hours after you launched it isn't always actually stuck — most of the time AcelleMail's auto-rerun has already picked it back up and is finishing the send in the background. The dashboard tells you whether to wait or whether to act.

Open **Campaigns** in the left sidebar. Look at the row for your campaign — there are three things to read:

![Campaign list — Sending badge visible](https://acellesend.com/plugins/acelle/landing/images/help/kb/troubleshoot-stuck/01-list-sending-badge.png)

1. **The status badge** — "Sending" means the campaign is in progress.
2. **The "Sent" counter** — does it match your list size, or is it stuck at a lower number?
3. **The "Last updated" timestamp** — when did the worker last touch this campaign?

If "Last updated" is **less than 10 minutes ago**, AcelleMail is actively sending. Refresh in a few minutes — it'll catch up.

If "Last updated" is **30+ minutes ago and Sent is below the list size**, the worker hasn't been processing this campaign — keep reading.

## Open the campaign and look at the live counts

Click the campaign name. The overview page shows the per-status breakdown — *Delivered*, *Bounced*, *Failed*, *Opened*, *Clicked*:

![Campaign overview — sending state](https://acellesend.com/plugins/acelle/landing/images/help/kb/troubleshoot-stuck/02-overview-sending.png)

The two numbers that matter:

- **Sent vs. list size** — if Sent < list size and not moving, AcelleMail isn't picking up the campaign for processing.
- **Failed count** — if this is growing, the SMTP server is rejecting messages and your campaign is stuck on the same recipient batch.

## Check the tracking log for what AcelleMail tried to send

Inside the campaign, the **Tracking log** tab is the per-message audit. Every send attempt — successful, bounced, deferred — has a row:

![Tracking log — per-message audit](https://acellesend.com/plugins/acelle/landing/images/help/kb/troubleshoot-stuck/03-tracking-log.png)

Scroll to the latest entries:

- **All rows show recent timestamps** → AcelleMail is sending right now, the dashboard is just showing slightly stale counts. Refresh in 5 minutes.
- **Latest row is hours/days old** → no send activity. The worker is the bottleneck (see below).
- **Latest rows show SMTP errors repeatedly** → your sending server credentials, IP reputation, or DNS records need attention. Open **Settings → Sending servers** and click *Test connection* on the active server.

## Common UI causes and the fix from the dashboard

| What you see | Likely cause | What to do |
|---|---|---|
| Status: Sending · Sent count not moving · Tracking log empty | The sending worker is idle. | Ask the operator to restart workers (see Advanced below). If you're self-hosted as a solo operator, see the operator section. |
| Status: Sending · Sent count = part of list · Last updated >1 hour | A batch failed mid-run; AcelleMail auto-rerun will pick it up next 10-minute window. | Wait 15 minutes. Refresh. If Sent still doesn't move, jump to the operator section. |
| Status: Sending · Failed count growing fast | SMTP rejection. | **Settings → Sending servers → Test connection**. Common causes: expired API key, exceeded daily quota, IP blocked. |
| Status: Sending · *all* recipients in tracking log show "deferred" | Receiving servers are throttling. | Wait — deferred messages are retried automatically. If still deferred after 24h, the sending server's IP needs a warm-up. See [Why are my emails going to spam](https://acellesend.com/kb/articles/why-are-my-acellemail-emails-going-to-spam-folder). |

## Pause and resume from the campaign UI

If you need to stop the send (e.g. wrong list, urgent edit), the campaign overview has a **Pause** button while it's in Sending state. Pause → fix the issue → click *Resume* — AcelleMail picks up where it left off, no duplicates.

<details>
<summary><strong>Advanced: server-side checks for the operator</strong></summary>

If the dashboard checks above point at the worker being idle, the operator needs to verify the queue worker process is running. AcelleMail pushes campaign sends onto a Laravel queue; if the worker process dies (OOM, missing cron, supervisor not running), campaigns sit in the "sending" state indefinitely.

**Quick worker check (SSH to the AcelleMail host):**

```bash
# Is the queue worker process up?
ps aux | grep "queue:work" | grep -v grep

# How big is the queue backlog?
php artisan queue:size

# How many failed jobs need a retry?
php artisan queue:failed | wc -l
```

**Restart the worker** (assumes Supervisor is managing it — the recommended install pattern):

```bash
supervisorctl restart acelle-queue-worker:*
```

If you're running the worker manually without Supervisor:

```bash
nohup php artisan queue:work --queue=high,default,low --sleep=3 --tries=3 &
```

**Force a campaign rerun** — AcelleMail's `SendCampaign` console command picks up stuck campaigns in 10-minute windows. To trigger it immediately:

```bash
php artisan acelle:send-campaign --force
```

**Cron check**: AcelleMail's `acelle:run` command is the master scheduler. If it stopped running (cron disabled, crontab edited), campaigns never get picked up. Confirm with:

```bash
crontab -l | grep acelle:run
# Expected: * * * * * php /path/to/acelle/artisan acelle:run >/dev/null 2>&1
```

**Inspect failed jobs**:

```bash
php artisan queue:failed
# If a campaign send failed and the worker gave up after `tries` exhausted,
# retry it with:
php artisan queue:retry all
```

**Logs to read** when the dashboard counts don't match worker behavior:

- `storage/logs/laravel.log` — Laravel exceptions during send
- `storage/logs/queue-worker.log` (if configured) — per-job timing
- The campaign tracking log inside the dashboard remains the source of truth for per-recipient outcome; the operator logs explain WHY the worker stalled.

</details>

## Related articles

- [Why is my automation not triggering](https://acellesend.com/kb/articles/why-is-my-acellemail-automation-not-triggering)
- [Why are my emails going to the spam folder](https://acellesend.com/kb/articles/why-are-my-acellemail-emails-going-to-spam-folder)
- [Decoding SMTP error codes and bounce messages](https://acellesend.com/kb/articles/decoding-smtp-error-codes-and-bounce-messages)
- [Setting up queue workers and cron jobs](https://acellesend.com/kb/articles/setting-up-queue-workers-and-cron-jobs)

---

## Related articles

- [Decoding Bounce Messages — Read the Tracking Log Like a Pro](https://acellesend.com/kb/articles/decoding-smtp-error-codes-and-bounce-messages): 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.
- [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 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.
