在 Cloudflare Workers 上自建邮件服务:CloudMail 部署踩坑记
【摘要】 用 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)