在 Cloudflare Workers 上自建邮件服务:CloudMail 部署踩坑记

举报
yd_264623467 发表于 2026/11/02 01:30:10 2026/11/02
【摘要】 用 Cloudflare Workers + D1 + KV + R2 + Resend 搭建自有域名邮箱的完整流程与三个坑。

为什么选 Workers 方案

自建邮箱传统上需要一台 VPS 加 Postfix/Dovecot,还要自己维护反垃圾和证书。CloudMail 这类项目把收件交给 Cloudflare Email Routing、发件交给 Resend,核心逻辑跑在 Workers 上,省掉了服务器运维,免费额度也够个人用。

架构

收件:外部邮件 → Cloudflare Email Routing(catch-all)→ Worker 解析 → D1 存储
发件:Worker → Resend API → 收件方
附件:R2 对象存储
缓存:KV

坑一:setting 表的开关是反的

后台界面里的开关写着「开启/关闭」,但数据库 setting 表里存的语义是反的:OPEN: 0, CLOSE: 1。我一开始按直觉把发件开关设成 1,结果发信接口一直返回 403 邮件发送功能已停用。翻代码才发现要设成 0。这类“界面文案与存储语义相反”的设计,排查时最容易绕圈。

坑二:workers.dev 域名被污染

默认分配的 *.workers.dev 域名在很多网络环境下解析异常,后台打不开。解决办法是绑定自定义域名:在 Cloudflare 控制台给 Worker 加一条自定义域路由(比如 mail.example.org),走自己的 DNS 解析,稳定得多。

坑三:发件域名验证

Resend 要求先把发件域加进去并完成 DNS 验证(SPF、DKIM、DMARC 记录)。验证通过前只能用自己的测试地址发信。验证时注意 Resend 的区域选择,选错了会导致 DNS 记录对不上。

小结

整套方案不需要 VPS,全部跑在 Cloudflare 免费额度内。真正花时间的不是部署,而是理解那些反直觉的配置语义。建议部署前先把项目的 wrangler.toml 和 D1 初始化脚本读一遍,能少踩一半坑。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。