<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: nonozone</title>
    <description>The latest articles on DEV Community by nonozone (@nonozone).</description>
    <link>https://dev.to/nonozone</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3856736%2F150e0c8b-0ade-49bc-8f15-958996c85ea4.jpg</url>
      <title>DEV Community: nonozone</title>
      <link>https://dev.to/nonozone</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nonozone"/>
    <language>en</language>
    <item>
      <title>Cloudflare Email Sending Is Now in Public Beta — OhRelay Fills the Gap It Left Behind</title>
      <dc:creator>nonozone</dc:creator>
      <pubDate>Sat, 18 Apr 2026 09:43:45 +0000</pubDate>
      <link>https://dev.to/nonozone/cloudflare-email-sending-is-now-in-public-beta-ohrelay-fills-the-gap-it-left-behind-4e11</link>
      <guid>https://dev.to/nonozone/cloudflare-email-sending-is-now-in-public-beta-ohrelay-fills-the-gap-it-left-behind-4e11</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://ohrelay.com/insights/cloudflare-email-sending-beta" rel="noopener noreferrer"&gt;OhRelay Insights&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cloudflare quietly opened its &lt;strong&gt;Email Sending&lt;/strong&gt; feature to public beta this week. If you use Cloudflare Email Routing or build on Workers, this is worth understanding — both for what it adds and for what it still doesn't solve.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Cloudflare Email Sending actually is
&lt;/h2&gt;

&lt;p&gt;The new Email Sending service lets you send email programmatically from a Cloudflare Worker or via a REST API. The setup is straightforward: onboard a domain through the Cloudflare dashboard, let it add the required DNS records (SPF, DKIM, DMARC, bounce MX), then call &lt;code&gt;env.EMAIL.send()&lt;/code&gt; from your Worker code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EMAIL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;welcome@yourdomain.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;p&amp;gt;Thanks for signing up.&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Thanks for signing up.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the core use case: &lt;strong&gt;transactional email from a Worker&lt;/strong&gt;. Think signup confirmations, magic links, order receipts — the kind of email your application sends automatically, not the kind a person composes and sends.&lt;/p&gt;




&lt;h2&gt;
  
  
  The real limitations
&lt;/h2&gt;

&lt;p&gt;Before you consider switching your email stack, the current constraints are significant:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Workers Paid is required — no free option&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Email Sending is gated behind the Workers Paid plan at $5/month. There is no free tier access, even for testing small volumes. If you're on the free Workers plan, you'll see a paywall before you can send a single email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Recipient restrictions in early usage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you first enable Email Sending, you can only send to verified destination addresses already configured in your Cloudflare account. Sending to arbitrary recipients requires a paid plan and Cloudflare's assessment that your account is in good standing. The daily sending volumes are also set per-account by Cloudflare with no documented ceiling — you have to request increases through a form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Workers-only architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Workers binding (&lt;code&gt;env.EMAIL&lt;/code&gt;) only works inside a Cloudflare Worker. If your sending infrastructure lives elsewhere — a Node.js service, a VPS, a Docker container — you'll need to use the REST API instead, which is functional but loses the native integration angle. Either way, this is not an SMTP relay: you cannot point Postfix, Nodemailer, or your mail client at Cloudflare to send email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. No alias management, no identity routing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Email Sending is an outbound primitive. You specify a &lt;code&gt;from&lt;/code&gt; address, Cloudflare sends the email. There is no concept of aliases, no inbox management, no routing rules, and critically — no connection to the inbound side of Cloudflare Email Routing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Email Routing + Email Sending still leaves a gap
&lt;/h2&gt;

&lt;p&gt;Cloudflare now has two email products:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email Routing&lt;/strong&gt; — receives mail at your custom domain, forwards it to a personal inbox (Gmail, Outlook, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email Sending&lt;/strong&gt; — sends transactional email from your Worker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they look like a complete email stack. But there's a fundamental gap in the middle.&lt;/p&gt;

&lt;p&gt;When Cloudflare Email Routing forwards a message from &lt;code&gt;support@yourdomain.com&lt;/code&gt; to your Gmail, your Gmail client sees only the Gmail address. When you hit reply, the reply goes out from Gmail — not from &lt;code&gt;support@yourdomain.com&lt;/code&gt;. Your customer gets a response from &lt;code&gt;yourname@gmail.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Email Sending doesn't fix this. It's designed for application code, not mail clients. You cannot configure Gmail or Apple Mail to use Cloudflare Email Sending as an SMTP relay for manual replies.&lt;/p&gt;

&lt;p&gt;The gap is: &lt;strong&gt;you can receive with a custom domain identity, but you can't reply with that same identity from your existing inbox.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What OhRelay adds
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ohrelay.com" rel="noopener noreferrer"&gt;OhRelay&lt;/a&gt; is a relay layer that sits between Cloudflare Email Routing and your working inbox, specifically to close this identity gap.&lt;/p&gt;

&lt;p&gt;When Cloudflare forwards an email to your inbox, OhRelay preserves the original recipient address in the forwarded message. When you reply, OhRelay's SMTP gateway intercepts the outbound message, reads the original routing context, rewrites the envelope so the &lt;code&gt;MAIL FROM&lt;/code&gt; and visible &lt;code&gt;From:&lt;/code&gt; show &lt;code&gt;support@yourdomain.com&lt;/code&gt;, and forwards the email onward.&lt;/p&gt;

&lt;p&gt;The result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email sent to &lt;code&gt;support@yourdomain.com&lt;/code&gt; arrives in your Gmail&lt;/li&gt;
&lt;li&gt;You hit reply&lt;/li&gt;
&lt;li&gt;Your customer receives a reply from &lt;code&gt;support@yourdomain.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No separate mailbox. No per-seat pricing. No manual address selection every time you reply.&lt;/p&gt;

&lt;p&gt;This is a different problem from what Email Sending solves. Cloudflare Email Sending is built for developers shipping applications. OhRelay is built for operators who want their working inbox to behave professionally across multiple domain addresses.&lt;/p&gt;




&lt;h2&gt;
  
  
  The broader picture
&lt;/h2&gt;

&lt;p&gt;Cloudflare is building out a complete email infrastructure stack, piece by piece. Email Routing handles inbound. Email Sending handles programmatic outbound. The company is clearly moving toward owning more of the email layer for its customers.&lt;/p&gt;

&lt;p&gt;But "complete email stack" and "email identity management" are different things. The challenge of replying correctly from a forwarded address is a workflow problem, not just a protocol problem. It requires understanding the relationship between inbound routing, inbox context, and outbound identity — and enforcing that relationship consistently across every reply your team sends.&lt;/p&gt;

&lt;p&gt;That's what OhRelay handles. If you're already using Cloudflare Email Routing and the wrong-sender issue has been a persistent friction point, &lt;a href="https://ohrelay.com/how-it-works" rel="noopener noreferrer"&gt;see how OhRelay works&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cloudflare</category>
      <category>email</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>Do You Really Need Separate Mailboxes for Every Business Email Address?</title>
      <dc:creator>nonozone</dc:creator>
      <pubDate>Tue, 14 Apr 2026 12:27:22 +0000</pubDate>
      <link>https://dev.to/nonozone/do-you-really-need-separate-mailboxes-for-every-business-email-address-eak</link>
      <guid>https://dev.to/nonozone/do-you-really-need-separate-mailboxes-for-every-business-email-address-eak</guid>
      <description>&lt;p&gt;Most small businesses want domain-based email addresses.&lt;/p&gt;

&lt;p&gt;That part is normal.&lt;/p&gt;

&lt;p&gt;They want addresses like:&lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:hello@yourcompany.com"&gt;hello@yourcompany.com&lt;/a&gt;&lt;br&gt;
&lt;a href="mailto:support@yourcompany.com"&gt;support@yourcompany.com&lt;/a&gt;&lt;br&gt;
&lt;a href="mailto:billing@yourcompany.com"&gt;billing@yourcompany.com&lt;/a&gt;&lt;br&gt;
because those addresses look more professional, separate personal and business communication, and avoid exposing someone's private inbox.&lt;/p&gt;

&lt;p&gt;The problem starts when every one of those public-facing addresses turns into another mailbox account.&lt;/p&gt;

&lt;p&gt;For larger teams, that may be fine.&lt;/p&gt;

&lt;p&gt;For founders, tiny studios, agencies, and small operator-led teams, it gets annoying very quickly.&lt;/p&gt;

&lt;p&gt;The old model assumes one person, one mailbox&lt;br&gt;
Traditional mailbox pricing makes sense when each employee really needs their own mailbox seat.&lt;/p&gt;

&lt;p&gt;But many small businesses do not actually work that way.&lt;/p&gt;

&lt;p&gt;A two-person team may still need:&lt;/p&gt;

&lt;p&gt;hello@&lt;br&gt;
support@&lt;br&gt;
info@&lt;br&gt;
billing@&lt;br&gt;
project-specific addresses across multiple domains&lt;br&gt;
The visible address count grows because the business needs clear contact points.&lt;/p&gt;

&lt;p&gt;The real operator count does not.&lt;/p&gt;

&lt;p&gt;That is where the per-seat model starts to feel wrong.&lt;/p&gt;

&lt;p&gt;Scenario 1: multiple projects, too much inbox switching&lt;br&gt;
If you run more than one project or brand, email quickly turns into inbox switching.&lt;/p&gt;

&lt;p&gt;You check one mailbox for one domain, another for a different project, and then have to remember which sender identity to use when replying.&lt;/p&gt;

&lt;p&gt;That creates three kinds of friction:&lt;/p&gt;

&lt;p&gt;context switching&lt;br&gt;
scattered history&lt;br&gt;
wrong-sender mistakes&lt;br&gt;
Receiving in one place is only half the problem. Reply identity is the other half.&lt;/p&gt;

&lt;p&gt;If a customer wrote to &lt;a href="mailto:hello@site-a.com"&gt;hello@site-a.com&lt;/a&gt;, your reply should also come from &lt;a href="mailto:hello@site-a.com"&gt;hello@site-a.com&lt;/a&gt;, not from your personal inbox and not from some unrelated project identity.&lt;/p&gt;

&lt;p&gt;Scenario 2: small teams pay for addresses as if they were people&lt;br&gt;
A small studio may have one or two people handling all incoming email, while still needing several outward-facing addresses.&lt;/p&gt;

&lt;p&gt;Traditional mailbox tools often push that team toward buying more mailbox accounts just to preserve those identities.&lt;/p&gt;

&lt;p&gt;But the team is not actually buying more handler capacity.&lt;/p&gt;

&lt;p&gt;It is buying more visible addresses.&lt;/p&gt;

&lt;p&gt;Those are different needs.&lt;/p&gt;

&lt;p&gt;Scenario 3: people change, but the public address should not&lt;br&gt;
Customer-facing addresses often outlive the person currently responsible for them.&lt;/p&gt;

&lt;p&gt;That is especially common with support, operations, and project-based work.&lt;/p&gt;

&lt;p&gt;When someone leaves or a project changes hands, mailbox-account-based setups often create handoff pain:&lt;/p&gt;

&lt;p&gt;creating new accounts&lt;br&gt;
migrating old history&lt;br&gt;
reconfiguring clients&lt;br&gt;
making sure the next person can keep replying cleanly&lt;br&gt;
A better model keeps the public address stable and changes where it routes behind the scenes.&lt;/p&gt;

&lt;p&gt;What I built instead&lt;br&gt;
That is the problem I built OhRelay for.&lt;/p&gt;

&lt;p&gt;It is not another mailbox suite.&lt;/p&gt;

&lt;p&gt;It is a routing layer for teams that have:&lt;/p&gt;

&lt;p&gt;more visible addresses than real handlers&lt;br&gt;
more domains than they want to manage as separate mailbox accounts&lt;br&gt;
a real need to keep replies coming from the correct branded identity&lt;br&gt;
The model is simple:&lt;/p&gt;

&lt;p&gt;Customers keep writing to the addresses they already know&lt;br&gt;
Those addresses route into the inboxes your team already uses&lt;br&gt;
Replies go back out from the correct branded address automatically&lt;br&gt;
So instead of turning every address into another mailbox seat, you separate the address layer from the mailbox-account layer.&lt;/p&gt;

&lt;p&gt;That fits the way a lot of small businesses actually work.&lt;/p&gt;

&lt;p&gt;Final thought&lt;br&gt;
A lot of small businesses do need business email.&lt;/p&gt;

&lt;p&gt;What they do not always need is a separate mailbox account for every public-facing address.&lt;/p&gt;

&lt;p&gt;Sometimes the real problem is simpler:&lt;/p&gt;

&lt;p&gt;you need multiple branded addresses, but only one or two real inboxes behind them.&lt;/p&gt;

&lt;p&gt;That is the gap OhRelay is meant to solve.&lt;/p&gt;

&lt;p&gt;If you are dealing with this today, I would genuinely love to know how you are handling it:&lt;/p&gt;

&lt;p&gt;separate mailboxes&lt;br&gt;
aliases&lt;br&gt;
forwarding rules&lt;br&gt;
shared inbox tools&lt;br&gt;
something else entirely&lt;/p&gt;

&lt;p&gt;Product: &lt;a href="https://www.ohrelay.com/" rel="noopener noreferrer"&gt;OhRelay.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>productivity</category>
      <category>saas</category>
      <category>startup</category>
    </item>
    <item>
      <title>The part Cloudflare Email Routing doesn't solve — and how I fixed it</title>
      <dc:creator>nonozone</dc:creator>
      <pubDate>Thu, 02 Apr 2026 04:42:53 +0000</pubDate>
      <link>https://dev.to/nonozone/the-part-cloudflare-email-routing-doesnt-solve-and-how-i-fixed-it-5jh</link>
      <guid>https://dev.to/nonozone/the-part-cloudflare-email-routing-doesnt-solve-and-how-i-fixed-it-5jh</guid>
      <description>&lt;p&gt;Cloudflare Email Routing is genuinely good. Free, reliable, zero infrastructure to manage. You point your MX records at Cloudflare, configure a few rules, and emails sent to &lt;code&gt;support@yourdomain.com&lt;/code&gt; start appearing in your Gmail inbox within minutes.&lt;/p&gt;

&lt;p&gt;If all you need is to &lt;strong&gt;receive&lt;/strong&gt; email at a custom domain, it's hard to beat.&lt;/p&gt;

&lt;p&gt;The problem starts when you hit reply.&lt;/p&gt;




&lt;h2&gt;
  
  
  What forwarding actually does
&lt;/h2&gt;

&lt;p&gt;When Cloudflare forwards a message from &lt;code&gt;support@yourdomain.com&lt;/code&gt; to your personal Gmail, it doesn't just move the email. It rewrites the envelope.&lt;/p&gt;

&lt;p&gt;The original SMTP transaction looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;MAIL FROM&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; customer@example.com&lt;/span&gt;
&lt;span class="nt"&gt;RCPT TO&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; support@yourdomain.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After forwarding, the message arrives in your Gmail with extra headers like &lt;code&gt;X-Forwarded-To&lt;/code&gt; and &lt;code&gt;X-Original-To&lt;/code&gt; that record where it originally went. But your Gmail client doesn't read those headers. It sees one thing: this email arrived at your Gmail address.&lt;/p&gt;

&lt;p&gt;So when you hit reply, your email client does the obvious thing — it replies &lt;strong&gt;from your Gmail address&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your customer, who wrote to &lt;code&gt;support@yourdomain.com&lt;/code&gt;, now gets a reply from &lt;code&gt;yourname@gmail.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That's the gap. Cloudflare solved receiving. Nobody solved replying.&lt;/p&gt;




&lt;h2&gt;
  
  
  The obvious workarounds (and why they fall short)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Add a "Send As" alias in Gmail&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gmail lets you add custom &lt;code&gt;From&lt;/code&gt; addresses via SMTP. So you add &lt;code&gt;support@yourdomain.com&lt;/code&gt; as a Send As alias, pointing at a transactional SMTP provider.&lt;/p&gt;

&lt;p&gt;This works — until you have more than one or two addresses. When you're managing &lt;code&gt;support@&lt;/code&gt;, &lt;code&gt;sales@&lt;/code&gt;, &lt;code&gt;admin@&lt;/code&gt;, &lt;code&gt;billing@&lt;/code&gt; across two or three domains, you now have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually pick the correct From address every time you reply&lt;/li&gt;
&lt;li&gt;Remember which address the customer originally wrote to&lt;/li&gt;
&lt;li&gt;Hope you don't reply from the wrong one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point you will mis-send. A &lt;code&gt;support@&lt;/code&gt; customer gets a reply from &lt;code&gt;founder@&lt;/code&gt;. A &lt;code&gt;sales@&lt;/code&gt; prospect gets a reply from your personal address. The professional illusion collapses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Set up separate mailboxes per address&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the traditional solution — buy a Google Workspace seat (or Fastmail, or Zoho) for each address. It works, but now you're paying per identity, not per person, and you're context-switching between inboxes all day.&lt;/p&gt;

&lt;p&gt;If your address count grows faster than your headcount — which is common for small studios, agencies, and solo operators — this gets expensive fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually needs to happen
&lt;/h2&gt;

&lt;p&gt;The root problem is that forwarded email loses its routing context by the time it reaches your client. To reply correctly, something needs to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Preserve&lt;/strong&gt; the original recipient address when forwarding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read&lt;/strong&gt; that context when you hit reply&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rewrite the envelope&lt;/strong&gt; on outbound — so the SMTP &lt;code&gt;MAIL FROM&lt;/code&gt; and the visible &lt;code&gt;From:&lt;/code&gt; header show &lt;code&gt;support@yourdomain.com&lt;/code&gt;, not your personal address&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 3 is the key one. It's called &lt;strong&gt;envelope rewriting&lt;/strong&gt;, and it's what makes the difference between "email forwarding" and "identity routing."&lt;/p&gt;

&lt;p&gt;The flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer
  → support@yourdomain.com
  → Cloudflare Email Routing (inbound MX)
  → Relay layer (preserves routing context in headers)
  → Your working inbox (Gmail / Outlook / Apple Mail)

You hit reply
  → Mail client sends to relay's SMTP
  → Relay reads X-Original-To header
  → Relay rewrites MAIL FROM to support@yourdomain.com
  → Customer receives reply from support@yourdomain.com ✓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your client sees one SMTP connection. You configure it once. After that, every reply automatically goes out from whatever address the original email was sent to — no manual selection, no switching, no mistakes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building this
&lt;/h2&gt;

&lt;p&gt;I run a small one-person studio with a few projects, each with its own domain. I got tired of either paying per mailbox or manually managing Send As aliases. So I built a relay layer that sits between Cloudflare Email Routing and my working inbox.&lt;/p&gt;

&lt;p&gt;The inbound side was straightforward: Cloudflare already stamps &lt;code&gt;X-Forwarded-To&lt;/code&gt; and &lt;code&gt;X-Original-To&lt;/code&gt; on every forwarded message. I just needed to make sure those headers survived into my inbox intact.&lt;/p&gt;

&lt;p&gt;The outbound side was the real work. When you provide custom SMTP credentials to a mail client, the client hands off full control of the outgoing message. That's where envelope rewriting happens — inspect the message for routing context, determine the correct sender identity, rewrite the headers, and relay to the upstream MTA.&lt;/p&gt;

&lt;p&gt;A few things that made this interesting to get right:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sender verification&lt;/strong&gt;: You can't let anyone claim any From address. The relay has to know which addresses are authorised for which accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Header precedence&lt;/strong&gt;: Mail clients sometimes set &lt;code&gt;Sender:&lt;/code&gt; and &lt;code&gt;Reply-To:&lt;/code&gt; in ways that conflict. Getting the priority chain right takes care.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bounce handling&lt;/strong&gt;: When a rewritten outbound message bounces, the bounce goes to &lt;code&gt;MAIL FROM&lt;/code&gt; — which is now your domain address. You need to route those back correctly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;After setting this up, the workflow became:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All domain email lands in one inbox&lt;/li&gt;
&lt;li&gt;Hit reply — correct sender, every time, automatically&lt;/li&gt;
&lt;li&gt;No manual address selection&lt;/li&gt;
&lt;li&gt;No per-seat mailbox costs&lt;/li&gt;
&lt;li&gt;No context switching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I called the tool &lt;strong&gt;OhRelay&lt;/strong&gt; and opened it up to early access: &lt;a href="https://ohrelay.com" rel="noopener noreferrer"&gt;ohrelay.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It works on top of Cloudflare Email Routing, so if you're already using that for inbound, setup is mostly just DNS and one SMTP config in your mail client. The guide covers Gmail, Outlook, and Apple Mail.&lt;/p&gt;




&lt;p&gt;If you've been living with the wrong-sender problem or managing too many mailbox seats, it might be worth a look. Happy to answer questions in the comments about how the relay layer works — it's an interesting corner of email infrastructure that doesn't get talked about much.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>selfhosted</category>
      <category>email</category>
      <category>cloudflare</category>
    </item>
  </channel>
</rss>
