一、cloudflare_temp_email
部署地址:https://temp-mail-docs.awsl.uk/
核心功能
邮件处理
- 使用 rust wasm 解析邮件,解析速度快,几乎所有邮件都能解析,node 的解析模块解析邮件失败的邮件,rust wasm 也能解析成功
- 支持发送邮件,支持 DKIM 验证
- 支持 SMTP 和 Resend 等多种发送方式
- 增加查看 附件 功能,支持附件图片显示
- 支持 S3 附件存储和删除功能
- 垃圾邮件检测和黑白名单配置
- 邮件转发功能,支持全局转发地址
用户管理
- 使用 凭证 重新登录之前的邮箱
- 添加完整的用户注册登录功能,可绑定邮箱地址,绑定后可自动获取邮箱JWT凭证切换不同邮箱
- 支持 OAuth2 第三方登录(Github、Authentik 等)
- 支持 Passkey 无密码登录
- 用户角色管理,支持多角色域名和前缀配置
- 用户收件箱查看,支持地址和关键词过滤
管理功能
- 完整的 admin 控制台
- admin 后台创建无前缀邮箱
- admin 用户管理页面,增加用户地址查看功能
- 定时清理功能,支持多种清理策略
- 获取自定义名字的邮箱,admin 可配置黑名单
- 增加访问密码,可作为私人站点
集成与扩展
- 完整的 Telegram Bot 支持,以及 Telegram 推送,Telegram Bot 小程序
- 添加 SMTP proxy server,支持 SMTP 发送邮件,IMAP 查看邮件
- Webhook 支持,消息推送集成支持
- CF Turnstile 人机验证限流配置,防止滥用
Gihub Actions 部署
初始化/更新 D1 数据库
创建数据库
打开 cloudflare 控制台,选择 Storage & Databases -> D1 SQL Database -> Create Database
,点击创建数据库
创建完成后,我们在 cloudflare 的控制台可以看到 D1 数据库
初始化数据库注意
你也可以跳过初始化数据库,在部署完成后,在 admin 页面的 快速设置 -> 数据库 中,点击 初始化数据库 按钮来初始化数据库
打开 Console
标签页,输入仓库中 db/schema.sql
文件的内容,点击 Execute 执行
更新数据库 schema
schema 更新,请确认你之前部署的版本,
查看 更新日志
找到需要执行的 patch
文件, 执行, 例如: db/2024-01-13-patch.sql
打开 Console
标签页,输入 patch
文件的内容,点击 Execute
执行
Github Actions 配置
Fork 仓库并启用 Actions
- 在 GitHub fork 本仓库
- 打开仓库的
Actions
页面 - 找到
Deploy Backend
点击enable workflow
启用workflow
- 如果需要前后端分离部署, 找到
Deploy Frontend
点击enable workflow
启用workflow
配置 Secrets
然后在仓库页面 Settings
-> Secrets and variables
-> Actions
-> Repository secrets
, 添加以下 secrets
:
公共
secrets
名称 说明 CLOUDFLARE_ACCOUNT_ID
Cloudflare 账户 ID, 参考文档 CLOUDFLARE_API_TOKEN
Cloudflare API Token, 参考文档 worker 后端
secrets
名称 说明 BACKEND_TOML
后端配置文件,参考此处 DEBUG_MODE
(可选) 是否开启调试模式,配置为 true
开启, 默认 worker 部署日志不会输出到 Github Actions 页面,开启后会输出BACKEND_USE_MAIL_WASM_PARSER
(可选) 是否使用 wasm 解析邮件,配置为 true
开启, 功能参考 配置 worker 使用 wasm 解析邮件USE_WORKER_ASSETS
(可选) 部署带有前端资源的 Worker, 配置为 true
开启pages 前端
secrets
注意
如果选择部署带有前端资源的 Worker, 则无须配置这些
secrets
名称 说明 FRONTEND_ENV
前端配置文件,请复制 frontend/.env.example
的内容,并参考此处修改FRONTEND_NAME
你在 Cloudflare Pages 创建的项目名称,可通过 用户界面 或者 命令行 创建 FRONTEND_BRANCH
(可选) pages 部署的分支,可不配置,默认 production
TG_FRONTEND_NAME
(可选) 你在 Cloudflare Pages 创建的项目名称,同 FRONTEND_NAME
,如果需要 Telegram Mini App 功能,请填写
部署
- 打开仓库的
Actions
页面 - 找到
Deploy Backend
点击Run workflow
选择分支手动部署 - 如果需要前后端分离部署, 找到
Deploy Frontend
, 点击Run workflow
选择分支手动部署
如何配置自动更新
- 打开仓库的
Actions
页面,找到Upstream Sync
,点击enable workflow
启用workflow
- 如果
Upstream Sync
运行失败,到仓库主页点击Sync
手动同步即可
配置邮件转发
设置完成后才能接收邮件了
回到 cloudflare 控制台,点击菜单账户主页,再点你的域名
菜单栏会发生变化
启用电子邮件
设置转发到 worker
设置完成的样子
使用 Resend 发送邮件
1. 在 Resend 绑定并验证发信域名
- 登录 Resend 后台,进入 Domains,点击 Add Domain。
- 按向导添加你的发件域名,并在 DNS 处添加相应记录,待验证通过。
示意图(流程参考):
完成后,确保域名状态为 Verified。发件地址必须使用该已验证域名,例如:no-reply@yourdomain.com
2. 创建 Resend API Key
- 进入 Resend → API Keys,点击 Create API Key。
- 建议选择可读写权限(Emails: send/read/update),并妥善保存生成的 Key。
参考截图:
3. 在 Cloudflare Workers 配置变量
可以在 Cloudflare 的 UI 界面中,在Variables and Secrets
下面,将变量 RESEND_TOKEN
添加到 secrets 中
配置 Telegram Bot
注意:worker 默认的 worker.dev 域名的证书是不被 telegram 支持的,配置 Telegram Bot 请使用自定义域名
注意:如果要使用 Telegram Bot, 请先新建KV并后端绑定 KV
配置 worker 使用 wasm 解析邮件
如果你使用了 webhook 转发,或者 telegram bot 接受邮件,但是邮件内容是乱码,或者无法解析,你对解析的需要更高的要求,可以使用这个功能。
- 下载 worker-with-wasm-mail-parser.zip
回到
Overview
,找到刚刚创建的 worker,点击Edit Code
, 删除原来的文件,上传worker.js
和wasm
后缀的文件, 点击Deploy
NOTE上传需要先点击左侧菜单的 Explorer, 在文件列表的窗口里点击鼠标右键,在右键菜单里找到
Upload
Telegram Bot 配置
请先创建一个 Telegram Bot,然后获取 token,然后在 Cloudflare 的 UI 界面中添加变量:TELEGRAM_BOT_TOKEN
到 Variables and Secrets 下面
- 可设置白名单用户
- 点击
初始化
即可完成配置。 - 点击
查看状态
,可以查看当前配置的状态。
Mini App部署
从这里下载 zip, telegram-frontend.zip
修改压缩包里面的 index-xxx.js 文件 ,xx 是随机的字符串
搜索 https://temp-email-api.xxx.xxx
,替换成你worker 的域名,然后部署新的zip文件
- 部署完成后,请在 admin 后台的
设置
-\>电报小程序
页面电报小程序 URL
中填写网页 URL。 - 请在
@BotFather
处执行/setmenubutton
,然后输入你的网页地址,设置左下角的Open App
按钮。 - 请在
@BotFather
处执行/newapp
新建 app 来注册 mini app。
二、MoeMail部署
特性
- 隐私保护:保护您的真实邮箱地址,远离垃圾邮件和不必要的订阅
- 实时收件:自动轮询,即时接收邮件通知
- 灵活有效期:支持 1 小时、24 小时、3 天或永久有效
- 主题切换:支持亮色和暗色模式
- 响应式设计:完美适配桌面和移动设备
- 自动清理:自动清理过期的邮箱和邮件
- PWA 支持:支持 PWA 安装
- 免费自部署:基于 Cloudflare 构建, 可实现免费自部署,无需任何费用
- 可爱的 UI:简洁可爱萌萌哒 UI 界面
- 发件功能:支持使用临时邮箱发送邮件,基于 Resend 服务
- Webhook 通知:支持通过 webhook 接收新邮件通知
- 权限系统:支持基于角色的权限控制系统
- OpenAPI:支持通过 API Key 访问 OpenAPI
Github Actions 部署
- 自动触发:推送新的 tag 时自动触发部署流程
- 手动触发:在 GitHub Actions 页面手动触发
部署步骤
在 GitHub 仓库设置中添加以下 Secrets:
-
CLOUDFLARE_API_TOKEN
: Cloudflare API 令牌 -
CLOUDFLARE_ACCOUNT_ID
: Cloudflare 账户 ID -
AUTH_GITHUB_ID
: GitHub OAuth App ID -
AUTH_GITHUB_SECRET
: GitHub OAuth App Secret -
AUTH_SECRET
: NextAuth Secret,用来加密 session,请设置一个随机字符串 -
CUSTOM_DOMAIN
: 网站自定义域名,用于访问 MoeMail (可选, 如果不填, 则会使用 Cloudflare Pages 默认域名) -
PROJECT_NAME
: Pages 项目名 (可选,如果不填,则为 moemail) -
DATABASE_NAME
: D1 数据库名称 (可选,如果不填,则为 moemail-db) -
KV_NAMESPACE_NAME
: Cloudflare KV namespace 名称,用于存储网站配置 (可选,如果不填,则为 moemail-kv)
-
选择触发方式:
方式一:推送 tag 触发
# 创建新的 tag git tag v1.0.0 # 推送 tag 到远程仓库 git push origin v1.0.0
方式二:手动触发
- 进入仓库的 Actions 页面
- 选择 "Deploy" workflow
- 点击 "Run workflow"
- 部署进度可以在仓库的 Actions 标签页查看
注意事项
- 确保所有 Secrets 都已正确设置
- 使用 tag 触发时,tag 必须以
v
开头(例如:v1.0.0)
邮箱域名配置
在 MoeMail 个人中心页面,可以配置网站的邮箱域名,支持多域名配置,多个域名用逗号分隔
Cloudflare 邮件路由配置
为了使邮箱域名生效,还需要在 Cloudflare 控制台配置邮件路由,将收到的邮件转发给 Email Worker 处理。
- 登录 Cloudflare 控制台
- 选择您的域名
- 点击左侧菜单的 "电子邮件" -> "电子邮件路由"
- 如果显示 “电子邮件路由当前被禁用,没有在路由电子邮件”,请点击 "启用电子邮件路由"
- 点击后,会提示你添加电子邮件路由 DNS 记录,点击 “添加记录并启用” 即可
配置路由规则:
- Catch-all 地址: 启用 "Catch-all"
- 编辑 Catch-all 地址
- 操作: 选择 "发送到 Worker"
- 目标位置: 选择刚刚部署的 "email-receiver-worker"
- 保存
注意事项
- 确保域名的 DNS 托管在 Cloudflare
- Email Worker 必须已经部署成功
- 如果 Catch-All 状态不可用(一直 loading),请点击
路由规则
旁边的目标地址
, 进去绑定一个邮箱
权限系统
本项目采用基于角色的权限控制系统(RBAC)。
角色配置
新用户默认角色由皇帝在个人中心的网站设置中配置:
- 公爵:新用户将获得临时邮箱、Webhook 配置权限以及 API Key 管理权限
- 骑士:新用户将获得临时邮箱和 Webhook 配置权限
- 平民:新用户无任何权限,需要等待皇帝册封为骑士或公爵
角色等级
系统包含四个角色等级:
皇帝(Emperor)
- 网站所有者
- 拥有所有权限
- 每个站点只能有一个皇帝
公爵(Duke)
- 超级用户
- 可以使用临时邮箱功能
- 可以配置 Webhook
- 可以使用创建 API Key 调用 OpenAPI
- 可以被皇帝贬为骑士或平民
骑士(Knight)
- 高级用户
- 可以使用临时邮箱功能
- 可以配置 Webhook
- 可以被皇帝贬为平民或册封为公爵
平民(Civilian)
- 普通用户
- 无任何权限
- 可以被皇帝册封为骑士或者公爵
角色升级
成为皇帝
- 第一个访问
/api/roles/init-emperor
接口的用户将成为皇帝,即网站所有者 - 站点已有皇帝后,无法再提升其他用户为皇帝
- 第一个访问
角色变更
- 皇帝可以在个人中心页面将其他用户设为公爵、骑士或平民
权限说明
- 邮箱管理:创建和管理临时邮箱
- Webhook 管理:配置邮件通知的 Webhook
- API Key 管理:创建和管理 API 访问密钥
- 用户管理:升降用户角色
- 系统设置:管理系统全局设置
系统设置
系统设置存储在 Cloudflare KV 中,包括以下内容:
-
DEFAULT_ROLE
: 新注册用户默认角色,可选值为CIVILIAN
、KNIGHT
、DUKE
-
EMAIL_DOMAINS
: 支持的邮箱域名,多个域名用逗号分隔 -
ADMIN_CONTACT
: 管理员联系方式 -
MAX_EMAILS
: 每个用户可创建的最大邮箱数量
皇帝角色可以在个人中心页面设置
发件功能
MoeMail 支持使用临时邮箱发送邮件,基于 Resend 服务。
功能特性
- 临时邮箱发件:可以使用创建的临时邮箱作为发件人发送邮件
- 角色权限控制:不同角色有不同的每日发件限制
- 支持 HTML:支持发送富文本格式邮件
角色发件权限
角色 | 每日发件限制 | 说明 |
---|---|---|
皇帝 (Emperor) | 无限制 | 网站管理员,无发件限制 |
公爵 (Duke) | 5封/天 | 默认每日可发送5封邮件 |
骑士 (Knight) | 2封/天 | 默认每日可发送2封邮件 |
平民 (Civilian) | 禁止发件 | 无发件权限 |
提示:皇帝可以在个人中心的邮件服务配置中自定义公爵和骑士的每日发件限制。
配置发件服务
获取 Resend API Key
- 访问 Resend 官网 注册账号
- 在控制台中创建 API Key
- 复制 API Key 供后续配置使用
配置发件服务
- 皇帝角色登录 MoeMail
- 进入个人中心页面
在"Resend 发件服务配置"部分:
- 启用发件服务开关
- 填入 Resend API Key
- 设置公爵和骑士的每日发件限制(可选)
- 点击保存配置
验证配置
- 配置保存后,有权限的用户在邮箱列表页面会看到"发送邮件"按钮
- 点击按钮可以打开发件对话框进行测试
注意事项
- Resend 限制:请注意 Resend 服务的发送限制和定价政策
- 域名验证:使用自定义域名发件需要在 Resend 中验证域名
- 反垃圾邮件:请遵守邮件发送规范,避免发送垃圾邮件
- 配额监控:系统会自动统计每日发件数量,达到限额后将无法继续发送
- 配额重置:每日发件配额在每天 00:00 自动重置
三、Cloud-Mail
部署文档:https://doc.skymail.ink/
首先你要注册一个域名,如果你要拿来注册一些网站或者游戏比如 steam 不要用 top xyz 这种廉价域名有可能会网站被当临时邮箱拦截
1 绑定域名
注册账号登录到 cloudflare 控制台,开始绑定域名(如果你已经绑定好了可以直接跳到第二步)
选择免费的计划
设置 dns
不同的厂商的修改 dns 都差不多,这里以华为云为例
设置完成后可能要等几分钟,期间可以刷新浏览器看有没有完成
完成后的界面
这样子账户主页就会显示你的域名了,域名绑定完成
2 创建 worker 项目
到项目仓库 fork 项目代码到你的仓库
这样子仓库就会复制到你那边了
回到 cloudflare 控制台,找到 workers 页面导入你的 github 仓库代码
设置启动目录
等待构建部署完成
构建完成后的页面
这时候项目就会出现在 worker 列表了,点击名字进入可以查看和设置
3 设置环境变量
服务还需要设置一些环境变量和绑定数据库才能正常运行
添加以下变量,注意 domain 是 json 类型的,管理员账号之后需要你在注册页面注册
变量名 | 值 | 类型 | 作用 |
---|---|---|---|
domain | ["你的域名"], 示例:["mornglow.top"],多域名 ["doamin1","domain2"] | JSON | 网站会使用这个域名作为邮箱域名 |
admin | 管理员的邮箱,示例:admin@mornglow.top | 纯文本 | 对应的用户变成管理员 |
jwt_secret | 随便输入一串字符串,示例:Z7f!xPq8mV@L2bC$r9X&N1t | 纯文本 | 登录身份令牌的安全密钥 |
设置完成自定义域名和环境变量的样子
4 绑定数据库
找到左侧菜单存储和数据库,创建 kv 数据库,数据库名字随意
创建 d1 数据库,数据库名字随意 位置选择离你近的地方
回到 worker 设置界面绑定刚刚创建的数据库 d1 数据库 变量名为 db kv 数据库 变量名为 kv
浏览器输入 https:// 你的自定义域名 / api/init / 你绑定的的 jwt_secret 会自动初始化数据库 (如果之前部署过只会更新不会覆盖原有数据)
浏览器输入你绑定的自定义域名网站已经能打开了,注册登录了
5 启用邮件接收
设置完成后才能接收邮件了
回到 cloudflare 控制台,点击菜单账户主页,再点你的域名
菜单栏会发生变化
启用电子邮件
设置转发到 worker
设置完成的样子
测试接收邮件
6 附件收发
设置完这一步后才能接收附件和发送附件,如果你不需要可以跳过
回到上一级菜单,找到 r2 对象存储,创建存储桶
桶名字可以随便填 位置选择离你近的地方
设置自定义域名
自定义域名添加到项目设置里面
回到 worker 绑定刚才创建的 r2 存储桶
r2 存储桶 变量名为 r2
7 邮件发送
使用第三方服务 resend 发送邮件
浏览器输入 resend.com 注册
添加域名
等待验证完成
验证完成后的样子
创建 apiKey
回到项目网站设置
设置邮件状态回调接口
回调接口 https:// 你的项目自定义域 / api/webhooks
8 人机验证
设置这一步后可以开启人机验证,防止网站被机器人批量注册
菜单栏找到 turnstile
添加你的域名
名字随意
复制这两个密钥
回到项目设置页面设置密钥
9 TG 和其他邮箱转发
在 TG 搜索找到这个人
创建机器人并且获取 token
给机器人一条发消息
浏览器输入 https://api.telegram.org/bot 你的机器 TOKEN/getUpdates 获取 chat_id 如果获取不到就再给机器人发几条消息
设置 token 和 chat_id
转发到其他服务商邮箱 在 cloudflare 验证邮箱
设置邮箱
四、freemail
功能特性
现代化界面
- 毛玻璃效果:采用现代化的毛玻璃(Glassmorphism)设计风格
- 简约美观:浅色背景,动态渐变,视觉效果出色
- 响应式设计:完美适配桌面和移动设备
- 动画效果:平滑的过渡动画和微交互反馈
邮箱管理
- 智能生成:随机生成临时邮箱地址,支持自定义长度和域名
- 历史记录:自动保存历史生成的邮箱,方便重复使用
- 便捷删除:支持删除单个邮箱和批量管理
- 一键切换:快速在不同邮箱间切换
用户管理功能
- 角色与权限: 三层权限模型(严格管理员 Strict Admin / 高级用户 Admin / 普通用户 User),严格管理员拥有全部权限
- 用户列表: 查看用户名、角色、邮箱上限/已用、是否允许发件、创建时间等关键信息
- 用户邮箱: 查看指定用户名下的邮箱列表,支持一键复制邮箱地址
- 创建用户: 通过用户名/密码/角色创建新用户
- 编辑用户: 支持改名、重置密码、角色切换、发件权限开关、调整邮箱上限
- 分配邮箱: 批量为用户分配邮箱地址(支持多行粘贴,自动格式校验)
- 删除用户: 解除用户与邮箱的绑定关系(不会删除邮箱实体与邮件数据)
- 前端权限防护: 管理页进入前进行快速鉴权,未授权自动跳转,避免内容闪现
- 操作确认与反馈: 关键操作提供二次确认弹窗与统一 Toast 提示,操作状态与结果清晰可见
邮件功能
- 实时接收:自动接收和显示邮件,支持HTML和纯文本
- 自动刷新:选中邮箱后每8秒自动检查新邮件
- 智能预览:自动提取和高亮显示验证码内容
- 详细查看:优化的邮件详情显示,支持完整内容渲染
- 一键复制:智能识别验证码并优先复制,或复制完整邮件内容
- 灵活删除:支持删除单个邮件或清空整个邮箱
- 发件支持(Resend) :已接入 Resend,可使用临时邮箱地址发送邮件并查看发件记录(发件箱),支持自定义发件显示名(
fromName
)与批量/定时/取消等能力
一键部署
1. 首先点击 Deploy to Cloudflare
2 登陆账号后会进入,推荐选择亚洲地区(当然不选择亚洲也没关系)
不要修改数据库名称和R2名称 可能导致无法查询
3. 点击创建部署,然后耐心等待克隆部署
4. 点击继续处理项目,绑定必须的环境变量
环境变量说明
变量名 | 说明 | 必需 |
---|---|---|
TEMP_MAIL_DB | D1 数据库绑定 | 是 |
MAIL_EML | R2 存储桶绑定,用于保存完整的邮件 EML 文件 | 是 |
MAIL_DOMAIN | 用于生成临时邮箱的域名,支持多个,使用逗号或空格分隔(如 iding.asia, example.com ) | 是 |
ADMIN_PASSWORD | 后台访问密码(严格管理员登录) | 是 |
ADMIN_NAME | 严格管理员用户名(默认 admin ) | 否 |
JWT_TOKEN / JWT_SECRET | JWT 签名密钥(二选一,推荐 JWT_TOKEN ) | 是 |
RESEND_API_KEY | Resend 发件 API Key。使用发件功能需要配置 | 否 |
FORWARD_RULES | 邮件转发(转发到指定邮箱)。支持两种格式:JSON 数组 或 逗号分隔 KV | 否 |
5. 添加完成后点击部署即可
注:这三个变量是必须的,其他变量例如 管理员名称,发邮件密钥可自行决定是否添加
最后就可以打开对应的 worker 连接登陆了
6. 默认管理员账号为 admin
7. 记得将域名邮箱的 catch-all 绑定到 worker 上(不绑定无法接收到邮件)
- 进入域名的 Email Routing 设置
- 添加 Catch-all 规则
- 目标设置为 Worker:
temp-mail-worker
8、设置自定义域名(可选)
在 Worker 设置中添加自定义域名,或使用 workers.dev 子域名。
9、FORWARD_RULES 示例
说明:规则按前缀匹配,命中第一个前缀即转发;*
为兜底规则。未配置或设置为空/disabled/none 时不进行任何转发。
逗号分隔(KV):
-
FORWARD_RULES="vip=a@example.com,news=b@example.com,*=fallback@example.com"
-
JSON 数组:
-
FORWARD_RULES='[{"prefix":"vip","email":"a@example.com"},{"prefix":"*","email":"fallback@example.com"}]'
-
仅指定某些前缀(无兜底):
-
FORWARD_RULES="code=a@example.com,login=b@example.com"
-
禁用转发:
-
FORWARD_RULES=""
或FORWARD_RULES="disabled"
或FORWARD_RULES="none"
或FORWARD_RULES="[]"
转发的目标地址需要在 Cloudflare 的 Email Addresses 中添加/验证
-
注意事项
- 静态资源缓存:Workers + Assets 对静态文件可能有缓存。更新
index.html
后如未生效,请在 Cloudflare 控制台进行Purge Everything
,并在浏览器执行强制刷新(Ctrl/Cmd+F5)。 - 图标路径:favicon 建议使用相对路径(例如
favicon.svg
),避免挂在子路径时 404。 - 邮件路由:若需接收真实邮件,请正确配置 Cloudflare Email Routing(MX 记录、Catch‑all → 绑定到 Worker)。
- R2 存储:R2 用于保存完整的邮件 EML 文件,支持邮件下载功能。R2 有免费额度限制,建议定期清理过期邮件。
- 数据库与费用:D1 有免费额度限制;建议定期清理过期邮件以节省存储空间与额度。
- 安全:务必在生产环境修改
ADMIN_PASSWORD
、JWT_TOKEN
,并限制仓库/项目的敏感信息暴露。
Resend 教程(发件)
1. 在 Resend 绑定并验证发信域名
- 登录 Resend 后台,进入 Domains,点击 Add Domain。
- 按向导添加你的发件域名,并在 DNS 处添加相应记录,待验证通过。
示意图(流程参考):
完成后,确保域名状态为 Verified。发件地址必须使用该已验证域名,例如:no-reply@yourdomain.com
2. 创建 Resend API Key
- 进入 Resend → API Keys,点击 Create API Key。
- 建议选择可读写权限(Emails: send/read/update),并妥善保存生成的 Key。
参考截图:
3. 在 Cloudflare Workers 配置变量
本项目运行在 Cloudflare Workers,需把密钥配置为 Secret,域名配置为普通变量。
方式一:命令行(Wrangler)
# 设置 Resend 密钥(Secret)
wrangler secret put RESEND_API_KEY
# 或者使用下面同义变量(不推荐):RESEND_TOKEN / RESEND
# 设置普通变量(可写入 wrangler.toml 的 [vars])
# 多域名用逗号/空格分隔
# 例:MAIL_DOMAIN="iding.asia, example.com"
方式二:Dashboard(Git 集成部署常用)
- 进入 Cloudflare Dashboard → Workers → 选中你的 Worker → Settings → Variables。
- 在 Secrets 添加
RESEND_API_KEY
。 - 在 Variables 添加
MAIL_DOMAIN
,值为你用于收取 / 发件的域名列表(需与 Resend 已验证域名一致)。
4. 关联项目并部署
# 本地开发
wrangler dev
# 正式部署
wrangler deploy
确保 wrangler.toml
已绑定 D1 数据库与静态资源(仓库已配置)。
5. 前端使用发件功能(发件箱)
- 在首页先生成或选择一个邮箱地址。
- 点击 “发邮件”,填写收件人、主题与内容,点击发送。
- 后端会调用 Resend API 发出邮件,并在数据库记录,前端可在 “发件箱” 查看记录与详情。
注意:
- 发件地址为当前选中邮箱(形如
xxx@你的域名
)。你的域名需在 Resend 已验证。 - 若返回
未配置 Resend API Key
,说明没有设置或没有以 Secret 形式提供RESEND_API_KEY
。
6. 常见问题
- 403/Unauthorized:域名未验证或 From 与已验证域名不一致。
- 429 / 限流:短时间大量请求,稍后重试或开启队列。
- 中文 / HTML 内容:本项目会将 HTML 直接提交给 Resend,同时自动生成纯文本版本,提升兼容性。
7. 相关后端接口
-
POST /api/send
发送单封邮件 -
GET /api/sent?from=xxx@domain
获取发件记录列表 -
GET /api/sent/:id
获取发件详情 -
DELETE /api/sent/:id
删除发件记录
以上接口由 src/apiHandlers.js
与 src/emailSender.js
实现,调用 Resend REST API 完成发件 / 查询 / 取消等操作。
故障排除
邮件接收不到
- 检查 Cloudflare 邮件路由配置是否正确
- 确认域名的 MX 记录设置
- 验证 MAIL_DOMAIN 环境变量配置
数据库连接错误
- 确认 D1 数据库绑定名称为 TEMP_MAIL_DB
- 检查 wrangler.toml 中的数据库 ID 是否正确
- 运行
wrangler d1 list
确认数据库存在
登录问题
- 确认 ADMIN_PASSWORD 环境变量已设置
- 检查 JWT_TOKEN 或 JWT_SECRET 配置
- 尝试清除浏览器缓存和 Cookie
界面显示异常
- 确认静态资源路径配置正确
- 检查浏览器控制台是否有 JavaScript 错误
- 验证 CSS 文件加载是否正常
自动刷新不工作
- 确认已选中邮箱地址
- 检查浏览器是否支持 Page Visibility API
- 查看网络连接是否稳定
调试技巧
- 使用
wrangler dev
进行本地调试 - 查看 Worker 的实时日志:
wrangler tail
- 使用浏览器开发者工具检查网络请求
- 检查 D1 数据库中的数据:
wrangler d1 execute TEMP_MAIL_DB --command "SELECT * FROM mailboxes LIMIT 10"