Campaigns
Send to thousands of contacts with batching, throttling, and automatic retries.
What is a campaign?
A campaign is any send addressed to more than one recipient — typically from Send → Campaign mode or by selecting a contact list. Campaigns are queued and processed by a background worker so the UI never blocks while thousands of emails go out.
Recipient limits
- Max recipients per campaign: 5,000. Split larger lists into multiple campaigns.
- Duplicates: the same address is silently de-duplicated within a single campaign.
- Suppressed addresses: recipients on your unsubscribe / suppression list are skipped automatically and counted as skipped, not sent.
How sending works under the hood
- You hit Send campaign. The recipient list, template, and SMTP account are saved as a queued job.
- The campaign worker (
/api/public/hooks/campaign-worker) wakes on a cron and pulls pending jobs. - Recipients are processed in batches. Each batch respects your SMTP account's per-minute and per-hour limits.
- Every attempt is recorded in Email logs with full SMTP response, so you can audit deliveries one-by-one.
- Soft failures (greylisting, temporary 4xx) are retried automatically. Hard bounces (5xx) are added to suppression.
Per-account throttling
Each SMTP account has configurable rate limits (messages per minute / hour / day). The worker will pause a batch if sending would exceed those limits, then resume in the next tick. This protects you from being rate-limited or blacklisted by your provider.
Multiple SMTP accounts (rotation)
If you have more than one verified SMTP account, the worker can rotate between them to spread load and improve deliverability. Set a default account per campaign, or let the system pick based on remaining quota.
Monitoring a campaign
- Live counters: sent / failed / skipped update as the worker progresses.
- Email logs: filter by campaign to see every recipient's SMTP response and timestamp.
- Failure toasts: the admin gets a toast (and optional email) when an SMTP account fails repeatedly with a "Retry now" action.
Pausing or cancelling
From Campaigns → Active you can pause a running campaign. Already-sent recipients are not re-sent; the remaining queue stops at the next batch boundary. Cancelling deletes the pending queue but keeps the log of what already went out.
Best practices
- Send a test email to yourself before launching a campaign of more than 100 recipients.
- Warm up new SMTP accounts gradually — start at 100/day, double every 2–3 days.
- Always include an unsubscribe link (auto-injected when the toggle is on in Unsubscribe settings).
- Authenticate the From domain with SPF, DKIM, and DMARC. Use the Tools page to verify.