部署
Custom Mail 以单个 Cloudflare Worker 运行,配合 KV 与 Workers Assets。
前置条件
- 已开通 Workers 的 Cloudflare 账号
- Brevo(默认)或其他已支持的发信服务商 — 见配置说明
- Rust stable(
wasm32-unknown-unknown)与worker-build0.8.5 - Node.js 22+ 与
npm
1. 配置产品
编辑 config/mail.json:
- 设置
host为邮件子域名 - 设置
mail.fromEmail为所选服务商已授权地址 - 自定义
plugins、app、brand、site、i18n、addressBook
编辑 wrangler.jsonc:
name— Worker 名称(如custom-mail)routes— 与mail.json的 host 一致kv_namespaces— KV 命名空间 ID
bash
npx wrangler kv namespace create MAIL_LOG_KV将返回的 id 写入 wrangler.jsonc。
2. 密钥
本地 — .dev.vars:
bash
cp .dev.vars.example .dev.vars生产:
bash
npx wrangler secret put ADMIN_PASSWORD
npx wrangler secret put BREVO_API_KEY # 或与 plugins.provider 对应的密钥3. 发布
bash
npm run typecheck
npm run deploy访问 https://<host> 并登录。
Docker(本地)
发布的镜像用于本地试用。传入 ADMIN_PASSWORD 与当前服务商的 API 密钥。MAIL_PROVIDER、MAIL_THEME、MAIL_LAYOUT、MAIL_LOGO、MAIL_CONFIG_JSON 可覆盖 mail.json 的插件槽而无需重建。新增主题/版式 JSON 或 Logo 文件仍需重建镜像。
完整命令、Compose、环境变量见 Docker。Agent 安装见 OpenClaw 技能(clawhub install custom-mail-skill)。
自定义域名
jsonc
"routes": [
{ "pattern": "mail.example.com", "custom_domain": true }
]GitHub Actions
| Workflow | 触发 | 用途 |
|---|---|---|
| CI | push / PR → main | typecheck |
| CodeQL | push / PR / 每周 | 安全扫描 |
| Docs | 变更 docs-site/** | GitHub Pages |
| Deploy to Cloudflare Workers | 仅手动 | wrangler deploy |
Cloudflare 部署所需 GitHub Secrets:CLOUDFLARE_API_TOKEN、CLOUDFLARE_ACCOUNT_ID。Worker 密钥只放在 Cloudflare。
检查清单
mail.json的host与wrangler.jsonc路由一致- KV ID 为真实绑定,不是占位符
- Worker 已写入
ADMIN_PASSWORD与plugins.provider对应的 API 密钥 - 服务商已验证
fromEmail main上 CIcheck为绿