View Categories

The Mass Mailer

The mass mailer sends a designed email to a segment of your customers — a price change, a new product, a seasonal offer. You build the email visually, describe the audience with a handful of rules, check how many people that comes to, and either save a draft or schedule the send. This article is for operators.

Before you start #

Note: The mass mailer is gated on the manage_campaigns permission. That key is not part of the shipped permission set, so in a default install only a Super Admin can open these screens.

Two things must be working before a campaign will actually go out:

  • Outbound mail — configured under Platform Settings → Mail Settings.
  • Queue workers, including one consuming the bulk-email queue, plus the scheduler running campaigns:process-scheduled (it is registered to run every minute).

Creating a campaign #

  1. Open Mass Mailer → Create Campaign.
  2. Give it an Internal Name — this is for your list, not for recipients — and an Email Subject.
  3. Build the Email Body in the editor, or pick a saved template from the dropdown and select Load Template.
  4. Set the Segmentation Rules, then select Calculate Audience Size to see how many people match.
  5. Set Schedule At, choose a Save Action, and save.
The Create Campaign screen with the email builder, segmentation rules and scheduling options
The campaign editor. Calculate Audience Size resolves the rules server-side before you commit to a send.
Field What it does
Internal Name Required, up to 255 characters. Shown only in the admin list.
Email Subject Required, up to 255 characters.
Email Body Required. Built in a drag-and-drop email editor tuned for newsletters. Supports the variables {first_name}, {last_name} and {name}.
Schedule At When the campaign should go out. Leave it blank and choose Schedule / Send to send as soon as the scheduler next runs.
Save Action Save as Draft (Do not send) or Schedule / Send. Only these two states can be saved — “processing” and “completed” are set by the sender.

Choosing the audience #

Two rules always apply and cannot be switched off: the recipient must be marketing opted-in, and must not be a guest account. On top of that:

Rule Effect
Account Status Active Users Only (Default), Everyone, or Disabled Users.
Must Have Role(s) Recipient must hold at least one of the selected roles.
Must Own Product Group(s) Recipient must have a service from one of these groups.
Must Own Specific Product(s) Recipient must have a service for one of these products.

Ownership counts services that are active or pending cancellation. Where both product and group rules are set, matching either is enough; the role rule, when set, applies on top.

Warning: Accounts are marketing opted-in by default and there is no opt-in checkbox in the customer’s own settings — the unsubscribe link in a campaign email is the only way a customer switches it off. Make sure that matches the consent position set out in your privacy policy before you send anything promotional.

Templates #

A campaign template is a saved email body you can reuse. Manage them under Mass Mailer → Templates, or create one without leaving the campaign editor with Save as Template. A template has just two fields, Template Name and Template Body; loading one replaces whatever is currently in the editor.

Sending, and what happens next #

Nothing is sent from the browser. Once a campaign is scheduled and its send time has passed:

  1. The scheduled task picks it up and marks it processing, which also stops it being picked up twice.
  2. The audience is resolved and walked in batches of 500. A recipient row is created for each person.
  3. One send job per recipient is queued on the bulk-email queue.
  4. The campaign is marked completed.

Note: “Completed” means every message has been queued, not that every message has been delivered. Actual delivery depends on your workers and your mail provider.

A campaign that is processing or completed can no longer be edited or (for processing) deleted. Use Duplicate on the list to copy it into a fresh draft named “… (Copy)” with the schedule cleared.

Send Preview Email on the edit screen sends the campaign to your own address, rendered exactly as a recipient would receive it.

Tracking and unsubscribe #

Every campaign email has two things appended automatically:

  • A 1×1 tracking pixel. The first time a recipient loads it, the open is recorded against their recipient row.
  • An unsubscribe block. The link opens a confirmation page; the customer’s marketing opt-in is switched off only once they confirm there.

Both links are cryptographically signed and rate limited to 60 requests a minute, so they cannot be forged or replayed against other accounts. The campaign list’s Sent To column shows how many recipient rows exist for each campaign.

The campaigns list showing status badges, schedule and recipient counts
Draft, Scheduled, Processing and Completed campaigns, with the recipient count per campaign.

Troubleshooting #

Symptom Cause and fix
A scheduled campaign never sends The scheduler is not running. Confirm the cron entry that runs Laravel’s scheduler exists, and that campaigns:process-scheduled appears in it.
Status says Completed but no email arrived The messages are queued on bulk-email. Make sure a worker is consuming that queue, then check your mail logs.
Audience size is 0 The rules exclude everyone. Remember the two mandatory rules: guests are excluded, and anyone who has unsubscribed is excluded.
“Cannot edit a processing or completed campaign” Duplicate it instead and edit the copy.
Opens are always zero Most mail clients block remote images by default, so open tracking under-reports. Treat it as a floor, not a count.
An unsubscribe link says the link is invalid The signature was altered — usually a mail client rewriting the URL, or the link being copied by hand. Ask the customer to click it directly from the email.
The campaign sent to fewer people than the calculated audience The audience is resolved again at send time; anyone who unsubscribed or was disabled in the meantime drops out.