适用于 Cloudflare 的 Yuva Email Worker
通过 Cloudflare 接收支持邮件。无需运行邮件服务器。
Cloudflare® Email Routing 接收你支持地址的邮件,开源的 Yuva Email Worker 为每封邮件签名后交给 Yuva。它会作为一个由你的团队回复的对话,出现在共享收件箱里。
是什么
前置 Email Routing
Cloudflare Email Routing 成为你域名的 MX 并接收邮件。Yuva 不监听 SMTP,所以无需安装或维护邮件服务器。
一个小巧的开源 Worker
Yuva Email Worker 读取原始邮件和信封,为请求签名并发给 Yuva。解析、线程归并和垃圾邮件判断都留在服务器上。
真实的对话
发到支持地址的邮件会在收件箱中开启或延续一个对话,团队在与聊天和应用内消息相同的面板中回复。
一封邮件如何从客户送达你的团队
- 1客户给你的某个支持地址发信,例如 support@example.com。
- 2Cloudflare Email Routing 接收邮件并交给 Yuva Email Worker。
- 3Worker 使用你与 Yuva 共享的密钥,以 HMAC-SHA256 对原始邮件、两个信封地址和时间戳签名,并发送到你 Yuva 服务器的 /ingress/email。
- 4在读取邮件之前,Yuva 会检查签名以及时间戳是否在 5 分钟之内。签名错误的请求会被拒绝。
- 5Yuva 根据收件地址找到邮件渠道,并按 In-Reply-To 和 References 把邮件归入它所属的对话。其他情况会开启新对话。回复会重新打开对话。
- 6你的团队在面板中回复。回复通过邮件渠道自己的 SMTP 账号发送,例如 Amazon SES、Postmark 或你自己的中继,使用同一个地址并在同一个线程中。回复不经过 Worker。
拒收会反馈给发件人
当 Yuva 永久拒绝一封邮件时,例如地址未知、发件人被屏蔽或邮件过大,Worker 会拒收它,发件人会收到带有 Yuva 所给原因的永久性 SMTP 错误。
如果无法访问 Yuva
如果 Yuva 返回服务器错误、20 秒内没有响应或无法访问,只要你设置了 FALLBACK_FORWARD,Worker 就可以把邮件转发到你选择的地址。该地址必须是 Email Routing 中已验证的目标地址。邮件会作为普通转发邮件送达,不会出现在 Yuva 中。没有 FALLBACK_FORWARD 时,投递会失败并报错,发送方服务器可能稍后重试。
几步即可完成设置
你需要一台 Yuva 服务器,以及一个管理该域名的 Cloudflare 账号。
- 1
在 Yuva 中,打开设置 → 你的收件箱 → 渠道 → 邮件,添加支持地址。在服务器上设置一个密钥并重启:
YUVA_INGRESS_SECRET=<openssl rand -hex 32> YUVA_INGRESS_AUTHSERV_ID=mx.cloudflare.net
- 2
使用同一个密钥,将 Worker 部署到你的 Cloudflare 账号:
cd edge bun install bunx wrangler login bunx wrangler secret put INGRESS_SECRET bunx wrangler deploy --var YUVA_URL:https://support.example.com
- 3
在 Cloudflare 控制台中,打开你的域名 → Email → Email Routing 并启用。Cloudflare 会添加它的 MX 和 SPF 记录。
- 4
在 Routing rules 下,把每个支持地址发送到名为 yuva-edge 的 Worker。对于兜底渠道,把兜底规则指向它。
- 5
发送一条测试消息,看对话出现在面板中。
- 6
可选:在部署命令中添加备用地址,以便在故障期间保留邮件:
bunx wrangler deploy --var YUVA_URL:https://support.example.com --var FALLBACK_FORWARD:you@example.org
Email Routing 会成为域名的 MX,所以请使用没有其他邮件服务器处理的域名或子域名。
阅读设置指南 →不与 Cloudflare 绑定
Worker 是调用 /ingress/email 的一种方式。任何邮件服务器或中继都可以用相同的签名标头发送原始邮件,而投递给命令的邮件服务器可以把邮件通过管道交给 yuva ingest-email。请求格式记录在 Worker 的 README 中。
问与答
我需要运行邮件服务器吗?
不适用于收件。Yuva 不监听 SMTP;邮件由 Cloudflare Email Routing 接收,再由 Worker 转交。回复需要邮件渠道的 SMTP 账号,例如 Amazon SES、Postmark 或你自己的中继。
Yuva 宕机时会怎样?
设置了 FALLBACK_FORWARD 后,邮件会改为转发到该地址。没有它则投递失败,发送方服务器可能会重试。Yuva 有意拒收的邮件,例如发往未知地址的邮件,会被拒收而不是转发。
我可以使用哪些域名和地址?
任何你在 Cloudflare 中管理、且没有其他服务器处理其邮件的域名,因为 Email Routing 会成为它的 MX。每个邮件渠道有一个地址,或者用兜底地址 *@example.com 接收该域名下所有没有渠道精确对应的地址。support+billing@example.com 这样的子地址会送到 support@example.com 的渠道。
邮件最大可以多大?
邮件连同附件最大 25 MiB,这是 Cloudflare Email Routing 的限制。Yuva 每封邮件最多保留 50 个附件,每个附件须在服务器的附件大小限制(默认 25 MiB)和允许的类型之内,其余的会被忽略。
有人能伪造发往我的 Yuva 服务器的邮件吗?
Yuva 会在读取正文之前,拒绝任何没有有效 HMAC 签名或时间戳偏差超过 5 分钟的请求。请妥善保管密钥。
Yuva 会使用 Cloudflare 的 DMARC 结果吗?
会,前提是你把 YUVA_INGRESS_AUTHSERV_ID 设为 mx.cloudflare.net。此时 Yuva 会读取 Email Routing 添加的 DMARC 结论。未通过 DMARC 的新对话会被标记为垃圾邮件。
Cloudflare、Cloudflare 徽标和 Cloudflare Workers 是 Cloudflare, Inc. 在美国和其他司法管辖区的商标和/或注册商标。Yuva 是独立的开源项目,与 Cloudflare 无关联,也未获其认可。