如果您正在开发一款应用程序,那么您一定会依赖电子邮件来与用户进行沟通。您通过电子邮件验证用户注册,通知用户各类事件,以及向他们发送电子发票。即便在代理工作流和其他 AI 工具日益普及的今天,电子邮件依然焕发着新价值:只需一封简单的邮件,就能成为这些工具的输入或输出载体。
但对于开发者而言,管理邮件服务却着实令人头疼,这往往是大多数团队最棘手的负担。开发者理应获得一套既简单可靠,又能深度融入其工作流的解决方案。
今天,我们非常激动地向大家宣布:Email Sending 的内测版正式上线!这项全新功能让您可以直接从 Cloudflare Workers 发送事务性电子邮件。Email Sending 与我们广受欢迎的 Email Routing 产品强强联合、功能互补,共同构成了全新的 Cloudflare Email Service——为您的所有电子邮件需求提供统一、完整的开发者体验。
通过 Cloudflare Email Service,我们将多年来在邮件安全防护与路由传输方面的丰富经验,与开发者平台的强大能力相结合。现在,发送电子邮件变得非常简单,只需将绑定添加到 Worker 并调用 send 即可:
export default {
async fetch(request, env, ctx) {
await env.SEND_EMAIL.send({
to: [{ email: "hello@example.com" }],
from: { email: "api-sender@your-domain.com", name: "Your App" },
subject: "Hello World",
text: "Hello World!"
});
return new Response(`Successfully sent email!`);
},
};
电子邮件是用户体验的核心支柱。当用户离开您的应用时,它正是您与他们保持联系的关键纽带。用户依赖电子邮件获取重要通知,无论是密码重置、购物收据、魔法登录链接,还是新手引导流程。一旦电子邮件服务失效,您的整个应用体验也将随之崩塌。
这意味着,确保电子邮件能够可靠且快速地送达用户收件箱至关重要。一封延迟十分钟才送达的魔法链接邮件,可能会导致用户流失;而一封被投递到垃圾邮件文件夹的邮件,则会打乱用户流程,甚至侵蚀用户对您产品的信任。正因如此,我们致力于通过 Cloudflare Email Service,重点提升邮件的送达率和收件箱到达速度。
为实现这一功能,我们将与 DNS 深度集成,自动配置必要的 DNS 记录(如 SPF、DKIM 和 DMARC),以便邮件服务商能够验证您的发件域名并信任您发送的电子邮件。此外,秉承 Cloudflare 的一贯风格,我们的 Cloudflare Email Service 是一项全球性服务。这意味着,我们能够在全球任何地方以低延迟投递您的邮件,而无需应对跨区域管理服务器的复杂问题。
将电子邮件视为应用程序的核心组成部分,也意味着需要为开发工作流中的每个接触点进行构建。我们正将 Cloudflare Email Service 打造为 Cloudflare 技术栈的一部分,让基于邮件开发变得像编写 Worker 一样自然。
实际上,这意味着需要解决交易电子邮件工作流程的各个环节:
Cloudflare Email Service 入门非常简单!您无需管理复杂的 API 密钥和机密,只需在 wrangler.jsonc 配置文件中绑定 Email 服务,即可安全发送邮件,彻底杜绝凭证泄露风险。
您可以利用 Workers 处理接收的邮件,将附件存储至 R2,并将任务添加到 Queues 队列中,从而让邮件发送操作脱离应用的核心处理路径。此外,您还能使用 wrangler 工具在本地模拟 Email Sending,无需在各类工具和环境之间频繁切换,即可测试用户的旅程。
在生产环境中,您可以清晰洞察邮件的投递情况,通过退信率和投递事件实时掌握邮件状态。当用户反馈未收到邮件时,您能迅速查看投递状态,快速定位问题并帮助用户及时恢复正常使用。
我们也在全力确保 Cloudflare Email Service 能与您现有的应用程序无缝集成。若您需要从外部服务发送邮件,既可以选择使用 REST API,也可以通过 SMTP 协议实现。同样地,如果您一直依赖现有的邮件框架(例如 React Email)来向用户发送内容丰富的 HTML 渲染邮件,那么您完全可以继续在 Cloudflare Email Service 中使用这些框架。只需导入相应的库,渲染您的模板,然后像在其他环境中一样,将其传递给 `send` 方法即可。
import { render, pretty, toPlainText } from '@react-email/render';
import { SignupConfirmation } from './templates';
export default {
async fetch(request, env, ctx) {
// Convert React Email template to html
const html = await pretty(await render(<SignupConfirmation url="https://your-domain.com/confirmation-id"/>));
// Use the Email Sending binding to send emails
await env.SEND_EMAIL.send({
to: [{ email: "hello@example.com" }],
from: { email: "api-sender@your-domain.com", name: "Welcome" },
subject: "Signup Confirmation",
html,
text: toPlainText(html)
});
return new Response(`Successfully sent email!`);
}
};
Email Routing 和 Email Sending:协同工作,效果更佳
发送电子邮件只是故事的一半。应用程序往往还需要接收和解析邮件,才能构建强大的工作流。通过将 Email Sending 功能与我们现有的 Email Routing 功能相结合,我们为应用程序的所有邮件需求提供了一套完整的全链路解决方案。
Email Routing 功能支持您在自己的域名下创建自定义电子邮件地址,并通过 Worker 以编程方式处理接收到的邮件,从而实现以下强大应用流程:
使用 Workers AI 解析、总结甚至标记传入电子邮件:标记来自客户的安全事件,检测错误或事件的早期迹象,和/或根据这些传入电子邮件生成自动回复。
在 JIRA 或 Linear 等系统中,根据发送到 support@your-domain.com 的电子邮件创建支持工单。
处理发送到 invoices@your-domain.com 的发票,并将附件存储在 R2 中。
要使用 Email Routing,请将 email 处理程序添加到您的 Worker 应用程序并根据需要进行处理:
export default {
// Create an email handler to process emails delivered to your Worker
async email(message, env, ctx) {
// Classify incoming emails using Workers AI
const { score, label } = env.AI.run("@cf/huggingface/distilbert-sst-2-int8", { text: message.raw" })
env.PROCESSED_EMAILS.send({score, label, message});
},
};
当您将入站路由与出站发送相结合时,您可以在 Cloudflare 内部完全实现闭环。想象一下,一位用户向您的支持地址发送电子邮件。一个 Worker 可以接收电子邮件,解析其内容,调用第三方 API 创建工单,然后使用 Email Sending 绑定立即向用户发送包含工单号的确认信息。这就是统一的 Cloudflare Email Service 的强大之处。
使用 Email Sending 功能需订阅付费版 Workers 服务,我们将根据实际发送邮件数量计费。目前套餐方案仍在最终确定中,一旦定价确定(远早于正式收费时间),我们会第一时间更新官方文档、更新日志并通知所有用户。另外,Email Routing 功能的现有使用限制保持不变。
在当今的应用程序中,电子邮件仍是核心要素;而在下一代 AI 智能体、后台任务和自动化工作流里,它正变得不可或缺。我们打造的 Cloudflare Email Service,将成为这一全新应用时代的强劲引擎。今年 11 月,我们将开启该服务的内测版。
我们非常高兴将 Cloudflare Email Service 纳入开发人员平台,并期待看到您如何重新定义日益依赖电子邮件的用户体验!