Repository navigation
Archive email runbook
This runbook sets up the archive email account ia@cherokeedictionary.net, forwarding every message to m.conrad.202+ia@gmail.com and standtrooper+ia@gmail.com, using Cloudflare Email Routing on the cherokeedictionary.net zone with the built-in automatic DNS configuration. Manual DNS setup is not used.
- The zone serves from Cloudflare DNS. This is satisfied: the DNS record of record names
louis.ns.cloudflare.comandserena.ns.cloudflare.comas the serving NS set. - The Cloudflare dashboard path is Compute > Email Service > Email Routing.
- The zone's record set of record (Cloudflare export 2026-11-02T18:58:37Z) carries no MX and no SPF records, so onboarding takes the clean path: no external-MX error, no SPF merge.
- In the dashboard, go to Compute > Email Service > Email Routing.
- Click Onboard Domain and select
cherokeedictionary.net. - Review the DNS records Cloudflare adds automatically to the root domain:
- MX — routing incoming email to Cloudflare;
- SPF — a TXT record authorizing routing;
-
DKIM — a TXT record at
cf2024-1._domainkey.
- Click Done.
The records arrive Locked (Email-Service-managed); nothing is entered into DNS manually. DNS propagation runs up to 24 hours globally, usually 5–15 minutes on Cloudflare DNS.
Before creating the routing rule, add and verify both destination addresses:
- Under Destination Addresses, add
m.conrad.202+ia@gmail.comandstandtrooper+ia@gmail.com(the+ia-tagged Gmail forms deliver to the same inboxes and are filterable by tag). - Destination addresses are managed at the account level and are reusable across domains.
- Verify each address with the Verify email address click that Cloudflare mails to it.
Destinations must be added and verified before the routing rule: a routing rule pointing at an unverified destination stays disabled.
The dashboard routing rule carries a single destination, so the two-recipient fan-out is the Worker route — one forward() call per destination:
-
Deploy a minimal email-handler Worker to the account whose handler forwards each message to both verified destinations — one
forward()per destination:from workers import WorkerEntrypoint, EmailEvent import asyncio class EmailForward(WorkerEntrypoint): async def fetch(self, request, env, ctx): ... async def email(self, message, env, ctx): destinations = ["m.conrad.202+ia@gmail.com", "standtrooper+ia@gmail.com"] await asyncio.gather(*(message.forward(dest) for dest in destinations))
-
Under Routing Rules, create a rule with:
-
Email pattern:
iaoncherokeedictionary.net; - Action: Send to a Worker → the forwarding Worker.
-
Email pattern:
Keep only one rule for this pattern: when duplicate patterns exist, only the first-listed rule processes.
Check each of the following after the rule is enabled:
-
DNS records are Locked: Email Routing > Settings > DNS records shows the three auto-added records (MX, SPF, DKIM at
cf2024-1._domainkey) with Locked status. -
DNS resolution matches the domain-configuration doc's own checks:
dig MX cherokeedictionary.net dig TXT cherokeedictionary.net | grep spf dig TXT cf2024-1._domainkey.cherokeedictionary.net -
End-to-end delivery: send a test message from an external account (different from the destinations) to
ia@cherokeedictionary.netand confirm it arrives at both destinations (check the spam folder if delayed). -
Routing activity is observable in the dashboard.
- No manual DNS setup. The automatic configuration of record applies; the records are unlockable only for a provider migration, which is out of scope.
- No catch-all rule. This runbook creates the address-specific rule only.
- Unmatched addresses are rejected. Once the MX records point to Cloudflare, mail to unmatched addresses is rejected ("Address does not exist" behavior). The zone carries no prior email addresses — no MX in the pre-state export — so no existing mail flow is at risk.
-
Email Sending (outbound) is not touched. The separate
cf-bouncesurface stays out of this runbook's scope.
Runbook authoring verified against the Cloudflare Email Service docs (route emails; email routing rules and addresses; domain configuration — last updated Jun 9, 2026 / Oct 15, 2026 / Oct 30, 2026). Executing the setup is separate, authorized work.