Free Email Forwarding for Your Personal Domain With Cloudflare Email Routing
Forward any address at your domain, such as h****@example.com, to an external inbox. For a public address that only has to receive mail, I would put it on Cloudflare Email Routing: the messages land in the inbox I already read, and forwarding to a verified destination costs nothing on any plan. ๐ธ Prerequisites: the domain is on Cloudflare DNS (nameservers delegated, DNS Setup = Full), and it has no MX records from another mail host. Email Routing owns the MX set. 1. Verify the destination address Compute > Email Service > Email Routing > Destination Addresses > Add address. Enter the external inbox (for example, y**@gmail.com ). Cloudflare emails a confirmation link, and you click it. The row must read Verified. Until it does, any rule that points to the address stays disabled. Destination addresses are account-wide: once verified, any zone in the account can target it. 2. Enable routing and add the DNS records Open the zone's Email Routing > Settings > DNS records > Add missing records. Cloudflare writes these records and locks them: Type Name Value MX example.com route1.mx.cloudflare.net (+ route2, route3) TXT example.com v=spf1 include:_spf.mx.cloudflare.net ~all TXT cf2024-1._domainkey.example.com v=DKIM1; h=sha256; k=rsa; p=... A locked record cannot be edited or deleted from the DNS page until you unlock it in the Email Routing settings. Keep one SPF TXT record per name. If the domain already has one, the merge is yours to do: Cloudflare's example combines both includes in a single record, v=spf1 include:_spf.mx.cloudflare.net include:_spf.google.com ~all . 3. Create the routing rule Email Routing > Routing rules > Create routing rule: - Email pattern: hello @example.com - Action: Send to an email - Destination: the verified address Save. The rule must show Active. The pattern takes any local part, not only hello : sales , support or your own name work the same way, one rule per address. 4. Decide the catch-all The catch-all in Routing rules defines what happens to every other address at the domain. Enabled with Send to an email, it forwards all of them, typos such as i***@example.com included. Enabled with Drop, it discards them silently. I would start with it off and turn on forwarding only if people keep misspelling the real address. 5. Verify # MX must answer from the Cloudflare route hosts curl -sH 'accept: application/dns-json' \ 'https://cloudflare-dns.com/dns-query?name=example.com&type=MX' # SPF curl -sH 'accept: application/dns-json' \ 'https://cloudflare-dns.com/dns-query?name=example.com&type=TXT' Then send a real message to h****@example.com and confirm it lands in the destination inbox. ๐ฌ Email Routing > Activity Log shows the decision for each message: Forwarded, Dropped, Rejected or Delivery failed. Notes - Forwarding only. A routing rule receives mail and does not send it, so a reply from the destination inbox goes out through that provider, from its address. Sending from the domain is a separate product, Cloudflare Email Sending, which is still in beta. - Negative DNS answers stay cached for the zone's SOA minimum TTL, 1800 seconds (30 minutes) by default on Cloudflare. If you queried MX before the records existed, your resolver may keep returning empty. Query a different resolver or go over DoH to confirm. Five steps give a domain working addresses with no mailbox bill, and I would pay for a mailbox only on the day replies have to come from the domain itself. References - Email Routing overview and pricing - Enable Email Routing - Email Routing DNS records - Destination addresses and routing rules - DNS over HTTPS JSON queries Follow me for more on AI, LLMs, and Software Development: khasky - LinkedIn / Patreon / GitHub / Bluesky / Mastodon khaskydev - X / Threads / Instagram / Pinterest / Facebook Top comments (0)
Comments
No comments yet. Start the discussion.