Surfaces
Email Blasts
Branded event email campaigns, recipient targeting, previews, and rego-site inbox copies.
First created Last updated
Overview
Email Blasts is the channel-specific Communications page for sending branded event updates by email. It also creates the matching rego-site inbox notification for each selected attendee account, so staff should treat the compose form as attendee-facing production copy.
Use Email Blasts when the message needs the event email template, a subject line, reply routing, and an inbox copy. Use SMS Blasts only when the message must go through attendee phone numbers and the event has a verified online Android sending device.
Dashboard route
/ems/manage/communications/email-blasts?id=:eventId
The parent /ems/manage/communications?id=:eventId route is only the Communications section index. It should not own the email composer. The sibling SMS surface lives at /ems/manage/communications/sms-blasts?id=:eventId.
Recipient controls
| Control or element | Type | What it does | Operational impact | Check before using |
|---|---|---|---|---|
| Audience groups | Checkbox mode | Shows generated event recipient groups such as everyone, attendees, staff, volunteers, dealers, applicants, and waitlisted attendees. | Selects broad sets of recipient accounts for the blast. Overlapping groups are deduplicated by the API before delivery. | Confirm the group is not broader than the actual announcement scope. |
| Specific attendees | Checkbox mode | Shows the attendee picker for exact account targeting. | Lets staff send to named attendees without selecting a full group. | Use when a support update, correction, or follow-up should not go to a full audience. |
| Audience group cards | Checkbox list | Selects one or more generated groups and shows each group’s current recipient count. | Drives the audienceIds sent to preview and delivery. | Re-read the selected labels before sending, especially when Everyone is selected. |
| Search attendees | Search input | Filters attendee candidates by display name, username, email, source, status, or account ID. | Narrows only the picker view; it does not change saved records. | Clear the search before deciding an attendee is missing. |
| Filter | Status filter dropdown | Narrows the attendee picker to active, pending, or other status groups. | Helps staff avoid selecting the wrong registration/application state. | Confirm the filter is not hiding intended recipients. |
| Select visible | Checkbox | Selects or clears the attendee rows visible under the current search and filter. | Can add many exact attendees at once. | Check the current search and filter first so hidden rows are not accidentally skipped. |
| Audience summary | Generated text | Summarizes selected groups and exact-attendee counts. | Gives staff the fastest review of recipient scope before preview or send. | Stop if the summary does not match the intended audience. |
Compose controls
| Control or element | Type | What it does | Operational impact | Check before using |
|---|---|---|---|---|
| Subject | Text input | Sets the email subject and default inbox notification title. | Recipients see this first in email and notification lists. | Keep it short, event-scoped, and free of internal shorthand. |
| Headline | Optional text input | Sets the large heading inside the email body. | Improves readability when the subject is not enough as the body heading. | Leave blank when the subject already works as the heading. |
| Message | Markdown-ext textarea | Sets the email body and inbox notification body. | Supports rich formatting used elsewhere in event docs and attendee notifications. | Preview links, tables, line breaks, task lists, and diagrams before sending. |
| Live preview | Preview pane | Renders the branded email and matching rego inbox copy from the latest compose state. | Lets staff review what recipients will actually read. | Wait for the preview badge to show Live before final review. |
| Send blast | Button | Creates a durable delivery campaign and begins bounded background delivery. | Returns after the campaign is safely queued; it does not claim that every recipient has already been sent. | Confirm recipients, subject, body, and reply routing first. |
| Delivery campaigns | Status list | Shows queued, sending, completed, failed, deferred-budget, and cancelled campaigns with resolved/sent/failed counts. | Continues recovering delivery through the Worker scheduler when the page is closed. | Wait for a terminal state before treating the campaign as complete. |
| Retry failed | Campaign action | Requeues only terminally failed recipients. | Preserves the campaign and its attempt audit while avoiding duplicate sends to successful recipients. | Read the last error and correct provider configuration first. |
| Cancel | Campaign action | Stops recipient jobs that have not yet been sent. | Already-sent email is not recalled; remaining jobs are marked cancelled. | Use only when the remaining delivery should stop. |
Preview and delivery states
| Field or state | What it shows | Operator response |
|---|---|---|
| Loading preview | The latest compose state is still being sent to the API. | Wait before reviewing final copy. |
| Live | The preview reflects the latest compose state accepted by the API. | Review subject, sender, reply-to, audience summary, email body, and inbox body. |
| Preview error | The API could not render the current preview. | Fix the reported issue before sending. |
| From | Sender name used by the event email wrapper. | Confirm recipients can recognize the organizer. |
| Reply-to | Partner support route or default support mailbox. | Confirm replies go somewhere monitored. |
| Audience preview | Selected audience labels or selected-attendees fallback text. | Compare with the audience summary before sending. |
| Queued / Sending | The campaign is accepted and bounded batches are moving through delivery. | Keep the page open for live progress or return later; the minute scheduler continues recovery. |
| Deferred budget | Free-plan daily recipient budget cannot accept the campaign yet. | Leave the campaign queued; the scheduler promotes oldest campaigns when the next daily budget is available, or cancel it. |
| Completed | Every recipient job was sent. Matching inbox notifications are created only after successful email delivery. | Keep the final counts as support evidence. |
| Completed with failures / Failed | One or more recipients exhausted the automatic three-attempt retry policy. | Correct the provider problem, then use Retry failed. |
| Cancelled | Unsent jobs were stopped by an operator. | Remember that already-sent messages remain delivered. |
| Queue failure | API reports validation, delivery setup, or campaign persistence failure before acceptance. | Correct the reported issue before creating another campaign. |
API records
| Record or route | What it represents | Verification proof |
|---|---|---|
/api/events/:id/communications/email-blasts/audiences | Generated audience counts and attendee picker data for email targeting. | Selected audienceIds, selected attendeeAccountIds, and visible recipient counts match the intended scope. |
/api/events/:id/communications/email-blasts/attendees | Exact-attendee candidates for the picker. | The selected attendee account IDs belong to the current event. |
/api/events/:id/communications/email-blasts/preview | Rendered branded email and inbox preview. | The preview subject, sender, reply-to, audience labels, HTML, and text agree with the compose form. |
POST /api/events/:id/communications/email-blasts/blasts | Idempotent campaign creation. Requires Idempotency-Key and returns HTTP 202. | Store the returned campaign ID and initial status; safe replays return the same partner-scoped campaign. |
GET /api/events/:id/communications/email-blasts/campaigns | Recent event campaigns and aggregate progress. | Counts and terminal state agree with operator expectations. |
GET /api/events/:id/communications/email-blasts/campaigns/:campaignId | One campaign status; active reads also request another bounded processing pass. | Poll only while status is queued or sending. |
GET /api/events/:id/communications/email-blasts/campaigns/:campaignId/logs | Privacy-reduced per-recipient job state and retry errors. | Logs omit recipient email addresses and retain attempt/status evidence. |
POST .../:campaignId/retry / POST .../:campaignId/cancel | Failed-recipient recovery and unsent-job cancellation. | Successful recipients are not requeued; already-sent email is not recalled. |
| Attendee inbox notifications | Rego-site notification records created after each successful email delivery. | A failed email job must not create a misleading inbox success copy. |
Flowchart context
Active Event Workflow links to Email Blasts when public event information changes or attendees need a coordinated email update. It is separate from Notification Config, which is for private staff webhook alerts, and from SMS Blasts, which is phone-number delivery.
Common mistakes
- Do not send from the Communications index. Open the explicit Email Blasts page.
- Do not use
Everyonewhen a smaller audience group or exact-attendee selection is enough. - Do not ignore a stale or failed preview; the preview is the safest copy review before delivery.
- Do not treat SMS readiness or Android device errors as email delivery errors.
- Do not interpret HTTP
202as completed delivery; use campaign progress. - Do not submit the same intended campaign with a new idempotency key merely because progress is slow.