Every suppression check and bounce goes through the opt-out ledger

FeatureEmailService
Shipped
September 12, 2026 at 6:08 AM UTC
Author
Kamo
Commit
0b6a05f

SuppressionService now asks EmailOptOutLedger, so a check sees the do-not-email list, pauses and topics alike, and a bounce lands in the same history as an unsubscribe. Callers name the kind of mail they are about to send: campaigns (materialize, restore, the late gate) ask about MARKETING_CAMPAIGNS, article shares about SHARED_ARTICLES. Bounces carry the server's answer and the campaign into the history row. OptOutSchemaProbe tells the ledger whether KamoInitializerService has created the two new tables yet; until it has, sending honours the list alone instead of failing on a missing table.

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