You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Email domains guide says Void preserves foreign MX records, but domain add refuses apexes that have MX records #509
The platform section of the email domains guide says Void "preserves foreign MX records" (docs/guide/email/domains.md L19). Read on its own, that suggests registering an apex whose mail is hosted elsewhere (for example Microsoft 365 or Google Workspace) is supported and leaves that mail alone.
The code refuses that case. Registering a custom apex fails when the domain already has MX records:
platform/packages/api/src/email/connection-service.ts L1459-L1474: "already has MX records; use an unused domain apex or a platform shared email address". On a fresh assignment any MX counts, including Cloudflare's own. On an existing assignment, any non-Cloudflare MX counts.
Use case
I operate a self-hosted Void platform serving several brands whose apex domains use Microsoft 365 for mail. I read the sentence as "register the apex, keep your mailboxes, add Void". It took a failed registration to learn that was not the intent.
What the rest of the docs say
Other text already matches the code. The same paragraph tells readers to choose an apex without another mail provider, the own-account section says Void refuses to replace another provider's MX records (L47), and docs/reference/cli/platform-email.md L76 says to use the shared address or another zone when the MX belongs to another provider. So the sentence may mean "Void does not modify them because it refuses the domain". If so, it is easy to misread.
Question
Which behaviour is intended?
Refusal is intended. I can send a docs PR that rewords the sentence, for example to say that registration is refused when the apex has MX records, and that existing catch-alls on a Void-managed apex are left in place.
Coexistence is intended and the refusal is a bug. In that case I would like to understand the intended design before touching code.
There is also a middle path, outbound-only custom domains, where an apex with foreign MX can send through Void while Void manages no inbound. I intend to raise that separately. If you prefer to solve the mismatch there, I can word the docs change to point at it once it lands.
Thanks for the clear report. Option 1: the refusal is intended. A platform-managed custom apex needs Cloudflare Email Routing to own its MX and catch-all, so domain add refuses an apex that already has MX records (or a catch-all that routes elsewhere) instead of taking over its mail. "Preserves" meant "never replaces", which reads the wrong way. #518 rewords the guide to match the CLI reference. Outbound-only custom domains for apexes with foreign MX would be a separate feature, so a separate issue for it is welcome.
Activity
Brooooooklyn commentedon Oct 21, 2026
Thanks for the clear report. Option 1: the refusal is intended. A platform-managed custom apex needs Cloudflare Email Routing to own its MX and catch-all, so
domain addrefuses an apex that already has MX records (or a catch-all that routes elsewhere) instead of taking over its mail. "Preserves" meant "never replaces", which reads the wrong way. #518 rewords the guide to match the CLI reference. Outbound-only custom domains for apexes with foreign MX would be a separate feature, so a separate issue for it is welcome.iPLAYCAFE-dev commentedon Oct 21, 2026
Thanks, that clears it up. #518's wording matches what we saw, so this can close when it lands.
The outbound-only case (custom apex whose MX stays with another provider, e.g. Microsoft 365) is already filed separately as #510.
docs(email): say that domain add refuses an apex with existing mail (#…