Bulk email campaign backend — provider, dispatcher, compliance, realtime

FeatureEmailService
Shipped
July 27, 2026 at 7:53 PM UTC
Author
Kamo
Commit
7d75315

Backend for org-level bulk email campaigns, entirely separate from the everyday email provider so it can't be throttled/blocklisted alongside business mail: - Bulk SMTP provider (BulkEmailProviderService + BulkProviderController): encrypted org config reusing EmailProviderEncryptionService; real Send Test Email (opens a live SMTP session and sends). - Campaign CRUD + status machine (CampaignService/Controller): draft, schedule, send-now, pause, resume, cancel, duplicate; recipient materialization with dedupe, suppression tagging, per-recipient unsubscribe tokens; CAN-SPAM gate (subject + physical address + >=1 recipient required to leave draft). - Throttled dispatcher (CampaignDispatcher @Scheduled): all-at-once / evenly-over-window / naturalized-random pacing via per-recipient nextReleaseAt (restart-safe), warm-up ramp on maxPerHour, hard-bounce -> auto-suppress. - Compliance: SuppressionService, public one-click RFC 8058 UnsubscribeController (+ List-Unsubscribe headers), suppression re-checked at send. - Real-time: direct STOMP push to /topic/campaigns/{orgId} + subscribe-time org ChannelInterceptor (closes cross-tenant topic exposure). - EmailSmtpService: additive extraHeaders send() overload (List-Unsubscribe).

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing