One eligibility engine decides who a campaign may mail

FeatureEmailService
Shipped
September 13, 2026 at 4:13 PM UTC
Author
Kamo
Commit
fffddd7

Every list add (a member's, an audience's, a copy) and the send itself ask one engine whether an address may receive the campaign, cheapest check first: syntax, then suppression (unsubscribed, complained, bounced, blocked; for the organization or platform-wide), blocked and reserved domains, disposable domains, role and test-looking addresses, cached validation, DNS/MX, and last an optional external validator within its budget. Suppressed and undeliverable addresses are never sent. The judgement calls are settings, and an organization can narrow them. - The final check runs just before a host takes each message, so an address that unsubscribed after it was queued is never sent. A check that cannot be made sends nothing on a guess. - Nothing is dropped: an address that will not be sent stays on the list (SUPPRESSED with a coded note, since the status CHECK constraint has no SKIPPED) and says why. Held rows wait for a member to release them. - Bounces are classified once for the send path and the relay's reports: hard (suppressed; platform-wide from the relay), soft (retried with exponential back-off and jitter, suppressed after a threshold), rate limits and host refusals (retried uncharged, host backed off), and policy blocks (failed, never suppressed). A 5.7.x reputation block no longer suppresses the address. - Relay complaints and unsubscribes suppress the address; counts and notices happen once per report. - A message the host accepted is never re-queued if recording it fails. - An unsubscribe, complaint or pause the person chose can be lifted by a member only when the person asked, and the member must say so. - Detailed reasons ride in the suppression's source; caches, counters and event de-duplication live in Redis; rules live in the provider blobs. No schema change. - New endpoints: /api/email/deliverability (address check, settings, activity), **************** and POST **************** Campaigns carry a deliverability summary. - Settings: bulk-email.deliverability.* (retries, platform rate caps, soft bounce threshold, validator). The validator is optional and off; its key comes from the optional secret email-validation-credentials.

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