Mass mail
For whoever is running the desk.
Sending one message to many clients: a service notice, a price change, a migration window. Throttled, resumable, and per brand.
Templates
Per brand: a subject and a Markdown body with placeholders.
| Placeholder | Becomes |
|---|---|
{{first_name}} {{last_name}} {{name}} | The recipient |
{{company}} {{email}} | Their details |
{{brand}} | The brand’s name |
{{unsubscribe_url}} | Their own unsubscribe link |
{{attr.<name>}} | Anything the list supplies: service name, client code, and so on |
Plain substitution only, a missing value is empty, raw HTML is stripped. Preview with sample values and send a test to yourself before anything goes out.
Two kinds, and the difference is legal as much as technical:
- Service notice: about something they bought. Gets an unsubscribe line unless your body already carries one.
- Marketing: always ends with an unsubscribe line, no exceptions.
Lists
Three kinds:
Platform lists : Built from filters your billing platform declares, client status, active service, package, package group, unpaid invoice, client group, primary or billing contacts, signed-up date. The desk asks the platform what filters it offers, and resolves the list page by page at send time, so it is current when it sends rather than when you built it.
Desk lists : From the desk’s own clients: everyone, anyone with an open ticket, anyone with a ticket in a department since a date, or anyone carrying a tag.
Static lists
: Imported from a CSV. email is required; name, first_name, last_name, company and
external_id are recognised, and any other column becomes {{attr.column}}.
Duplicates are dropped by platform id first, then by address. “Count now” and “Show a few people” check a list before you commit to it, use both, every time.
Nothing is ever matched to a client by address.
Campaigns
A wizard: list → message → when and how fast → check → “Send to N people”. Scheduled or immediate.
The subject and body are copied into the campaign, so editing the template afterwards never changes something already in flight.
While it runs you get sent, failed, skipped and bounced counts, an estimate, and pause, resume and cancel. Three attempts per address before it counts as failed, and a per-recipient table with search, a status filter and the failure reasons.
Everything is audited: created, scheduled, started, paused, resumed, cancelled, finished.
Speed and the queue
Campaigns run on their own bulk queue, listed after the default one, so a campaign never delays a
ticket notification. On a busy desk give bulk its own worker processes; see
Install.
The send rate is yours to choose. Slower is usually better: relays rate-limit, and a burst that trips a provider’s threshold is how a domain’s reputation gets damaged.
Before you send
- Send a test to yourself, and read it on a phone.
- Check the count. A list that resolves to “everyone” is the classic mistake, and pause exists because it happens.
- Check the unsubscribe link works: click it on the test.
- Send at a sensible hour for your clients’ timezones, not yours.