Cloudflare email service with targeted Netflix and Telegram forwarding
  • JavaScript 61.7%
  • Vue 36.4%
  • HTML 0.9%
  • CSS 0.7%
  • PowerShell 0.2%
  • 其它 0.1%
查找文件
仓库文件(优先显示最新提交)
文件名 最新提交消息 最新提交日期
Inklazy 778c726ea6
所有检测均成功
Cloud mail production from Forgejo / publish (push) Successful in 1m47s
fix: preserve daily resets, legacy routes and session isolation
2026-11-07 15:40:44 +08:00
.forgejo/workflows ci: move cloud-mail builds and deployment to Singapore ARM64 2026-10-25 14:29:37 +08:00
.github/ISSUE_TEMPLATE ci: deploy cloud-mail from Forgejo with production configuration guards 2026-10-24 23:40:59 +08:00
ci fix: preserve daily resets, legacy routes and session isolation 2026-11-07 15:40:44 +08:00
doc fix: preserve daily resets, legacy routes and session isolation 2026-11-07 15:40:44 +08:00
mail-vue fix: preserve daily resets, legacy routes and session isolation 2026-11-07 15:40:44 +08:00
mail-worker fix: preserve daily resets, legacy routes and session isolation 2026-11-07 15:40:44 +08:00
.gitattributes ci: move cloud-mail builds and deployment to Singapore ARM64 2026-10-25 14:29:37 +08:00
.gitignore Migrate customized cloud-mail from ZekTy and preserve production bindings 2026-10-09 17:05:46 +08:00
LICENSE feat: synchronize upstream runtime while preserving targeted Telegram forwarding 2026-11-07 15:29:11 +08:00
README-en.md fix: preserve daily resets, legacy routes and session isolation 2026-11-07 15:40:44 +08:00
README.md fix: preserve daily resets, legacy routes and session isolation 2026-11-07 15:40:44 +08:00

cloud-mail

English

维护与自动部署以本 Forgejo 仓库为主:main push → Forgejo Actions → Wrangler → 现有生产 Worker。配置保护、Runner 认证、验证与故障处理见部署说明。

部署在 Cloudflare 上的自托管网页邮箱。用自己的域名接收邮件,在浏览器中管理多个邮箱地址、阅读和回复邮件,并按收件地址将通知转发到 Telegram。

这是基于 maillab/cloud-mail 维护的定制分支,包含独立收件转发规则,并在开发分支同步了上游 d115f4c 的应用功能。仓库没有与应用版本对应的 Release,不应将它视为上游完整版本镜像。

本轮 AI 模型、上游功能、schema 迁移、回归与发布限制见实施报告。已有生产部署必须先审批增量迁移;CI 会拒绝缺列的 schema。

邮件与管理能力

  • 多域名、多邮箱地址,收件箱、发件箱、草稿、星标和附件管理;高级搜索、关键词高亮和详情缓存。
  • 用户、角色、域名权限、邀请码和发件额度管理。
  • Telegram 邮件通知,以及按收件地址设置的目标聊天、发件人和关键词筛选规则;通知关闭链接预览。
  • 可选 Workers AI 验证码提取、Turnstile 验证及第三方登录。
  • 中文和英文界面、深浅色主题及 PWA 安装入口。

收件由 Cloudflare Email Routing 投递到 Worker。站外发信需要配置 Cloudflare 发件绑定或 Resend;两者都配置时优先使用 Cloudflare。附件可按设置使用 KV、R2 或 S3 兼容存储。收信成功不代表已具备站外发信能力。

部署到自己的账号

准备 Node.js 22、pnpm 9.14.4、Cloudflare 账号,以及托管在 Cloudflare 并可启用 Email Routing 的域名。

1. 安装并创建资源

git clone https://code.inklazy.com/Inklazy/cloud-mail.git
cd cloud-mail/mail-worker
pnpm install --frozen-lockfile
pnpm exec wrangler login
pnpm exec wrangler d1 create mail
pnpm exec wrangler kv namespace create mail-kv

在 mail-worker/wrangler.toml 中替换为自己创建的 D1 / KV ID,保留绑定名 db、kv 和 assets。仓库中的资源 ID 属于现有部署,不能直接用于你的账号。若启用可选存储或发件服务,再配置 r2 / email 绑定;AI 功能使用 ai 绑定。

2. 设置域名和身份

Worker 配置需要以下运行时变量,名称区分大小写:

变量 内容
domain 邮箱域名数组,例如 ["example.com"]
admin 管理员邮箱,例如 admin@example.com,域名应在上面的数组中
jwt_secret 自行生成的高强度随机字符串,用于令牌签名及初始化校验

将 domain、admin 配置到 [vars],通过 Cloudflare 的 Secret 管理设置 jwt_secret,不要提交真实密钥。初始化地址将密钥作为路径参数使用,应选择不含 URL 路径分隔符的随机值,并避免分享该地址。

配置启用 keep_vars = true,后续部署需保留平台上已有变量。Resend、Telegram、注册策略及角色权限等选项在初始化后的管理界面设置。

3. 构建、部署并初始化

在 mail-worker/ 执行:

pnpm run deploy

Wrangler 的构建钩子会安装前端依赖并构建 Vue,将静态资源输出到 mail-worker/dist/,与 API 一起部署。默认前端 API 路径为 /api,无需单独部署 Pages。

仅对自己的新部署,访问 https://<Worker域名>/api/init/<jwt_secret>,确认返回 success。随后打开站点,用 admin 指定的邮箱注册账号并登录;管理员身份按邮箱匹配,没有仓库预设密码。

在 Cloudflare Email Routing 中把所需地址或 Catch-all 路由到该 Worker,并按平台提示完成域名记录配置。需要站外发送时,再完成所选发件服务的域名验证。已有生产部署更新前应先备份数据、核对迁移内容,不要把初始化接口当作每次发布的固定步骤。

本地开发与检查

mail-worker/ 是 Hono API、邮件事件和定时任务,使用 D1 与 Drizzle ORM;mail-vue/ 是 Vue 3、Vite、Element Plus 和 Pinia 界面。

后端单元测试:

cd mail-worker
pnpm install --frozen-lockfile
pnpm exec vitest run --config vitest.unit.config.js

pnpm test / pnpm run test:unit 现已运行相同的本地测试,不再部署远端。使用项目固定的 pnpm 9.14.4;完整构建后可在仓库根目录运行 node ci/test-worker-local.mjs(隔离 D1/KV)和 node ci/test-browser.mjs(本地浏览器回归)。

本地联调前,将 wrangler-dev.toml 改为隔离测试资源、测试域名和自己的开发密钥,并按初始化流程准备本地数据库。前端需先构建一次以提供 Worker 静态资源目录:

cd mail-vue
pnpm install --frozen-lockfile
pnpm run build
pnpm run dev

另一个终端在 mail-worker/ 执行 pnpm run dev。前端默认为 http://localhost:3001,开发 API 指向 http://127.0.0.1:8787/api。本地页面与单元测试不能代替真实邮件投递、Telegram 通知或站外发信验收。

正文清洗另有浏览器用例,前端开发服务启动后访问 /test/email-html.browser.html。当前分支的修复范围、验证方法和已知问题见维护记录:邮件处理 CPU 超限、重试重复入库及未完成保存状态的恢复仍需后续处理。

项目采用 MIT 许可证。