- Shipped
- September 12, 2026 at 5:18 AM UTC
- Author
- Kamo
- Commit
- 30b8510
An organization's campaign mail now leaves through any number of outbound hosts, one message at a time in rotation, instead of one bulk provider. - Hosts: an organization's own (outboundHosts in its bulk provider blob) and the platform's (platformOutboundHosts in the platform organization's blob), SHARED with every organization or PLATFORM_ONLY. Every SMTP setting is explicit: security, SASL mechanism, TLS verification and protocols, HELO name, envelope sender, timeouts, hourly/daily limits, DSN, 8BITMIME, SOCKS. HostSessionFactory builds the session from them; EmailSmtpService.sendVia sends through it. - The same server is never added twice (same name or any shared address, whatever the port or login), and an organization's host must be a public server: private and in-cluster names and addresses are refused on save and again before every connection. - Warm-up is per host and always on. WarmupService works on a WarmupHandle; a platform host has one warm-up shared by every organization using it. New runs start at the local start of day. - WarmupReleaser is the only sender: round-robin across each organization's hosts, skipping a host waiting for its slot, at its cap, braked, at its own limit or backing off after failing to connect. A connection, TLS or sign-in failure no longer counts an attempt against the recipient. - Send window per organization (days, one or more ranges, own zone or the org's). WarmupPacer spreads each day's cap across the window's open time only. - Staged outbox: /api/email/campaigns/outbox lists queued recipients and cancels or restores them. A cancelled recipient is SUPPRESSED with a note (no status DDL) and reads back as CANCELLED. - Endpoints: **************** platform hosts at **************** behind MANAGE_OUTBOUND_EMAIL_HOSTS. The one-host writes answer 410. - OutboundHostBackfill seeds the k3m1 relay as a PLATFORM_ONLY host and migrates one-host blobs. No schema changes.