
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Wed, 08 Apr 2026 20:21:03 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Email Routing subdomain support, new APIs and security protocols]]></title>
            <link>https://blog.cloudflare.com/email-routing-subdomains/</link>
            <pubDate>Thu, 26 Oct 2023 13:10:06 GMT</pubDate>
            <description><![CDATA[ It's been two years since we announced Email Routing, our solution to create custom email addresses for your domains and route incoming emails to your preferred mailbox. Since then, the team has worked hard to evolve the product and add more powerful features to meet our users' expectations.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p>It's been two years since we announced Email Routing, our solution to create custom email addresses for your domains and route incoming emails to your preferred mailbox. Since then, the team has worked hard to evolve the product and add more powerful features to meet our users' expectations. Examples include <a href="/announcing-route-to-workers/">Route to Workers</a>, which allows you to <a href="https://developers.cloudflare.com/email-routing/email-workers/">process your Emails programmatically</a> using Workers scripts, <a href="/email-routing-leaves-beta/">Public APIs</a>, Audit Logs, or <a href="/dmarc-management/">DMARC Management</a>.</p><p>We also made significant progress in supporting more email security extensions and protocols, protecting our customers from unwanted traffic, and keeping our IP space reputation for email egress impeccable to maximize our deliverability rates to whatever inbox upstream provider you chose.</p><p>Since <a href="/email-routing-leaves-beta/">leaving beta</a>, Email Routing has grown into one of our most popular products; it’s used by more than one million different customer zones globally, and we forward around 20 million messages daily to every major email platform out there. Our product is mature, robust enough for general usage, and suitable for any production environment. And it keeps evolving: today, we announce three new features that will help make Email Routing more secure, flexible, and powerful than ever.</p>
    <div>
      <h2>New security protocols</h2>
      <a href="#new-security-protocols">
        
      </a>
    </div>
    <p>The SMTP email protocol has been around since the early 80s. Naturally, it wasn't designed with the best security practices and requirements in mind, at least not the ones that the Internet expects today. For that reason, several protocol revisions and extensions have been standardized and adopted by the community over the years. Cloudflare is known for being an early adopter of promising emerging technologies; Email Routing already <a href="https://developers.cloudflare.com/email-routing/postmaster/">supports</a> things like SPF, DKIM signatures, DMARC policy enforcement, TLS transport, STARTTLS, and IPv6 egress, to name a few. Today, we are introducing support for two new standards to help <a href="https://www.cloudflare.com/zero-trust/products/email-security/">increase email security</a> and improve deliverability to third-party upstream email providers.</p>
    <div>
      <h3>ARC</h3>
      <a href="#arc">
        
      </a>
    </div>
    <p><a href="https://arc-spec.org/">Authenticated Received Chain</a> (ARC) is an email authentication system designed to allow an intermediate email server (such as Email Routing) to preserve email authentication results. In other words, with ARC, we can securely preserve the results of validating sender authentication mechanisms like SPF and DKIM, which we support when the email is received, and transport that information to the upstream provider when we forward the message. ARC establishes a chain of trust with all the hops the message has passed through. So, if it was tampered with or changed in one of the hops, it is possible to see where by following that chain.</p><p>We began rolling out ARC support to Email Routing a few weeks ago. Here’s how it works:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/67xk7IFzgYjOSwQEqUSbY/d48e08b735580f20fcafca988bb43748/pasted-image-0--1--2.png" />
            
            </figure><p>As you can see, <code>joe@example.com</code> sends an Email to <code>henry@domain.example</code>, an Email Routing address, which in turn is forwarded to the final address, <code>example@gmail.com</code>.</p><p>Email Routing will use <code>@example.com</code>’s DMARC policy to check the SPF and DKIM alignments (SPF, DKIM, and DMARC <a href="https://www.cloudflare.com/learning/email-security/dmarc-dkim-spf/">help authenticate</a> email senders by verifying that the emails came from the domain that they claim to be from.) It then stores this authentication result by adding a <code>Arc-Authentication-Results</code> header in the message:</p>
            <pre><code>ARC-Authentication-Results: i=1; mx.cloudflare.net; dkim=pass header.d=cloudflare.com header.s=example09082023 header.b=IRdayjbb; dmarc=pass header.from=example.com policy.dmarc=reject; spf=none (mx.cloudflare.net: no SPF records found for postmaster@example.com) smtp.helo=smtp.example.com; spf=pass (mx.cloudflare.net: domain of joe@example.com designates 2a00:1440:4824:20::32e as permitted sender) smtp.mailfrom=joe@example.com; arc=none smtp.remote-ip=2a00:1440:4824:20::32e</code></pre>
            <p>Then we take a snapshot of all the headers and the body of the original message, and we generate an <code>Arc-Message-Signature</code> header with a DKIM-like cryptographic signature (in fact ARC uses the same DKIM keys):</p>
            <pre><code>ARC-Message-Signature: i=1; a=rsa-sha256; s=2022; d=email.cloudflare.net; c=relaxed/relaxed; h=To:Date:Subject:From:reply-to:cc:resent-date:resent-from:resent-to :resent-cc:in-reply-to:references:list-id:list-help:list-unsubscribe :list-subscribe:list-post:list-owner:list-archive; t=1697709687; bh=sN/+...aNbf==;</code></pre>
            <p>Finally, before forwarding the message to <code>example@gmail.com</code>, Email Routing generates the <code>Arc-Seal</code> header, another DKIM-like signature, composed out of the <code>Arc-Authentication-Results</code> and <code>Arc-Message-Signature</code>, and cryptographically “seals” the message:</p>
            <pre><code>ARC-Seal: i=1; a=rsa-sha256; s=2022; d=email.cloudflare.net; cv=none; b=Lx35lY6..t4g==;</code></pre>
            <p>When Gmail receives the message from Email Routing, it not only normally authenticates the last hop domain.example domain (Email Routing uses <a href="https://developers.cloudflare.com/email-routing/postmaster/#sender-rewriting">SRS</a>), but it also checks the ARC seal header, which provides the authentication results of the original sender.</p><p>ARC increases the traceability of the message path through email intermediaries, allowing for more informed delivery decisions by those who receive emails as well as higher deliverability rates for those who transport them, like Email Routing. It has been adopted by all the major email providers like <a href="https://support.google.com/a/answer/175365?hl=en">Gmail</a> and Microsoft. You can read more about the ARC protocol in the <a href="https://datatracker.ietf.org/doc/html/rfc8617">RFC8617</a>.</p>
    <div>
      <h3>MTA-STS</h3>
      <a href="#mta-sts">
        
      </a>
    </div>
    <p>As we said earlier, SMTP is an old protocol. Initially Email communications were done in the clear, in plain-text and unencrypted. At some point in time in the late 90s, the email providers community standardized STARTTLS, also known as Opportunistic TLS. The <a href="https://datatracker.ietf.org/doc/html/rfc3207">STARTTLS extension</a> allowed a client in a SMTP session to upgrade to TLS encrypted communications.</p><p>While at the time this seemed like a step forward in the right direction, we later found out that because STARTTLS can start with an unencrypted plain-text connection, and that can be hijacked, the protocol is <a href="https://lwn.net/Articles/866481/">susceptible to man-in-the-middle attacks</a>.</p><p>A few years ago MTA Strict Transport Security (<a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a>) was introduced by email service providers including Microsoft, Google and Yahoo as a solution to protect against downgrade and man-in-the-middle attacks in SMTP sessions, as well as solving the lack of security-first communication standards in email.</p><p>Suppose that <code>example.com</code> uses Email Routing. Here’s how you can enable MTA-STS for it.</p><p>First, log in to the <a href="https://dash.cloudflare.com/">Cloudflare dashboard</a> and select your account and zone. Then go to <b>DNS</b> &gt; <b>Records</b> and create a new CNAME record with the name “<code>_mta-sts</code>” that points to Cloudflare’s record “<code>_mta-sts.mx.cloudflare.net</code>”. Make sure to disable the proxy mode.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4czTYhSi9X5kPU3TZ0m861/e7d8162ff6f40494ce6d11fbf5899dad/pasted-image-0-2.png" />
            
            </figure><p>Confirm that the record was created:</p>
            <pre><code>$ dig txt _mta-sts.example.com
_mta-sts.example.com.	300	IN	CNAME	_mta-sts.mx.cloudflare.net.
_mta-sts.mx.cloudflare.net. 300	IN	TXT	"v=STSv1; id=20230615T153000;"</code></pre>
            <p>This tells the other end client that is trying to connect to us that we support MTA-STS.</p><p>Next you need an HTTPS endpoint at <code>mta-sts.example.com</code> to serve your policy file. This file defines the mail servers in the domain that use MTA-STS. The reason why HTTPS is used here instead of DNS is because not everyone uses DNSSEC yet, so we want to avoid another MITM attack vector.</p><p>To do this you need to deploy a very simple Worker that allows Email clients to pull Cloudflare’s Email Routing <a href="https://mta-sts.mx.cloudflare.net/.well-known/mta-sts.txt">policy</a> file using the <a href="https://en.wikipedia.org/wiki/Well-known_URI">“well-known” URI</a> convention. Go to your <b>Account</b> &gt; <b>Workers &amp; Pages</b> and press <b>Create Application</b>. Pick the “MTA-STS” template from the list.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6BBFtG8hiHehJw74L2DbHX/d2afee1d61f266382082c08681e05e1a/pasted-image-0--2--2.png" />
            
            </figure><p>This Worker simply proxies <code>https://mta-sts.mx.cloudflare.net/.well-known/mta-sts.txt</code> to your own domain. After deploying it, go to the Worker configuration, then <b>Triggers</b> &gt; <b>Custom Domains</b> and <b>Add Custom Domain</b>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7MWHc7AuevDzxafJ0gfaFb/f659d8c0ae8c30f9a1457bc4b20f3535/customdomains.png" />
            
            </figure><p>You can then confirm that your policy file is working:</p>
            <pre><code>$ curl https://mta-sts.example.com/.well-known/mta-sts.txt
version: STSv1
mode: enforce
mx: *.mx.cloudflare.net
max_age: 86400</code></pre>
            <p>This says that we enforce MTA-STS. Capable email clients will only deliver email to this domain over a secure connection to the specified MX servers. If no secure connection can be established the email will not be delivered.</p><p>Email Routing also supports MTA-STS upstream, which greatly improves security when forwarding your Emails to service providers like <a href="https://support.google.com/a/answer/9261504?hl=en">Gmail</a> or <a href="https://learn.microsoft.com/en-us/purview/enhancing-mail-flow-with-mta-sts">Microsoft</a>, and others.</p><p>While enabling MTA-STS involves a few steps today, we plan to simplify things for you and automatically configure MTA-STS for your domains from the Email Routing dashboard as a future improvement.</p>
    <div>
      <h2>Sending emails and replies from Workers</h2>
      <a href="#sending-emails-and-replies-from-workers">
        
      </a>
    </div>
    <p>Last year we announced <a href="https://developers.cloudflare.com/email-routing/email-workers/">Email Workers</a>, allowing anyone using Email Routing to associate a Worker script to an Email address rule, and programmatically process their incoming emails in any way they want. <a href="https://developers.cloudflare.com/workers/">Workers</a> is our serverless compute platform, it provides hundreds of features and APIs, like <a href="https://developers.cloudflare.com/workers/databases/">databases</a> and <a href="https://developers.cloudflare.com/r2/api/workers/workers-api-reference/">storage</a>. Email Workers opened doors to a flood of use-cases and applications that weren’t possible before like implementing allow/block lists, advanced rules, notifications to messaging applications, honeypot aggregators and more.</p><p>Still, you could only act on the incoming email event. You could read and process the email message, you could even manipulate and create some headers, but you couldn’t rewrite the body of the message or create new emails from scratch.</p><p>Today we’re announcing two new powerful Email Workers APIs that will further enhance what you can do with Email Routing and Workers.</p>
    <div>
      <h3>Send emails from Workers</h3>
      <a href="#send-emails-from-workers">
        
      </a>
    </div>
    <p>Now you can send an email from any Worker, from scratch, whenever you want, not just when you receive incoming messages, to any email address verified on Email Routing under your account. Here are a few practical examples where sending email from Workers to your verified addresses can be helpful:</p><ul><li><p>Daily digests with the news from your favorite publications.</p></li><li><p>Alert messages whenever the weather conditions are adverse.</p></li><li><p>Automatic notifications when systems complete tasks.</p></li><li><p>Receive a message composed of the inputs of a form online on a contact page.</p></li></ul><p>Let's see a simple example of a Worker sending an email. First you need to create “<code>send_email</code>” bindings in your wrangler.toml configuration:</p>
            <pre><code>send_email = [
    {type = "send_email", name = "EMAIL_OUT"}
 ]</code></pre>
            <p>And then creating a new message and sending it in a Workers is as simple as:</p>
            <pre><code>import { EmailMessage } from "cloudflare:email";
import { createMimeMessage } from "mimetext";

export default {
 async fetch(request, env) {
   const msg = createMimeMessage();
   msg.setSender({ name: "Workers AI story", addr: "joe@example.com" });
   msg.setRecipient("mary@domain.example");
   msg.setSubject("An email generated in a worker");
   msg.addMessage({
       contentType: 'text/plain',
       data: `Congratulations, you just sent an email from a worker.`
   });

   var message = new EmailMessage(
     "joe@example.com",
     "mary@domain.example",
     msg.asRaw()
   );
   try {
     await env.EMAIL_OUT.send(message);
   } catch (e) {
     return new Response(e.message);
   }

   return new Response("email sent!");
 },
};</code></pre>
            <p>This example makes use of <a href="https://muratgozel.github.io/MIMEText/">mimetext</a>, an open-source raw email message generator.</p><p>Again, for security reasons, you can only send emails to the addresses for which you confirmed ownership in Email Routing under your Cloudflare account. If you’re looking for sending email campaigns or newsletters to destination addresses that you do not control or larger subscription groups, you should consider other options like our <a href="/sending-email-from-workers-with-mailchannels/">MailChannels integration</a>.</p><p>Since sending Emails from Workers is not tied to the EmailEvent, you can send them from any type of Worker, including <a href="https://developers.cloudflare.com/workers/configuration/cron-triggers/">Cron Triggers</a> and <a href="https://developers.cloudflare.com/durable-objects/">Durable Objects</a>, whenever you want, you control all the logic.</p>
    <div>
      <h3>Reply to emails</h3>
      <a href="#reply-to-emails">
        
      </a>
    </div>
    <p>One of our most-requested features has been to provide a way to programmatically respond to incoming emails. It has been possible to do this with Email Workers in a very limited capacity by returning a permanent SMTP error message — but this may or may not be visible to the end user depending on the client implementation.</p>
            <pre><code>export default {
  async email(message, env, ctx) {
      message.setReject("Address not allowed");
  }
}
</code></pre>
            <p>As of today, you can now truly reply to incoming emails with another new message and implement smart auto-responders programmatically, adding any content and context in the main body of the message. Think of a customer support email automatically generating a ticket and returning the link to the sender, an out-of-office reply with instructions when you're on vacation, or a detailed explanation of why you rejected an email. Here’s a code example:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4NgbXFwy3Xw0VHLemZ4smZ/682a581c21af850880fada5bbc17e99f/Screenshot-2023-10-26-at-12.05.33.png" />
            
            </figure><p>To mitigate security risks and abuse, replying to incoming emails has a few requirements:</p><ul><li><p>The incoming email has to have valid DMARC.</p></li><li><p>The email can only be replied to once.</p></li><li><p>The <code>In-Reply-To</code> header of the reply message must match the <code>Message-ID</code> of the incoming message.</p></li><li><p>The recipient of the reply must match the incoming sender.</p></li><li><p>The outgoing sender domain must match the same domain that received the email.</p></li></ul><p>If these and other internal conditions are not met, then <code>reply()</code> will fail with an exception, otherwise you can freely compose your reply message and send it back to the original sender.</p><p>For more information the documentation to these APIs is available in our <a href="https://developers.cloudflare.com/email-routing/email-workers/runtime-api/">Developer Docs</a>.</p>
    <div>
      <h2>Subdomains support</h2>
      <a href="#subdomains-support">
        
      </a>
    </div>
    <p>This is a big one.</p><p>Email Routing is a <a href="https://developers.cloudflare.com/fundamentals/concepts/accounts-and-zones/#zones">zone-level</a> feature. A zone has a <a href="https://www.cloudflare.com/learning/dns/top-level-domain/">top-level domain</a> (the same as the zone name) and it can have subdomains (managed under the DNS feature.) As an example, I can have the <code>example.com</code>  zone, and then the <code>mail.example.com</code> and <code>corp.example.com</code> subdomains under it. However, we can only use Email Routing with the top-level domain of the zone, <code>example.com</code> in this example. While this is fine for the vast majority of use cases, some customers — particularly bigger organizations with complex email requirements — have asked for more flexibility.</p><p>This changes today. Now you can use Email Routing with any subdomain of any zone in your account. To make this possible we redesigned the dashboard UI experience to make it easier to get you started and manage all your Email Routing domains and subdomains, rules and destination addresses in one single place. Let’s see how it works.</p><p>To add Email Routing features to a new subdomain, log in to the <a href="https://dash.cloudflare.com/">Cloudflare dashboard</a> and select your account and zone. Then go to <b>Email</b> &gt; <b>Email Routing</b> &gt; <b>Settings</b> and click “Add subdomain”.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1WwS0LP1o8Ijlk0IzcqzCE/8528ed0f90a34029777d66b411d9e696/prev-req-rec.png" />
            
            </figure><p>Once the subdomain is added and the DNS records are configured, you can see it in the <b>Settings</b> list under the <b>Subdomains</b> section:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7gwBTgYQ36QxcvCGHfBqEd/450707647df2a8277eb0dc66e966088e/Domain.png" />
            
            </figure><p>Now you can go to <b>Email</b> &gt; <b>Email Routing</b> &gt; <b>Routing rules</b> and create new custom addresses that will show you the option of using either the top domain of the zone or any other configured subdomain.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1KJ9AIM6MpcaYeV5IrVZQw/1e306de0bd46177eb2601e8e4e600930/Screenshot-2023-10-25-at-11.55.31-AM.png" />
            
            </figure><p>After the new custom address for the subdomain is created you can see it in the list with all the other addresses, and manage it from there.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6vEJFroWoVivSr9n6SwPVl/28a4938f201e4153c964895d4687f1b2/custom-addresses.png" />
            
            </figure><p>It’s this easy.</p>
    <div>
      <h2>Final words</h2>
      <a href="#final-words">
        
      </a>
    </div>
    <p>We hope you enjoy the new features that we are announcing today. Still, we want to be clear: there are no changes in pricing, and Email Routing is still free for Cloudflare customers.</p><p>Ever since Email Routing was launched, we’ve been listening to customers’ feedback and trying to adjust our roadmap to both our requirements and their own ideas and requests. Email shouldn't be difficult; our goal is to listen, learn and keep improving the <a href="https://www.cloudflare.com/zero-trust/solutions/email-security-services/">email security service</a> with better, more powerful features.</p><p>You can find detailed information about the new features and more in our Email Routing <a href="https://developers.cloudflare.com/email-routing">Developer Docs</a>.</p><p>If you have any questions or feedback about Email Routing, please come see us in the <a href="https://community.cloudflare.com/new-topic?category=Feedback/Previews%20%26%20Betas&amp;tags=email">Cloudflare Community</a> and the <a href="https://discord.gg/cloudflaredev">Cloudflare Discord</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1OKqc3VieWKGRFBDtPU7io/18e8d2db548d341b0cb78a111aaa8480/Email-Routing-spot.png" />
            
            </figure><p></p> ]]></content:encoded>
            <category><![CDATA[Email Routing]]></category>
            <category><![CDATA[Email Workers]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">54W5SKQEt6kELFJMaWSRyh</guid>
            <dc:creator>Celso Martinho</dc:creator>
            <dc:creator>André Cruz</dc:creator>
            <dc:creator>Nelson Duarte</dc:creator>
        </item>
        <item>
            <title><![CDATA[Email Routing leaves Beta]]></title>
            <link>https://blog.cloudflare.com/email-routing-leaves-beta/</link>
            <pubDate>Tue, 25 Oct 2022 13:00:00 GMT</pubDate>
            <description><![CDATA[ Today Email Routing leaves Beta and an update on all the new things we've been adding to the service, including behind-the-scenes and not-so-visible improvements ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Email Routing was <a href="/introducing-email-routing/">announced</a> during Birthday Week in 2021 and has been available for free to every Cloudflare customer since early this year. When we launched in beta, we set out to make a difference and provide the most <a href="/migrating-to-cloudflare-email-routing/">uncomplicated</a>, more powerful <a href="https://www.cloudflare.com/learning/email-security/what-is-email-routing/">email forwarding service</a> on the Internet for all our customers, for free.</p><p>We feel we've met and <a href="https://w3techs.com/technologies/details/em-cloudflare">surpassed</a> our goals for the first year. Cloudflare Email Routing is now one of our most popular features and a top leading email provider. We are processing email traffic for more than 550,000 inboxes and forwarding an average of two million messages daily, and still growing month to month.</p><p>In February, we also announced that we were <a href="/why-we-are-acquiring-area-1/">acquiring</a> Area1. Merging their team, products, and know-how with Cloudflare was a significant step in strengthening our <a href="https://www.cloudflare.com/zero-trust/products/email-security/">Email Security</a> capabilities.</p><p>All this is good, but what about more features, you ask?</p><p>The team has been working hard to enhance Email Routing over the last few months. <b>Today Email Routing leaves beta.</b></p><p>Also, we feel that this could be a good time to give you an update on all the new things we've been adding to the service, including behind-the-scenes and not-so-visible improvements.</p><p>Let’s get started.</p>
    <div>
      <h3>Public API and Terraform</h3>
      <a href="#public-api-and-terraform">
        
      </a>
    </div>
    <p>Cloudflare has a strong API-first philosophy. All of our services expose their primitives in our vast API catalog and gateway, which we then “dogfood” extensively. For instance, our customer's configuration dashboard is built entirely on top of these APIs.</p><p>The Email Routing APIs didn't quite make it to this catalog on day one and were kept private and undocumented for a while. This summer we made those APIs <a href="https://api.cloudflare.com/#email-routing-destination-addresses-properties">available</a> on the public Cloudflare API catalog. You can programmatically use them to manage your destination emails, rules, and other Email Routing settings. The methods' definitions and parameters are documented, and we provide <a href="https://curl.se/">curl</a> examples if you want to get your hands dirty quickly.</p><p>Even better, if you're an infrastructure as code type of user and use Terraform to configure your systems automatically, we have you covered too. The latest releases of <a href="https://registry.terraform.io/providers/cloudflare/cloudflare/">Cloudflare's Terraform provider</a> now <a href="https://github.com/cloudflare/terraform-provider-cloudflare/tree/master/internal/provider">incorporate</a> the Email Routing API resources, which you can use with <a href="https://www.terraform.io/language/syntax/configuration">HCL</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/oPdbQSpCrGdInWwSmc3Gz/bfa929155775e78998b86f6149b6ed9d/image4-11.png" />
            
            </figure>
    <div>
      <h3>IPv6 egress</h3>
      <a href="#ipv6-egress">
        
      </a>
    </div>
    <p>IPv6 adoption is on a <a href="https://radar.cloudflare.com/reports/ipv6">sustained growth</a> path. Our latest IPv6 adoption report shows that we're nearing the 30% penetration figure globally, with some countries, where mobile usage is prevalent, exceeding the 50% mark. Cloudflare has offered full IPv6 support <a href="/introducing-cloudflares-automatic-ipv6-gatewa/">since 2011</a> as it aligns entirely with our mission to help build a better Internet.</p><p>We are IPv6-ready across the board in our network and our products, and Email Routing has had IPv6 ingress support since day one.</p>
            <pre><code>➜  ~ dig celso.io MX +noall +answer
celso.io.		300	IN	MX	91 isaac.mx.cloudflare.net.
celso.io.		300	IN	MX	2 linda.mx.cloudflare.net.
celso.io.		300	IN	MX	2 amir.mx.cloudflare.net.
➜  ~ dig linda.mx.cloudflare.net AAAA +noall +answer
linda.mx.cloudflare.net. 300	IN	AAAA	2606:4700:f5::b
linda.mx.cloudflare.net. 300	IN	AAAA	2606:4700:f5::c
linda.mx.cloudflare.net. 300	IN	AAAA	2606:4700:f5::d</code></pre>
            <p>More recently, we closed the loop and added egress IPv6 as well. Now we also use IPv6 when sending emails to upstream servers. If the MX server to which an email is being forwarded supports IPv6, then we will try to use it. <a href="https://en.wikipedia.org/wiki/Comparison_of_webmail_providers">Gmail</a> is one good example of a high traffic destination that has IPv6 MX records.</p>
            <pre><code>➜  ~ dig gmail.com MX +noall +answer
gmail.com.		3362	IN	MX	30 alt3.gmail-smtp-in.l.google.com.
gmail.com.		3362	IN	MX	5 gmail-smtp-in.l.google.com.
gmail.com.		3362	IN	MX	10 alt1.gmail-smtp-in.l.google.com.
gmail.com.		3362	IN	MX	20 alt2.gmail-smtp-in.l.google.com.
gmail.com.		3362	IN	MX	40 alt4.gmail-smtp-in.l.google.com.
➜  ~ dig gmail-smtp-in.l.google.com AAAA +noall +answer
gmail-smtp-in.l.google.com. 116	IN	AAAA	2a00:1450:400c:c03::1a</code></pre>
            <p>We’re happy to report that we’re now delivering most of our email to upstreams using IPv6.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/fpqLS2x7AzUJBHUfBd1Vw/65e0089ca141515c51b2ff2df5a4716e/image1-22.png" />
            
            </figure>
    <div>
      <h3>Observability</h3>
      <a href="#observability">
        
      </a>
    </div>
    <p>Email Routing is effectively another system that sits in the middle of the life of an email message. No one likes to navigate blindly, especially when using and depending on critical services like email, so it's our responsibility to provide as much observability as possible about what's going on when messages are transiting through our network.</p><p>End to end email deliverability is a complex topic and often challenging to troubleshoot due to the nature of the protocol and the number of systems and hops involved. We added two widgets, Analytics and Detailed Logs, which will hopefully provide the needed <a href="/email-routing-insights/">insights</a> and help increase visibility.</p><p>The Analytics section of Email Routing shows general statistics about the number of emails received during the selected timeframe, how they got handled to the upstream destination addresses, and a convenient time-series chart.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5idsdXSP16hDLOxayDOGqi/6b62d3ce039cdd9d94abc0e69405594f/image5-4.png" />
            
            </figure><p>On the Activity Log, you can get detailed information about what happened to each individual message that was received and then delivered to the destination. That information includes the sender and the custom address used, the timestamp, and the delivery attempt result. It also has the details of our SPF, DMARC, and DKIM validations. We also provide filters to help you find what you're looking for in case your message volume is higher.</p><p>More recently, the Activity Log now also shows <a href="https://en.wikipedia.org/wiki/Bounce_message">bounces</a>. A bounce message happens when the upstream SMTP server accepts the delivery, but then, for any reason (exceeded quota, virus checks, forged messages, or other issues), the recipient inbox decides to reject it and return a new message back with an error to the latest <a href="https://en.wikipedia.org/wiki/Message_transfer_agent">MTA</a> in the chain, read from the <a href="https://www.rfc-editor.org/rfc/rfc5322.html#section-3.6.7">Return-Path</a> headers, which is us.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7wyT0gd7l6GHjl7LVFjCUR/67628c835e2f8f76f0d6a16ef99011be/image8-4.png" />
            
            </figure>
    <div>
      <h3>Audit Logs</h3>
      <a href="#audit-logs">
        
      </a>
    </div>
    <p><a href="https://developers.cloudflare.com/fundamentals/account-and-billing/account-security/review-audit-logs/">Audit Logs</a> are available on all plan types and summarize the history of events, like login and logout actions, or zone configuration changes, made within your Cloudflare account. Accounts with multiple members or companies that must comply with regulatory obligations rely on Audit logs for tracking and evidence reasons.</p><p>Email Routing now integrates with Audit Logs and records all configuration changes, like adding a new address, changing a rule, or editing the catch-all address. You can find the Audit Logs on the dashboard under "Manage Account" or use our API to download the list.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/15USXKo9itSQkX8h8JS0kE/ea244f54b31e72c73be3416ee42ace4e/image6-7.png" />
            
            </figure>
    <div>
      <h3>Anti-spam</h3>
      <a href="#anti-spam">
        
      </a>
    </div>
    <p>Unsolicited and malicious messages plague the world of email and are a big problem for end users. They affect the user experience and efficiency of email, and often carry security risks that can lead to scams, identity theft, and manipulation.</p><p>Since day one, we have supported and validated <a href="https://www.cloudflare.com/learning/dns/dns-records/dns-spf-record/">SPF</a> (Sender Policy Framework) records,  <a href="https://www.cloudflare.com/learning/dns/dns-records/dns-dkim-record/">DKIM</a> (DomainKeys Identified Mail) signatures, and <a href="https://www.cloudflare.com/learning/dns/dns-records/dns-dmarc-record/">DMARC</a> (Domain-based Message Authentication) policies in incoming messages. These steps are important and mitigate some risks associated with authenticating the origin of an email from a specific legitimate domain, but they don't solve the problem completely. You can still have bad actors generating spam or <a href="https://www.cloudflare.com/learning/email-security/how-to-identify-a-phishing-email/">phishing</a> Attacks from other domains who ignore SPF or DKIM completely.</p><p>Anti-spam techniques today are often based on blocking emails whose origin (the IP address of the client trying to deliver the message) confidence score isn't great. This is commonly known in the industry as IP reputation. Other companies specialize in maintaining reputation lists for IPs and email domains, also known as <a href="https://en.wikipedia.org/wiki/Domain_Name_System-based_blocklist">RBL</a> lists, which are then shared across providers and used widely.</p><p>Simply put, an IP or a domain gets a bad reputation when it starts sending unsolicited or malicious emails. If your IP or domain has a bad reputation, you'll have a hard time delivering Emails from them to any major email provider. A bad reputation goes away when the IP or domain stops acting bad.</p><p>Cloudflare is a security company that knows a few things about IP <a href="https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#field-cf-threat_score">threat scores</a> and reputation. Working with the Area1 team and learning from them, we added support to flag and block emails received from what we consider bad IPs at the SMTP level. Our approach uses a combination of heuristics and reputation databases, including some RBL lists, which we constantly update.</p><p>This measure benefits not only those customers that receive a lot of spam, who will now get another layer of <a href="https://www.cloudflare.com/learning/dns/dns-records/protect-domains-without-email/">protection</a> and filtering, but also everyone else using Email Routing. The reputation of our own IP space and forwarding domain, which we use to deliver messages to other email providers, will improve, and with it, so will our deliverability success rate.</p>
    <div>
      <h3>IDN support</h3>
      <a href="#idn-support">
        
      </a>
    </div>
    <p><a href="https://datatracker.ietf.org/doc/html/rfc5891">Internationalized domain names</a>, or IDNs for short, are domains that contain at least one non-ASCII character. To accommodate backward compatibility with older Internet protocols and applications, the IETF approved the IDNA protocol (Internationalized Domain Names in Applications), which was then adopted by <a href="https://chromium.googlesource.com/chromium/src/+/main/docs/idn.md">many browsers</a>, <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name-registrar/">top-level domain registrars</a> and other service providers.</p><p>Cloudflare was <a href="/non-latinutf8-domains-now-fully-supported/">one of the first</a> platforms to adopt IDNs back in 2012.  Supporting internationalized domain names on email, though, is challenging. Email uses DNS, SMTP, and other standards (like TLS and DKIM signatures) stacked on top of each other. IDNA conversions need to work end to end, or something will break.</p><p>Email Routing didn’t support IDNs until now. Starting today, Email Routing can be used with IDNs and everything will work end to end as expected.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2w5ochqMtILwVjTYbA0Pb/659ce2e551b0ea0e8540045dd48839e7/image3-10.png" />
            
            </figure>
    <div>
      <h3>8-bit MIME transport</h3>
      <a href="#8-bit-mime-transport">
        
      </a>
    </div>
    <p>The SMTP protocol supports extensions since the <a href="https://www.rfc-editor.org/rfc/rfc2821">RFC 2821</a> revision. When an email client connects to an SMTP server, it announces its capabilities on the EHLO command.</p>
            <pre><code>➜  ~ telnet linda.mx.cloudflare.net 25
Trying 162.159.205.24...
Connected to linda.mx.cloudflare.net.
Escape character is '^]'.
220 mx.cloudflare.net Cloudflare Email ESMTP Service ready
EHLO celso.io
250-mx.cloudflare.net greets celso.io
250-STARTTLS
250-8BITMIME
250 ENHANCEDSTATUSCODES</code></pre>
            <p>This tells our client that we support the <a href="https://www.ietf.org/rfc/rfc3207.txt">Secure SMTP</a> over TLS, <a href="https://www.rfc-editor.org/rfc/rfc2034.html">Enhanced Error Codes</a>, and the <a href="https://www.rfc-editor.org/rfc/rfc6152">8-bit MIME Transport</a>, our latest addition.</p><p>Most modern clients and servers support the 8BITMIME extension, making transmitting binary files easier and more efficient without additional conversions to and from 7-bit.</p><p>Email Routing now supports transmitting 8BITMIME SMTP messages end to end and handles DKIM signatures accordingly.</p>
    <div>
      <h3>Other fixes</h3>
      <a href="#other-fixes">
        
      </a>
    </div>
    <p>We’ve been making other smaller improvements to Email Routing too:</p><ul><li><p>We ported our SMTP server to use <a href="https://boringssl.googlesource.com/boringssl/">BoringSSL</a>, Cloudflare’s SSL/TLS <a href="/make-ssl-boring-again/">implementation of choice</a>, and now support more ciphers when clients connect to us using STARTTLS and when we connect to upstream servers.</p></li><li><p>We made a number of improvements when we added our own <a href="https://datatracker.ietf.org/doc/html/rfc6376">DKIM signatures</a> in the messages. We keep our <a href="https://www.rust-lang.org/">Rust</a> ?DKIM <a href="https://github.com/cloudflare/dkim">implementation</a> open source on GitHub, and we also <a href="https://github.com/lettre/lettre/commits/master">contribute</a> to <a href="https://github.com/lettre/lettre">Lettre</a>, a Rust mailer library that we use.</p></li><li><p>When a destination address domain has multiple MX records, we now try them all in their preference value order, as described in the <a href="https://datatracker.ietf.org/doc/html/rfc974">RFC</a>, until we get a good delivery, or we fail.</p></li></ul>
    <div>
      <h3>Route to Workers update</h3>
      <a href="#route-to-workers-update">
        
      </a>
    </div>
    <p>We announced <a href="/announcing-route-to-workers/">Route to Workers</a> in May this year. Route to Workers enables everyone to programmatically process their emails and use them as triggers for any other action. In other words, you can choose to process any incoming email with a Cloudflare Worker script and then implement any logic you wish before you deliver it to a destination address or drop it. Think about it as programmable email.</p><p>The good news, though, is that we're near completing the project. The APIs, the dashboard configuration screens, the SMTP service, and the necessary <a href="https://github.com/cloudflare/workerd/blob/main/src/workerd/io/worker-interface.capnp">Cap'n Proto interface</a> to Workers are mostly complete, and "all" we have left now is adding the Email Workers primitives to the runtime and testing the hell out of everything before we ship.</p><p>Thousands of users are waiting for Email Workers to start creating advanced email processing workflows, and we're excited about the possibilities this will open. We promise we're working hard to open the public beta as soon as possible.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/xNqMMpydzI8i8kWisriPT/d01bb6f42e9fe4bad92e8fec3796f6b4/image7-4.png" />
            
            </figure>
    <div>
      <h3>What’s next?</h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>We keep looking at ways to improve email and will add more features and support to emerging protocols and extensions. Two examples are <a href="https://en.wikipedia.org/wiki/Authenticated_Received_Chain">ARC</a> (Authenticated Received Chain), a new signature-based authentication system designed with email forwarding services in mind, and <a href="https://datatracker.ietf.org/doc/html/rfc4952">EAI</a> (Email Address Internationalization), which we will be supporting soon.</p><p>In the meantime, you can start using Email Routing with your own domain if you haven't yet, it only <a href="/migrating-to-cloudflare-email-routing/">takes a few minutes</a> to set up, and it's free. Our <a href="https://developers.cloudflare.com/email-routing/">Developers Documentation page</a> has details on how to get started, troubleshooting, and technical information.</p><p>Ping us on our <a href="https://discord.com/invite/cloudflaredev">Discord server</a>, <a href="https://community.cloudflare.com/new-topic?category=Feedback/Previews%20%26%20Betas&amp;tags=email">community forum</a>, or <a href="https://twitter.com/cloudflare">Twitter</a> if you have suggestions or questions, the team is listening.</p> ]]></content:encoded>
            <category><![CDATA[Email]]></category>
            <category><![CDATA[Email Routing]]></category>
            <category><![CDATA[Email Workers]]></category>
            <guid isPermaLink="false">eSf4sLZdb5Gb9Y7mVbjOl</guid>
            <dc:creator>Celso Martinho</dc:creator>
            <dc:creator>André Cruz</dc:creator>
            <dc:creator>Nelson Duarte</dc:creator>
        </item>
    </channel>
</rss>