很多平台注册都要邮箱验证。常规邮箱前缀基本固定,想做测试、分流或者临时注册某些网站就很不方便。

方案结构

这套临时邮箱核心是 4 件事:

  1. Worker:处理收信逻辑、邮箱生成、后台接口
  2. D1:存邮件和地址数据
  3. KV:存会话等短期状态
  4. Email Routing + 自定义域名:把 *@你的域名 的邮件路由到 Worker

前置准备

  1. 一个已托管在 Cloudflare 的域名(例如 mail.domain.com
  2. Cloudflare 账号有 Workers / D1 / Email Routing 权限
  3. 准备一个可用子域名专门给临时邮箱
  4. 建议提前规划两个子域名:
  • 后端 Worker:api.domain.com
  • 前端 Pages:mail.domain.com

一、先在 Cloudflare 创建 D1 数据库

路径:Workers & Pages -> D1 SQL Database -> Create

  1. 数据库名称填 temp-mail(或你自己的名字)
  2. 创建后进入该数据库详情页
  3. 打开 ConsoleQuery 页面
  4. 把项目里的 docs/schema.sql 内容复制进去执行

到这里数据库表就初始化好了。

二、部署邮箱服务后端

1) 新建 Worker

路径:Compute (Workers) -> Workers & Pages -> Create -> Worker -> Create Worker

  1. 先创建一个新的 Worker
  2. 命名后点击 Deploy

2) 设置兼容性标志

路径:Workers & Pages -> Worker -> Settings -> Runtime

  1. Compatibility flags 里手动新增:nodejs_compat
  2. Compatibility date 设为不早于 2024-09-23

3) 上传后端 worker.js 并部署

  1. 下载后端文件:https://github.com/dreamhunter2333/cloudflare_temp_email/releases/latest/download/worker.js
  2. 回到路径:Workers & Pages -> Worker -> Overview -> Edit Code
  3. 删除默认文件
  4. 左侧点 Explorer,在文件列表区域右键 -> Upload,上传 worker.js
  5. 点右上角 Deploy

4) Variables and Secrets 里逐项加变量

路径:Workers & Pages -> Worker -> Settings -> Variables and Secrets

按“一个一个添加变量”的方式配置。

先配这一组最小可运行变量(推荐):

变量名 类型 示例值 说明
DOMAINS JSON ["api.domain.com"] 可用域名列表,支持多个
JWT_SECRET 文本 your_jwt_secret JWT 密钥,务必换成随机强密码
ADMIN_PASSWORDS JSON ["your_password"] 后台密码列表,至少配一个
ENABLE_USER_CREATE_EMAIL 文本 true 允许用户创建地址
ENABLE_USER_DELETE_EMAIL 文本 true 允许用户删除邮件
ENABLE_ADDRESS_PASSWORD 文本 true 启用邮箱地址密码登录

常用扩展变量(按需加):

变量名 类型 示例值 说明
ADMIN_USER_ROLE 文本 admin 管理员角色名
NO_LIMIT_SEND_ROLE 文本 admin 无限发信角色
ENABLE_AUTO_REPLY 文本 false 自动回复开关
DEFAULT_DOMAINS JSON ["api.domain.com"] 未登录用户默认可用域名
USER_ROLES JSON 见下方示例 自定义角色与域名权限

可直接复制的变量值示例(避免格式报错):

DOMAINS=["api.domain.com"]
ADMIN_PASSWORDS=["your_password","your_password_two"]
DEFAULT_DOMAINS=["api.domain.com"]
USER_ROLES=[
  {"domains":["api.domain.com"],"prefix":"","role":"vip"},
  {"domains":["api.domain.com"],"prefix":"","role":"admin"}
]

注意:

  1. JSON 必须用英文双引号 ",不要用中文引号。
  2. DOMAINSADMIN_PASSWORDSUSER_ROLES 都是 JSON,不是普通文本。

5) 绑定 D1

路径:Workers & Pages -> Worker -> Settings -> Bindings -> Add Binding

  1. Type 选 D1 Database
  2. Variable name 必须是 DB
  3. Database 选择你第一步创建的 D1

6) 绑定 KV

先创建: 路径:Storage & Databases -> KV -> Create Namespace

再绑定到 Worker: 路径:Workers & Pages -> Worker -> Settings -> Bindings -> Add Binding

  1. Type 选 KV Namespace
  2. Variable name 必须是 KV
  3. Namespace 选刚创建的命名空间

7) 配后端域名(Triggers)

路径:Workers & Pages -> Worker -> Settings -> Triggers

添加自定义域名(也可先用 *.workers.dev,但中国网络下不稳定)。 填写:api.domain.com(替换成你的后端域名)

验证是否成功:

  1. 打开 Worker 根地址,返回 OK
  2. 打开 https://api.domain.com/health_check,返回 OK

三、检查 DNS 代理状态

路径:Websites -> 你的域名 -> DNS 确认临时邮箱子域记录(A/CNAME)为 Proxied(橙云开启)

四、Email Routing

发给你子域名邮箱的邮件,需要在这里转发给 Worker 处理。 路径:Email -> Email Routing -> Routing rules -> Add catch-all address

按下面配置:

  1. Destination/Action 选择 Send to Email Worker
  2. 选择你刚部署的 Worker
  3. 保存并等待生效

如果你是首次启用 Email Routing,Cloudflare 会要求添加/确认 MX 相关记录,按面板提示补齐即可。

五、搭建前端服务

路径:Compute (Workers) -> Workers & Pages -> Create

  1. 选择 Pages
  2. 选择 Use direct upload
  3. 在官方文档前端页面里的生成器输入你后端 Worker 地址(不要带最后的 /),点击生成并下载 zip
  4. 回到 Cloudflare Pages,点击 Create Pages
  5. 填写项目名,上传刚下载的 zip,点击 Deploy
  6. 部署完成后进入该 Pages 项目,点击 Custom Domain 绑定前端域名(例如 mail.domain.com

前端生成器页面:https://temp-mail-docs.awsl.uk/zh/guide/ui/pages

如果你不想用在线生成器,也可以直接下载官方前端包再手动改后端地址:

注意: *.workers.dev 在中国网络环境下经常不可用,后端建议绑定自定义域名后再填到前端生成器里。

六、验证是否跑通

  1. 打开前端域名首页,例如 https://mail.domain.com
  2. 生成一个临时邮箱地址
  3. 从你常用邮箱给这个地址发一封测试邮件
  4. 回到页面看是否收到
  5. 打开 https://mail.domain.com/admin,用 ADMIN_PASSWORDS 里的密码登录后台确认数据状态

到这里,这套 Cloudflare 临时邮箱就算可用了。