Newsletters gain a “Recurrence rule” setting: send only when content changed (default), send on every occurrence, or — new — when unchanged, deliver the current issue to contacts who haven’t received the series yet. Those newcomers are added to the existing issue and sent that same content, so the issue count doesn’t grow for content that didn’t change.
Dashboard widget: the WordPress Dashboard now shows the latest issue’s performance (sent/total, failed, bounces, opens, clicks, unsubscribes) with a link through to its detail — hidden until you’ve sent your first issue.
The newsletter Issues log now reports engagement per issue — bounces, opens, clicks, and unsubscribes — in place of the old unsubscribed/failed breakdown.
1.1.1
New per-issue Bounces tab (recipient, type, time), fed by a canonical emerge_campaigns_record_bounce action — built in for Emerge Mail, open to any mail plugin. Bounces also show in the per-issue Performance table.
Newsletters list now summarizes the whole series per row: issue count, last sent, and series-wide sent, open/click rate, and unsubscribes.
Fix: creates the bounce-log table on upgrade so bounces are recorded.
1.1.0
Newsletters: the parent screen is now a hub for the whole series — it opens straight to the inline list of issues (the original send plus every recurring issue) instead of showing the original as a single issue. The separate Issues page is gone; everything lives on the newsletter.
Each issue (and each broadcast) now has an Activity panel below its performance summary, with tabbed, per-recipient lists of Failed, Opens, Clicks, and Unsubscribes. The old standalone “Failed sends” block is folded into the Failed tab (retry control included).
Recommends the free companion plugin Emerge Mail (a wp_mail() delivery wrapper) when it isn’t active — a dismissible notice with a context-aware Install / Activate button. Emerge Mail remains optional.
1.0.0
First public release.
Contacts table with daily background sync from WordPress users, comment authors, WooCommerce customers, Easy Digital Downloads customers, Jetpack contact form submissions, Jetpack Subscriptions, MailPoet subscribers, Newsletter Plugin subscribers, Contact Form 7 (Flamingo) submissions, and Gravity Forms entries. Each source toggleable from settings; manual add supported.
Static segments (manual contact picker) and dynamic segments (rule builder over status / source / subscribed_at), re-evaluated at send time.
Email templates authored as custom posts in the block editor, with merge tags, starter block patterns (newsletter + receipt), test-send, and preview.
Broadcasts — one-time sends with the full draft / scheduled / sending / sent / paused / cancelled lifecycle, schedule-for-later, pause/resume in-flight, and duplicate-as-draft.
Newsletters — recurring series on a daily / weekly / monthly cadence with a send time, spawned automatically by a background sweep. Read-only per-series Issues log with pause/stop controls for an in-flight issue, and an opt-in “send only if content changed” gate that uses normalized-render hashing so nonces, per-render ids, and whitespace never trigger spurious issues.
Background batched send worker via bundled Action Scheduler, with a settings-configured per-minute throttle (default 2/min ≈ 120/hour).
Per-recipient skip codes (invalid_email, recipient_bounced) so per-contact data problems don’t pause healthy campaigns.
Dead-end auto-pause: when N consecutive transport failures occur (default 10, configurable), the campaign auto-pauses and the burst of failures resets back to pending. One-click “Retry failed sends” re-queues transport failures once delivery is healthy.
Bounce & complaint handling: consumes the companion Emerge Mail plugin’s emerge_mail_bounce_received events — hard bounces and complaints suppress the contact, soft bounces are marked but kept mailable — with optional, guarded hard-bounce cleanup (delete a linked WordPress user with content reassignment; reassign the address’s anonymous comments to a fallback user).
Per-recipient send tokens for unsubscribe, view-in-browser, open-pixel, and click-tracking URLs. RFC 8058 List-Unsubscribe / List-Unsubscribe-Post headers for native one-click unsubscribe in Gmail and Apple Mail.
Open-pixel + click-redirect tracking recorded in your own database; IPs stored only as salted SHA-256 hashes. Per-campaign stats (sent, opens, unique opens, clicks, unique clicks, unsubscribes, rates) and per-contact send history on the admin screens.
Emerge Subscribe: public signup form available three ways — [emerge_campaigns_subscribe] shortcode, “Emerge Subscribe” block, and classic widget — all sharing identical output and configuration, with progressive-enhancement AJAX submit and a no-JS POST + redirect fallback. Spam controls: nonce verification, hidden honeypot, and a per-IP rate limit (default 5/hour, filterable).
Authenticated subscribe webhook: API-key-protected REST endpoint (POST /wp-json/emerge-campaigns/v1/webhook/subscribe, x-api-key header) for adding contacts programmatically; webhook signups tagged with the webhook source.
Extension points for integrators: emerge_campaigns_subscribed, emerge_campaigns_bounce_recorded, emerge_campaigns_dead_end_paused, and emerge_campaigns_email_wrapper.