Skip to content
forked from idinging/freemail

Cloudflare 域名邮箱系统搭建 domain mail tempmail

License

Notifications You must be signed in to change notification settings

bitilk/freemail

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

临时邮箱 Cloudflare Worker(模块化结构)

当前状态:V3.5 性能优化以及手机端专门适配

一个基于 Cloudflare Workers 和 D1 数据库的临时邮箱服务。

📸 项目展示

体验账号: guest

体验密码: admin

页面展示

登陆

登陆页面

首页

首页展示

手机端生成与历史

手机端生成邮箱 手机端历史邮箱

功能特性

🎨 现代化界面

  • 🌈 毛玻璃效果:采用现代化的毛玻璃(Glassmorphism)设计风格
  • 🎯 简约美观:浅色背景,动态渐变,视觉效果出色
  • 📱 响应式设计:完美适配桌面和移动设备
  • 动画效果:平滑的过渡动画和微交互反馈

📧 邮箱管理

  • 🎲 智能生成:随机生成临时邮箱地址,支持自定义长度和域名
  • 📋 历史记录:自动保存历史生成的邮箱,方便重复使用
  • 🗑️ 便捷删除:支持删除单个邮箱和批量管理
  • 🔄 一键切换:快速在不同邮箱间切换

🛠️ 用户管理功能

  • 角色与权限: 三层权限模型(严格管理员 Strict Admin / 高级用户 Admin / 普通用户 User),严格管理员拥有全部权限
  • 用户列表: 查看用户名、角色、邮箱上限/已用、是否允许发件、创建时间等关键信息
  • 用户邮箱: 查看指定用户名下的邮箱列表,支持一键复制邮箱地址
  • 创建用户: 通过用户名/密码/角色创建新用户
  • 编辑用户: 支持改名、重置密码、角色切换、发件权限开关、调整邮箱上限
  • 分配邮箱: 批量为用户分配邮箱地址(支持多行粘贴,自动格式校验)
  • 删除用户: 解除用户与邮箱的绑定关系(不会删除邮箱实体与邮件数据)
  • 前端权限防护: 管理页进入前进行快速鉴权,未授权自动跳转,避免内容闪现
  • 操作确认与反馈: 关键操作提供二次确认弹窗与统一 Toast 提示,操作状态与结果清晰可见

💌 邮件功能

  • 📧 实时接收:自动接收和显示邮件,支持HTML和纯文本
  • 🔄 自动刷新:选中邮箱后每8秒自动检查新邮件
  • 🔍 智能预览:自动提取和高亮显示验证码内容
  • 📖 详细查看:优化的邮件详情显示,支持完整内容渲染
  • 📋 一键复制:智能识别验证码并优先复制,或复制完整邮件内容
  • 🗑️ 灵活删除:支持删除单个邮件或清空整个邮箱
  • ✉️ 发件支持(Resend):已接入 Resend,可使用临时邮箱地址发送邮件并查看发件记录(发件箱),支持自定义发件显示名(fromName)与批量/定时/取消等能力。详情见《Resend 密钥获取与配置教程

版本与路线图

V1

  • 前后端基础功能与认证体系
  • 邮箱生成、历史记录、邮件列表与详情、清空/删除
  • 智能验证码提取与复制、一键复制邮件内容
  • 自动刷新与基本的 UI 交互

V2

  • 前端模板解耦:将首页 UI 从 public/app.js 内联模板拆分为独立的 public/templates/app.html,降低耦合、便于维护
  • 发件(Resend)与发件箱:支持通过 Resend 发送邮件、自定义发件显示名(fromName
  • 加邮箱置顶功能,提升用户体验
  • 路由逻辑优化 防止首页泄露

V3

登录与权限

  • 新增登录系统与三层权限:超级管理员(Strict Admin)/ 高级用户(Admin)/ 普通用户(User)。
  • 默认严格管理员用户名来自 ADMIN_NAME(默认 admin),密码来自 ADMIN_PASSWORD

管理后台(用户管理)

  • 入口:登录后右上角"用户管理"(严格管理员和演示模式默认显示)。
  • 查看用户列表(用户名、角色、是否可发件、邮箱上限/已用、创建时间)。
  • 查看某个用户的邮箱列表。
  • 创建用户(用户名/密码/角色)。
  • 编辑用户(改名、改密码、切换角色、是否允许发件、调整邮箱上限)。
  • 删除用户(不会删除邮箱实体与邮件,仅解除绑定关系)。
  • 分配邮箱给指定用户(支持批量,前端做格式校验)。

路由与加载策略

  • 首屏严格防护:未认证访问 / 会直接返回加载页模板,前端不再闪现首页内容。
  • 加载页 templates/loading.html 统一处理:
    • ?redirect=/目标路径 时轮询会话直至可用再跳转,确保登录后的稳定落地;
    • 未带 redirect 或超时则转到登录页。
  • 前端路由守卫 public/route-guard.js
    • RouteGuard.goLoading(target) 可显式跳到加载页并指定回落目标;
    • 对非法路径在服务端 302 到加载页,由前端依据会话再落到首页/登录。

V3.5

性能优化

  • 极大提升响应速度:优化数据库查询效率,减少延迟,显著改善用户体验
  • 前端资源优化:减少静态资源加载时间,提升页面渲染速度

存储增强

  • R2 存储原邮件:新增 Cloudflare R2 对象存储支持,用于保存邮件原始内容
  • 混合存储策略:D1 数据库存储邮件元数据,R2 存储完整邮件内容,优化存储成本

移动端适配

  • 手机端完美适配:全面优化移动设备体验,响应式设计更加流畅
  • 移动端专属界面:针对手机屏幕优化的界面布局和交互方式
  • 触控优化:优化触屏操作体验,支持手势操作

API 文档

完整接口说明已迁移至独立文档,包含登录认证、邮箱与邮件、发件(Resend)以及“用户管理”相关接口。

详见《V3 版本更新日志》。

🔧 技术特性

  • 基于 Cloudflare:利用全球网络,访问速度快
  • 💾 D1 数据库:可靠的数据存储,支持数据持久化
  • 🔐 安全认证:内置登录系统,保护数据安全
  • 🎯 API 完善:提供完整的 RESTful API 接口

部署步骤

1. 创建 D1 数据库

提示:也可在 Cloudflare 控制台在线创建 D1 数据库。

# 安装 Wrangler CLI
npm install -g wrangler

# 登录 Cloudflare
wrangler login

# 创建 D1 数据库
wrangler d1 create temp-mail-db

2. 创建 R2 存储桶(用于保存邮件原文)

# 创建 R2 存储桶(用于存储完整的 EML 邮件文件)
wrangler r2 bucket create mail-eml

3. 配置 wrangler.toml(已改为模块化入口)

复制返回的数据库 ID,更新 wrangler.toml 文件:

main = "src/server.js"

# D1 数据库绑定
[[d1_databases]]
binding = "TEMP_MAIL_DB"
database_name = "temp-mail-db"
database_id = "你的数据库ID"

# R2 存储桶绑定(用于保存完整 EML 内容)
[[r2_buckets]]
binding = "MAIL_EML"
bucket_name = "你的R2存储桶名称"

# 环境变量
[vars]
MAIL_DOMAIN = "你的域名.com,域名2.cn" #可以多个 以英文逗号分隔
ADMIN_NAME = "admin_name" # 超级管理员用户名 (不配名称 默认为admin)
ADMIN_PASSWORD = "password" # 超级管理员密码
JWT_TOKEN = "token" # 随便一串字符串
# RESEND_API_KEY  # 发送邮件需要配置

4. 本地与线上部署(推荐 wrangler)

  1. 本地开发
npm i -g wrangler
wrangler login
# 可在 wrangler.toml 的 [vars] 中配置本地变量(仅用于 dev/deploy via wrangler)
wrangler dev
  1. 线上部署
# 设置敏感变量(Secret)
wrangler secret put ADMIN_PASSWORD
wrangler secret put JWT_TOKEN
# (可选,如需发件)设置 Resend 密钥
wrangler secret put RESEND_API_KEY
# 非敏感变量可放在 wrangler.toml 的 [vars] 或控制台 Variables 中
wrangler deploy

提示:如需开启发件功能,还需在 Resend 完成发信域名验证并创建 API Key。不会配置?请查看《Resend 密钥获取与配置教程》。

  1. Cloudflare 连接 GitHub 仓库部署
  • 如果使用 Git 集成而非 wrangler deploy,请在 Dashboard → Workers → Settings → Variables 中手动配置上述变量
  • [assets] 已指向 public/,静态页面由 Workers + Assets 提供

4.5 初始化 D1 表结构(首次部署)

只要绑定了d1 默认可以自行创建,如果不能自动创建再手动创建

# 方式一:表结构
wrangler d1 execute TEMP_MAIL_DB --file=./d1-init-basic.sql

5. 配置邮件路由(必需用于收取真实邮件)

如果需要接收真实邮件,需要在 Cloudflare 控制台配置邮件路由:

  1. 进入域名的 Email Routing 设置
  2. 添加 Catch-all 规则
  3. 目标设置为 Worker: temp-mail-worker

6. 设置自定义域名(可选)

在 Worker 设置中添加自定义域名,或使用 workers.dev 子域名。

环境变量说明

变量名 说明 必需
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

发件相关的域名验证与密钥创建步骤,请参考《docs/resend.md》;如果你不清楚如何配置,请直接按照教程一步步操作。

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_PASSWORDJWT_TOKEN,并限制仓库/项目的敏感信息暴露。

Resend 教程(发件)

  • 教程文档:请见《Resend 密钥获取与配置教程》。
    • 覆盖域名验证、创建 API Key、在 Cloudflare Workers 设置 RESEND_API_KEY Secret 的完整流程
    • 详细列出后端发件相关接口(/api/send/api/send/batch/api/send/:id/api/send/:id/cancel/api/sent 等)与示例
    • 前端已集成“发件箱”,在生成/选择邮箱后可直接发信并查看记录;自定义发件显示名通过 fromName 字段传入

发件相关 API(摘要)

  • POST /api/send 发送单封邮件(支持 fromName 自定义发件显示名)
  • POST /api/send/batch 批量发送
  • GET /api/send/:id 查询单封邮件发送状态
  • PATCH /api/send/:id 更新(如定时 scheduledAt
  • POST /api/send/:id/cancel 取消发送
  • GET /api/sent?from=xxx@domain 获取发件记录列表
  • GET /api/sent/:id 获取发件详情
  • DELETE /api/sent/:id 删除发件记录

完整用法与注意事项请参考《docs/resend.md》。

自定义配置

可以通过修改 Worker 代码来自定义:

  • 邮箱地址生成规则
  • 邮件保存时间
  • 界面样式(public/ 内的 HTML/CSS/JS)
  • 功能扩展

🛠️ 故障排除

常见问题

  1. 邮件接收不到

    • 检查 Cloudflare 邮件路由配置是否正确
    • 确认域名的 MX 记录设置
    • 验证 MAIL_DOMAIN 环境变量配置
  2. 数据库连接错误

    • 确认 D1 数据库绑定名称为 TEMP_MAIL_DB
    • 检查 wrangler.toml 中的数据库 ID 是否正确
    • 运行 wrangler d1 list 确认数据库存在
  3. 登录问题

    • 确认 ADMIN_PASSWORD 环境变量已设置
    • 检查 JWT_TOKEN 或 JWT_SECRET 配置
    • 尝试清除浏览器缓存和 Cookie
  4. 界面显示异常

    • 确认静态资源路径配置正确
    • 检查浏览器控制台是否有 JavaScript 错误
    • 验证 CSS 文件加载是否正常
  5. 自动刷新不工作

    • 确认已选中邮箱地址
    • 检查浏览器是否支持 Page Visibility API
    • 查看网络连接是否稳定

调试技巧

  • 使用 wrangler dev 进行本地调试
  • 查看 Worker 的实时日志:wrangler tail
  • 使用浏览器开发者工具检查网络请求
  • 检查 D1 数据库中的数据:wrangler d1 execute TEMP_MAIL_DB --command "SELECT * FROM mailboxes LIMIT 10"

Star History

Star History Chart

联系方式

  • 微信:iYear1213

Buy me a coffee

如果你觉得本项目对你有帮助,欢迎赞赏支持:

支付宝赞赏码 微信赞赏码

许可证

Apache-2.0 license

About

Cloudflare 域名邮箱系统搭建 domain mail tempmail

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 69.7%
  • CSS 19.3%
  • HTML 11.0%