CFEG is a gateway on Cloudflare Email Routing: keep what you receive when you want, forward on your terms, and reply or compose as the original address — even when you have hundreds of them.
Repos: cf-email-gateway · cfeg-reply-extension
The problems#
1. Forwarding is lossy#
Cloudflare can route mail to Gmail (or another inbox). That path is not a vault.
Inbound delivery can fail when the destination is down, the mailbox is full, or you hit rate limits. If the only copy was “whatever made it through forward,” that mail is gone.
CFEG can archive on receive so you keep a durable copy of what hit the domain, independent of the downstream inbox’s mood. Forward stays optional: archive + forward, archive only, forward only — per how you configure the worker.
2. Reply-as-original is painful at scale#
Mail that lands in a shared/forwarded inbox is awkward to answer from the address the sender wrote to.
Gmail’s Send mail as works for a handful of identities. It does not work when you run:
- many role addresses, or
- catch-all privacy mail — one domain,
localpart unique per service (netflix@…,bank@…,random-shop@…), hundreds of addresses over time
You are not going to click through Send-mail-as setup for every alias. So people reply from the catch-all inbox address, break expectations, or abandon the privacy scheme.
CFEG reply tokens fix that: reply (and compose) using the right identity without provisioning each address in Gmail.
One personal pattern CFEG is built around: catch-all privacy domain → every service gets a unique local-part → still reply/compose as that address through the gateway, including from Gmail via the companion extension.
What CFEG does#
| Capability | Why it matters |
|---|---|
| Archive on receive (optional) | Keep a copy when you enable it; survive dest outages, full storage, rate limits |
| Forward (optional) | Forward after processing, or skip forward for keep-only / quiet sink |
| Reply tokens / hop | Answer as the original recipient address without per-alias Send mail as |
| Compose as any address | New mail from catch-all / role identities in the same model |
| Gmail extension | Reply / Reply-All in the UI you already use, routed through CFEG |
Who it’s for#
- Domains on Cloudflare Email Routing that need a real receive log, not only a best-effort forward
- People and teams juggling many identities on one domain
- Catch-all privacy setups where unique local-parts are the product, not an edge case
- Anyone tired of Send mail as as the identity plane
How it fits together#
Inbound — your policy, not a fixed pipeline#
Sender
│
▼
Cloudflare Email Routing
│
▼
CFEG Worker
│
├─► Archive (optional)
│
└─► Forward (optional) ──► Your inboxExamples:
- Archive + forward — keep a copy and still land mail in the inbox
- Archive only — durable keep, no forward
- Forward only — routing without CFEG archive
- Enable at least one path that matches how you want mail handled
When archive is on, the kept copy does not depend on the destination being up, having free storage, or accepting more mail right then.
Outbound — reply / compose as the original address#
Gmail (CFEG extension) or send/reply client
│
▼
CFEG hop (reply / compose token)
│
▼
Sent as the real address
(catch-all local-part, role address, etc.
— no per-alias Gmail "Send mail as")Inbound is no longer “forward or bust.” Outbound identity is no longer “only the addresses Gmail knows.”
Try it / code#
- Gateway: github.com/reynhartono/cf-email-gateway
- Gmail Reply extension: github.com/reynhartono/cfeg-reply-extension
Built for operators who want mail they can trust on Cloudflare — kept when you choose to archive, and speakable from every address the domain owns.
Note#
CFEG is open tooling around Cloudflare Email Routing. Wire it to your own routes, storage, and policy. Archive and forward are independent options.
