# ADR 0005 — Oracle Cloud as the launch host, and what it forbids **Status:** Accepted, 2026-09-02. ## The constraint **OCI blocks outbound TCP/25 for every tenancy created after 2021-06-23.** Exemption is a service-limit request, routinely refused for free tier. Inbound :25 is *not* blocked. | | On OCI | |---|---| | Receive on :25 | ✅ works — `openmail-smtpd` is fine | | Relay out on 587 | ✅ works (verify: see below) | | Direct-to-MX | ❌ **impossible.** `mail-dane` and `mail-mta-sts` can never run there | ## Decision Launch on OCI in **split delivery**: receive directly, relay outbound. Support Oracle Cloud Email Delivery *and* SES as relay providers from day one — two providers at launch forces the provider abstraction to be genuinely data-driven instead of an SES-shaped `if`. Direct-to-MX (v0.4) is developed and tested on a host without the block. ## Consequences - Embedded inbound moves from "milestone 4, later" to **required at launch**. - The relay path is not a temporary on-ramp; on our own launch host it is the only outbound path that exists. - Oracle's SPF include is region-scoped (`rp` / `eu.rp` / `ap.rp` `.oracleemaildelivery.com`), so `providers.rs` deliberately stores `None` and makes the operator paste theirs. A guessed include turns the DNS check green against a mechanism the provider does not honour and mail still fails SPF — silently. Same for Resend. ## ⚠️ Open — verify before committing to the host Oracle's docs name only port 25. Mailcow community reports claim **587 and 2525 are also blocked outbound on free tier**, which would make OCI unable to relay either, and would change the host choice entirely. **Test on a free instance before building on this.** It is a 20-minute check and it invalidates this ADR if the reports are right.