Herald: bulk email for Flarum 2, the way Invision Community does it
If you've come to Flarum from Invision Community, you've probably missed Bulk Mail. Herald brings it to Flarum: write one message, personalise it with quick tags like {member_name}, choose who receives it, and send it in the background. Every member gets their own copy with their own details filled in.
It's free and MIT licensed.

Written in your forum's own editor
Herald has no editor of its own. You write mailings with whatever your members use for posts: Markdown, FoF Rich Text or Scribe, with the same toolbar, mentions, emoji and upload buttons. Mailings are stored the way posts are, so switching editors later doesn't break anything you've already written.
Quick tags
Click a tag into the subject or the message and each member receives their own value. The names are Invision's, so if you're coming from IPS you already know them:
{member_name}, {member_username}, {member_id}
{member_joined} and {member_last_visit}, formatted in each member's own language
{member_posts}, {member_discussions}
{suite_name}, {suite_url}, {reg_total}, {total_posts}, {total_discussions}
{unsubscribe_url}, {settings_url}
{username}, {board_title} and {board_url} work as aliases. Tags also work inside links, so [your profile]({suite_url}/u/{member_username}) takes every member to their own profile.
Choose who gets it

- Groups to include or leave out
- Join date range
- Last visit: active in the last N days, or away for at least N days (the "we've missed you" email)
- Post and discussion counts
- Suspended members, left out unless you include them
A live count updates as you change the filters, and shows how many members were left out and why.
Check it before it goes
- Preview the email exactly as it will arrive, with your own details filled in
- Send a test to yourself
- See how many members it will reach before the final Send button, because an email can't be recalled

Sending that works on any host
Herald sends in batches, with a progress bar and a Cancel button, and records its progress after every email. If a send is interrupted, it resumes where it stopped instead of mailing anyone twice.
You don't need special hosting. While the progress page is open, your browser keeps the send going. If your forum runs a queue worker or Flarum's scheduler, the send also continues after you close the page. Batch size and the pause between batches are configurable, for mail providers with sending limits.
Consent comes first
- Members are opted in by default, as on Invision, and every email says how to opt out.
- One-click unsubscribe in every email, with the
List-Unsubscribe headers Gmail and Yahoo now expect from bulk senders.
- A switch on each member's Settings page to opt out of, or back in to, news from the forum team. It's separate from their notification settings.
- Members who have opted out or haven't confirmed their email address are never sent bulk mail, and an admin can't override this.

For developers
Other extensions can add their own quick tags and recipient filters. Tag providers receive a whole batch of members at a time, so a tag that needs a query costs one query per batch, not one per email. Examples are in the README.
Installation
composer require ernestdefoe/herald
php flarum migrate
php flarum cache:clear
Enable Herald in the admin panel, then open Bulk mail from your avatar menu.
Requires Flarum 2.0 and PHP 8.3.
Links
Bug reports and feature requests are welcome in the support discussion or on GitHub.