<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs | Email Service</title><description>Cloudflare changelogs for Email Service</description><link>https://developers.stormtrust.net/changelog/</link><item><title>Email Service - Preview sent emails in the Activity log</title><link>https://developers.stormtrust.net/changelog/post/2026-07-17-email-message-preview/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-07-17-email-message-preview/</guid><description>&lt;p&gt;You can now preview the content of sent emails directly from the Email Service Activity log. Expand a sent email and open the new &lt;strong&gt;Preview&lt;/strong&gt; section to inspect the message as it was sent, across tabs for the rendered &lt;strong&gt;HTML&lt;/strong&gt; body, the &lt;strong&gt;Text&lt;/strong&gt; body, the &lt;strong&gt;Headers&lt;/strong&gt;, the &lt;strong&gt;Attachments&lt;/strong&gt;, and the full &lt;strong&gt;Raw&lt;/strong&gt; &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc5322&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RFC 5322&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; source.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=2864,height=1172,format=webp/_astro/email-message-preview.Bj6Lk8Y6.png&quot; alt=&quot;The rendered HTML preview of a sent email in the Email Service Activity log&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2864&quot; height=&quot;1172&quot;&gt;
&lt;p&gt;Previously, the Activity log surfaced delivery and authentication metadata but not the message content, making rendering and content issues harder to debug. Message preview closes that gap.&lt;/p&gt;
&lt;p&gt;To make messages previewable, turn on &lt;strong&gt;Email preview&lt;/strong&gt; in your sending domain&apos;s settings. Previews cover messages sent while the setting is turned on and are retained for about seven days. Sending domains onboarded on or after 2026-07-02 have &lt;strong&gt;Email preview&lt;/strong&gt; turned on automatically.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=2256,height=264,format=webp/_astro/email-preview-setting.XEd1WIiO.png&quot; alt=&quot;The Email preview setting in a sending domain&apos;s settings&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2256&quot; height=&quot;264&quot;&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.stormtrust.net/email-service/observability/logs/#message-preview&quot;&gt;Email logs&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Email Service, Queues - Subscribe to Email Sending events with Queues</title><link>https://developers.stormtrust.net/changelog/post/2026-07-15-event-subscriptions/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-07-15-event-subscriptions/</guid><description>&lt;p&gt;You can now subscribe to &lt;strong&gt;&lt;a href=&quot;https://developers.stormtrust.net/email-service/api/send-emails/&quot;&gt;Email Sending&lt;/a&gt; events&lt;/strong&gt; through &lt;a href=&quot;https://developers.stormtrust.net/queues/event-subscriptions/&quot;&gt;Queues event subscriptions&lt;/a&gt; and receive outbound transactional email lifecycle events on a queue. Each subscription is scoped to one sending domain — either the zone apex, such as &lt;code&gt;example.com&lt;/code&gt;, or a verified sending subdomain, such as &lt;code&gt;send.example.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Six event types are published: &lt;code&gt;message.delivered&lt;/code&gt;, &lt;code&gt;message.deferred&lt;/code&gt;, &lt;code&gt;message.bounced&lt;/code&gt;, &lt;code&gt;message.failed&lt;/code&gt;, &lt;code&gt;message.rejected&lt;/code&gt;, and &lt;code&gt;message.complained&lt;/code&gt;. Use them to track deliverability, react to bounces and complaints, and drive suppression or retry logic. Email Routing events are not published on this source.&lt;/p&gt;
&lt;p&gt;Each event includes the message details, delivery status, and SMTP response:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;cf.email.sending.message.delivered&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;source&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;email.sending&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;zoneId&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;023e105f4ecef8ad9ca31a8372d0c353&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;domain&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;example.com&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;payload&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;messageId&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;0101018f7d0c4d9a-msg-deadbeef&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;recipient&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user@example.net&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;terminal&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;delivery&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;status&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;delivered&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;smtpStatusCode&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;250&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.stormtrust.net/email-service/platform/event-subscriptions/&quot;&gt;Event subscriptions&lt;/a&gt; to see all event types and example payloads.&lt;/p&gt;</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category><category>Queues</category></item><item><title>Email Service - Authenticated SMTP submission now available in beta</title><link>https://developers.stormtrust.net/changelog/post/2026-06-08-smtp-submission/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-06-08-smtp-submission/</guid><description>&lt;p&gt;You can now send emails through &lt;strong&gt;Cloudflare Email Service&lt;/strong&gt; using authenticated &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/send-emails/smtp/&quot;&gt;SMTP submission&lt;/a&gt; on &lt;code&gt;smtp.mx.cloudflare.net:465&lt;/code&gt;. SMTP joins the &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/send-emails/rest-api/&quot;&gt;REST API&lt;/a&gt; and the &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/send-emails/workers-api/&quot;&gt;Workers binding&lt;/a&gt; as a third way to send transactional email — useful for existing applications that already speak SMTP and language-native SMTP libraries (Nodemailer, &lt;code&gt;smtplib&lt;/code&gt;, PHPMailer, JavaMail).&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;&lt;code&gt;smtp.mx.cloudflare.net&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;465&lt;/code&gt; (implicit TLS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AUTH&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PLAIN&lt;/code&gt; or &lt;code&gt;LOGIN&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Username&lt;/td&gt;
&lt;td&gt;&lt;code&gt;api_token&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password&lt;/td&gt;
&lt;td&gt;A Cloudflare API token (account-owned or user-owned) with &lt;strong&gt;Email Sending: Edit&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Submissions enter the same delivery pipeline as the REST API and Workers binding: identical &lt;a href=&quot;https://developers.stormtrust.net/email-service/platform/limits/&quot;&gt;limits&lt;/a&gt;, automatic DKIM and ARC signing, and shared dashboard logs.&lt;/p&gt;
&lt;p&gt;Send your first email with a single command:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --ssl-reqd&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --url&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;smtps://smtp.mx.cloudflare.net:465&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --user&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;api_token:&amp;lt;API_TOKEN&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --mail-from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;welcome@yourdomain.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --mail-rcpt&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;user@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --upload-file&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; mail.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Refer to the &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/send-emails/smtp/&quot;&gt;SMTP reference&lt;/a&gt; for authentication details, response codes, and language-specific examples.&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Email Service - Send emails with named recipient addresses</title><link>https://developers.stormtrust.net/changelog/post/2026-05-28-named-email-recipients/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-05-28-named-email-recipients/</guid><description>
&lt;p&gt;You can now send emails with display names on recipient addresses in addition to the existing &lt;code&gt;from&lt;/code&gt; support. Pass an object with &lt;code&gt;email&lt;/code&gt; and an optional &lt;code&gt;name&lt;/code&gt; field for &lt;code&gt;to&lt;/code&gt;, &lt;code&gt;cc&lt;/code&gt;, &lt;code&gt;bcc&lt;/code&gt;, &lt;code&gt;replyTo&lt;/code&gt;, or &lt;code&gt;from&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;js&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.js&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;EMAIL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			from: { email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;support@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Support Team&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			to: { email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;jane@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Jane Doe&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			cc: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;				&quot;manager@company.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				{ email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;team@company.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Engineering Team&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			subject: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Welcome!&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			html: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;h1&gt;Thanks for joining!&amp;#x3C;/h1&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			text: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Thanks for joining!&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; Response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ messageId: response.messageId });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.ts&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Promise&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;EMAIL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			from: { email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;support@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Support Team&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			to: { email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;jane@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Jane Doe&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			cc: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;				&quot;manager@company.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				{ email: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;team@company.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, name: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Engineering Team&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			subject: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Welcome!&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			html: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;h1&gt;Thanks for joining!&amp;#x3C;/h1&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			text: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Thanks for joining!&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; Response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ messageId: response.messageId });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;satisfies&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ExportedHandler&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://developers.stormtrust.net/home/runner/work/infrastructure/infrastructure/org/apps/developers/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;Plain strings remain fully supported for backward compatibility, and you can mix strings and named objects in the same array.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/send-emails/workers-api/&quot;&gt;Workers API&lt;/a&gt; and &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/send-emails/rest-api/&quot;&gt;REST API&lt;/a&gt; documentation for full request examples.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Email Service - Email Sending now in public beta</title><link>https://developers.stormtrust.net/changelog/post/2026-04-16-email-sending-public-beta/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-04-16-email-sending-public-beta/</guid><description>
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.stormtrust.net/email-service/api/send-emails/&quot;&gt;Email Sending&lt;/a&gt;&lt;/strong&gt; is now in public beta. Send transactional emails directly from Workers (&lt;code&gt;env.EMAIL.send()&lt;/code&gt;) or the REST API, with support for HTML, plain text, attachments, inline images, and custom headers. Email Sending joins &lt;a href=&quot;https://blog.cloudflare.com/introducing-email-routing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Email Routing&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; under the new &lt;strong&gt;Cloudflare Email Service&lt;/strong&gt; — a single service for sending and receiving email on the Cloudflare developer platform.&lt;/p&gt;
&lt;p&gt;Send an email from a Worker in a few lines of code:&lt;/p&gt;
&lt;div&gt;&lt;div data-nb-tabs data-nb-sync-key=&quot;workersExamples&quot; class&gt;&lt;div class=&quot;relative flex border-b border-border&quot; role=&quot;tablist&quot; data-nb-tabs-list&gt;&lt;span class=&quot;bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out&quot; data-nb-tabs-indicator aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;mt-3&quot;&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;JavaScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;js&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.js&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;js&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot; data-nb-lang=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;EMAIL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			from: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;notifications@yourdomain.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			to: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			subject: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Order confirmed&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			html: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;h1&gt;Your order has been confirmed&amp;#x3C;/h1&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			text: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Your order has been confirmed.&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; Response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ messageId: response.messageId });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div role=&quot;tabpanel&quot; data-nb-tabs-content data-nb-tab-label=&quot;TypeScript&quot; class&gt;&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;src/index.ts&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; fetch&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Promise&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;EMAIL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			from: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;notifications@yourdomain.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			to: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			subject: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Order confirmed&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			html: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;#x3C;h1&gt;Your order has been confirmed&amp;#x3C;/h1&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			text: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Your order has been confirmed.&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		return&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; Response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ messageId: response.messageId });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;satisfies&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ExportedHandler&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://developers.stormtrust.net/home/runner/work/infrastructure/infrastructure/org/apps/developers/src/components/ui/tabs/Tabs.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;Email Service also integrates with the &lt;a href=&quot;https://developers.stormtrust.net/agents/&quot;&gt;Agents SDK&lt;/a&gt;, giving your agents a native &lt;code&gt;onEmail&lt;/code&gt; hook to receive, process, and reply to emails. Combined with the new &lt;a href=&quot;https://github.com/cloudflare/mcp-server-cloudflare&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Email MCP server&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; and Wrangler CLI email commands, any agent can send email regardless of where it runs.&lt;/p&gt;
&lt;p&gt;Start sending and receiving emails from Workers and agents today. Email Sending is available on the Workers paid plan. Refer to the &lt;a href=&quot;https://developers.stormtrust.net/email-service/&quot;&gt;Email Service documentation&lt;/a&gt; to get started.&lt;/p&gt;</description><pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Email Service - Subaddressing support in Email Routing</title><link>https://developers.stormtrust.net/changelog/post/2025-07-21-subaddressing/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-07-21-subaddressing/</guid><description>&lt;p&gt;Subaddressing, as defined in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc5233&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RFC 5233&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;, also known as plus addressing, is now supported in Email Routing. This enables using the &quot;+&quot; separator to augment your custom addresses with arbitrary detail information.&lt;/p&gt;
&lt;p&gt;Now you can send an email to &lt;code&gt;user+detail@example.com&lt;/code&gt; and it will be captured by the &lt;code&gt;user@example.com&lt;/code&gt; custom address. The &lt;code&gt;+detail&lt;/code&gt; part is ignored by Email Routing, but it can be captured next in the processing chain in the logs, an &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/route-emails/email-handler/&quot;&gt;Email Worker&lt;/a&gt; or an &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/email-agent&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Agent application&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Customers can use this feature to dynamically add context to their emails, such as tracking the source of an email or categorizing emails without needing to create multiple custom addresses.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=1316,height=678,format=webp/_astro/subaddressing.x65bljxx.png&quot; alt=&quot;Subaddressing&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1316&quot; height=&quot;678&quot;&gt;
&lt;p&gt;Check our &lt;a href=&quot;https://developers.stormtrust.net/email-service/configuration/email-routing-addresses/#subaddressing&quot;&gt;Developer Docs&lt;/a&gt; to learn how to enable subaddressing in Email Routing.&lt;/p&gt;</description><pubDate>Mon, 21 Jul 2025 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Email Service - Mail authentication requirements for Email Routing</title><link>https://developers.stormtrust.net/changelog/post/2025-06-30-mail-authentication/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-06-30-mail-authentication/</guid><description>&lt;p&gt;The Email Routing platform supports &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc7208&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SPF&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; records and &lt;a href=&quot;https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DKIM (DomainKeys Identified Mail)&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; signatures and
honors these protocols when the sending domain has them configured. However, if the sending domain doesn&apos;t implement them,
we still forward the emails to upstream mailbox providers.&lt;/p&gt;
&lt;p&gt;Starting on July 3, 2025, we will require all emails to be authenticated using at least one of the protocols, SPF or DKIM, to
forward them. We also strongly recommend that all senders implement the DMARC protocol.&lt;/p&gt;
&lt;p&gt;If you are using a Worker with an Email trigger to receive email messages and forward them upstream, you will need to handle the case where
the forward action may fail due to missing authentication on the incoming email.&lt;/p&gt;
&lt;p&gt;SPAM has been a long-standing issue with email. By enforcing mail authentication, we will increase the efficiency of identifying abusive senders and blocking
bad emails.
If you&apos;re an email server delivering emails to large mailbox providers, it&apos;s likely you already use these protocols; otherwise, please ensure
you have them properly configured.&lt;/p&gt;</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Email Service - Local development support for Email Workers</title><link>https://developers.stormtrust.net/changelog/post/2025-04-08-local-development/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-04-08-local-development/</guid><description>&lt;p&gt;Email Workers enables developers to programmatically take action on anything that hits their email inbox. If you&apos;re building with Email Workers, you can now test the behavior of an Email Worker script, receiving, replying and sending emails in your local environment using &lt;code&gt;wrangler dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Below is an example that shows you how you can receive messages using the &lt;code&gt;email()&lt;/code&gt; handler and parse them using &lt;a href=&quot;https://www.npmjs.com/package/postal-mime&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;postal-mime&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; as&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; PostalMime &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;postal-mime&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; email&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; parser&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; PostalMime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; rawEmail&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(message.raw);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; email&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; parser.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; rawEmail.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;arrayBuffer&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		console.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(email);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Now when you run &lt;code&gt;npx wrangler dev&lt;/code&gt;, wrangler will expose a local &lt;code&gt;/cdn-cgi/handler/email&lt;/code&gt; endpoint that you can &lt;code&gt;POST&lt;/code&gt; email messages to and trigger your Worker&apos;s &lt;code&gt;email()&lt;/code&gt; handler:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;http://localhost:8787/cdn-cgi/handler/email&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --url-query&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;from=sender@example.com&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --url-query&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;to=recipient@example.com&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --data-raw&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Received: from smtp.example.com (127.0.0.1)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        by cloudflare-email.com (unknown) id 4fwwffRXOpyR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        for &amp;lt;recipient@example.com&amp;gt;; Tue, 27 Aug 2024 15:50:20 +0000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;From: &quot;John&quot; &amp;lt;sender@example.com&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;Reply-To: sender@example.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;To: recipient@example.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;Subject: Testing Email Workers Local Dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;Content-Type: text/html; charset=&quot;windows-1252&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;X-Mailer: Curl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;Date: Tue, 27 Aug 2024 08:49:44 -0700&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;Message-ID: &amp;lt;6114391943504294873000@ZSH-GHOSTTY&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;Hi there&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;This is what you get in the console:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;headers&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;received&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;from smtp.example.com (127.0.0.1) by cloudflare-email.com (unknown) id 4fwwffRXOpyR for &amp;lt;recipient@example.com&amp;gt;; Tue, 27 Aug 2024 15:50:20 +0000&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;from&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;John&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &amp;lt;sender@example.com&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;reply-to&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;sender@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;to&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;recipient@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Testing Email Workers Local Dev&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;content-type&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;text/html; charset=&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;windows-1252&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;x-mailer&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Curl&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Tue, 27 Aug 2024 08:49:44 -0700&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;key&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;message-id&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;value&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;lt;6114391943504294873000@ZSH-GHOSTTY&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;from&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: { &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;address&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;sender@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;John&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;to&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;address&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;recipient@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;replyTo&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: [{ &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;address&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;sender@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; }],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;subject&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Testing Email Workers Local Dev&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;messageId&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&amp;lt;6114391943504294873000@ZSH-GHOSTTY&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;date&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;2024-08-27T15:49:44.000Z&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;html&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Hi there&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;attachments&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Local development is a critical part of the development flow, and also works for sending, replying and forwarding emails. See &lt;a href=&quot;https://developers.stormtrust.net/email-service/local-development/routing/&quot;&gt;our documentation&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item><item><title>Email Service - Threaded replies now possible in Email Workers</title><link>https://developers.stormtrust.net/changelog/post/2025-03-12-reply-limits/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-03-12-reply-limits/</guid><description>&lt;p&gt;We’re removing some of the restrictions in Email Routing so that AI Agents and task automation can better handle email workflows, including how Workers can &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/route-emails/email-handler/#reply-to-emails&quot;&gt;reply&lt;/a&gt; to incoming emails.&lt;/p&gt;
&lt;p&gt;It&apos;s now possible to keep a threaded email conversation with an &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/route-emails/email-handler/&quot;&gt;Email Worker&lt;/a&gt; script as long as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The incoming email has to have valid &lt;a href=&quot;https://www.cloudflare.com/learning/dns/dns-records/dns-dmarc-record/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DMARC&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The email can only be replied to once in the same &lt;code&gt;EmailMessage&lt;/code&gt; event.&lt;/li&gt;
&lt;li&gt;The recipient in the reply must match the incoming sender.&lt;/li&gt;
&lt;li&gt;The outgoing sender domain must match the same domain that received the email.&lt;/li&gt;
&lt;li&gt;Every time an email passes through Email Routing or another MTA, an entry is added to the &lt;code&gt;References&lt;/code&gt; list. We stop accepting replies to emails with more than 100 &lt;code&gt;References&lt;/code&gt; entries to prevent abuse or accidental loops.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&apos;s an example of a Worker responding to Emails using a Workers AI model:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;AI model responding to emails&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; PostalMime &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;postal-mime&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { createMimeMessage } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;mimetext&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; { EmailMessage } &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;cloudflare:email&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; default&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;	async&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; email&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-1jdh33&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; email&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; PostalMime.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(message.raw);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; res&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;AI&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;@cf/meta/llama-2-7b-chat-fp16&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			messages: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;					role: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;					content: email.text &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;??&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;		// message-id is generated by mimetext&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; createMimeMessage&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;setHeader&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;In-Reply-To&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, message.headers.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Message-ID&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;setSender&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;agent@example.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;setRecipient&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(message.from);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;setSubject&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;Llama response&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;addMessage&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			contentType: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;text/plain&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			data:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;				res &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;instanceof&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ReadableStream&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;					?&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; Response&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(res).&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;					:&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; res.response&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; replyMessage&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; EmailMessage&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;&amp;lt;email&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			message.from,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;			response.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;asRaw&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;		await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; message.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;reply&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(replyMessage);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;} &lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;satisfies&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; ExportedHandler&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Env&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;See &lt;a href=&quot;https://developers.stormtrust.net/email-service/api/route-emails/email-handler/#reply-to-emails&quot;&gt;Reply to emails from Workers&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Wed, 12 Mar 2025 00:00:00 GMT</pubDate><product>Email Service</product><category>Email Service</category></item></channel></rss>