Troubleshooting

Emails Stuck in Queue

Cron, Supervisor, and Redis checklist when sends do not leave the queue.

May 1, 2026·8 min read· Beginner

When campaigns show Sending forever or the queue table grows without delivery, the problem is almost always workers not running, a misconfigured queue driver, or a failed job blocking retries. This runbook walks through diagnosis in order.

Quick checks (2 minutes)

  1. Cron alive? — Is * * * * * php artisan schedule:run configured? See cron setup.
  2. Workers running? — On VPS: sudo supervisorctl status. Shared hosting: cron for queue:work --stop-when-empty.
  3. Sending server active? — Admin → Sending → Sending Servers — status green, credentials valid.
  4. Failed jobsphp artisan queue:failed or Admin → Monitor (if exposed).

Step 1 — Confirm queue connection

In .env:

QUEUE_CONNECTION=database
# or redis on VPS

After any change:

php artisan config:clear
php artisan queue:restart

Redis required? See Redis for queue processing.

Step 2 — Process one job manually

cd /path/to/senddera
php artisan queue:work --once -v

Watch output. Common errors:

  • SMTP connection refusedSMTP troubleshooting
  • Maximum execution time → raise max_execution_time in PHP-FPM/cli
  • Memory exhausted → raise memory_limit to 512M for workers

Step 3 — Inspect the jobs table

For database driver, table jobs holds pending work. Large reserved_at timestamps stuck in the past can indicate zombie workers. After stopping all workers:

php artisan queue:restart
# Only if you understand the impact — releases reserved jobs:
php artisan queue:flush  # use with care; check docs for your version

Prefer retrying failed jobs: php artisan queue:retry all

Step 4 — Supervisor configuration

Workers must run as the same user that owns storage/. Logs: storage/logs/worker.log and laravel.log. Example config in cron & workers guide.

Step 5 — Campaign-specific issues

  • Throttling — sending server rate limit pauses queue; check server dashboard
  • Empty segment — campaign completes with zero sends (not a queue bug)
  • Paused list / banned subscribers — reduces visible sends

Step 6 — Read logs

Full walkthrough: Reading application logs. Search for ProcessCampaign, SendMessage, or SMTP exceptions.

When to scale

Sustained backlog at high volume: add workers (numprocs in Supervisor), switch to Redis, tune MySQL — Scaling for 100K+ emails/day.

Run your email marketing on your own server

Full source code, no subscriber tax, unlimited sending. One-time $74 license, lifetime updates.

Get Senddera — $74 one-time