遇到的问题
我一直在用 Cloudflare Email Routing 将域名邮箱转发到 Gmail,方便管理多个邮箱地址。配置很简单,用起来也挺好——直到我发现了一个严重的问题:
丢!邮!件!
很多正规平台的邮件都收不到了:
- npm 的验证码
- 银行(HSBC)的通知
- 甚至 Apple 的邮件
一开始我以为是 Cloudflare 转发失败,但检查后发现 Cloudflare 显示「成功转发」,Gmail 的「所有邮件」里也找不到。最后才发现它们全在垃圾邮件箱里!
更离谱的是,Gmail 莫名其妙把这些正规商家的邮件全标记成了 Spam(垃圾邮件)。
为什么会这样?
经过研究发现,这是使用 Cloudflare Email Routing + Gmail 转发方案的通病:
- SPF/DKIM 验证问题:邮件经过 Cloudflare 转发后,原始发件人的验证信息可能不完整,Gmail 会觉得可疑
- 第三方转发的信誉问题:Gmail 对经过中转的邮件更加谨慎,特别是金融类邮件
- Catch-all 带来的问题:接收所有邮件意味着可能混入真正的垃圾邮件,降低了地址的信誉评分
虽然可以手动标记「不是垃圾邮件」来训练 Gmail,但治标不治本——谁知道下次重要邮件会不会又被吞掉?
解决方案:mail2telegram
在 X 上看到有人推荐了一个项目:mail2telegram
这个方案的思路很简单:
- 邮件不转发到 Gmail,而是通过 Cloudflare Workers 直接发送到 Telegram Bot
- 在 Telegram 里查看邮件,支持纯文本和 HTML 格式
- 还能用 AI 生成邮件摘要
- 完全免费(利用 Cloudflare 和 Telegram 的免费额度)
最重要的是:不经过 Gmail,就不会有垃圾邮件问题!
部署教程
准备工作
你需要:
- ✅ Node.js、yarn@1
- ✅ 一个 Telegram 账号
- ✅ 一个 Cloudflare 账号
- ✅ 一个在 Cloudflare 托管的域名
第一步:创建 Telegram Bot
- 在 Telegram 中搜索
@BotFather并打开对话 - 发送
/newbot创建新 Bot - 按提示输入:
- Bot 显示名称(例如:
My Mail Bot) - Bot 用户名(必须以
bot结尾,例如:mymail123_bot)
- Bot 显示名称(例如:
- 创建成功后,BotFather 会给你一个 Token,类似这样:
7123456780:AAjkLAbvSgDdfsDdfsaSK0_example把这个 Token 保存好,后面要用
- 获取你的 Telegram ID:
- 搜索
@userinfobot并发送/start - 它会返回你的 ID(一串数字,例如:
123456789) - 保存这个 ID
- 搜索
第二步:安装工具
打开终端(Mac)或命令提示符(Windows),执行:
# 安装 Yarn 1.x(这个项目需要 Yarn 1)
npm install -g yarn@1
# 安装 Cloudflare Workers CLI
npm install -g wrangler
# 验证安装
yarn -v # 应显示 1.22.x
wrangler -v # 应显示 4.x.x 或更高 第三步:登录 Cloudflare
打开终端,执行:
wrangler login 这会自动打开浏览器,要求你授权。点击「允许」即可完成登录。
验证登录成功:
wrangler whoami 如果显示你的邮箱信息,说明登录成功!
❓ 遇到问题?如果你的环境无法打开浏览器(比如使用远程服务器),可以使用 API Token 方式:
点击展开:使用 API Token 登录的方法
创建 API Token
- 登录 Cloudflare Dashboard
- 点击右上角头像 → 我的个人资料
- 左侧菜单选择 API 令牌
- 点击 创建令牌
- 找到 编辑 Cloudflare Workers 模板,点击 使用模板
- 权限配置(通常已预设好):
- 账户 - Cloudflare Workers Scripts - 编辑
- 账户 - Cloudflare Workers KV Storage - 编辑
- 账户资源选择 所有账户
- 点击 继续以显示摘要 → 创建令牌
- 复制并保存这个 Token(只会显示一次!)
配置 Token
Mac/Linux 用户:
编辑你的 shell 配置文件(~/.zshrc 或 ~/.bashrc),添加:
export CLOUDFLARE_API_TOKEN="你的_API_Token" 保存后执行:
source ~/.zshrc # 或 source ~/.bashrc Windows 用户:
- 搜索并打开「环境变量」设置
- 在「用户变量」中点击「新建」
- 变量名:
CLOUDFLARE_API_TOKEN - 变量值:你的 API Token
- 确定保存
- 重新打开命令提示符
验证:
wrangler whoami 第四步:创建 KV 数据库
在终端执行:
wrangler kv namespace create "DB" 会返回类似这样的结果:
✨ Success!
Add the following to your configuration file:
{ binding = "DB", id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } 把这个 id 保存下来,待会要用。
第五步:下载并配置项目
下载项目
选择一个你喜欢的目录,执行:
git clone https://github.com/TBXark/mail2telegram.git
cd mail2telegram 如果没有 git,可以直接从 GitHub 页面 下载 ZIP 并解压。
安装依赖
yarn install 配置项目
- 复制配置模板:
cp wrangler.example.jsonc wrangler.jsonc - 编辑
wrangler.jsonc文件,填入以下信息:{ "name": "mail2telegram", "main": "src/index.ts", "compatibility_date": "2024-01-01", "kv_namespaces": [ { "binding": "DB", "id": "你的_KV_ID" // ← 第四步获取的 ID } ], "vars": { "TELEGRAM_ID": "你的_Telegram_ID", // ← 第一步获取 "TELEGRAM_TOKEN": "你的_Bot_Token", // ← 第一步获取 "DOMAIN": "", // ← 先留空 "MAIL_TTL": "259200", // ← 邮件缓存保留时间(秒)。过期后邮件将无法预览,如果需要保存,务必填写上面的FORWARD_LIST的值为自己的真实邮箱 } }
保存文件。
第六步:部署 Worker
wrangler deploy 部署成功后,会显示你的 Worker 地址:
https://mail2telegram.你的用户名.workers.dev 记下这个地址!
更新 DOMAIN 配置
编辑 wrangler.jsonc,把 DOMAIN 改成刚才的地址(不带 https://):
"DOMAIN": "mail2telegram.你的用户名.workers.dev" 保存后重新部署:
wrangler deploy 第七步:绑定 Telegram Webhook
在浏览器中访问:https://mail2telegram.你的用户名.workers.dev/init
如果看到这样的返回,说明成功:
{"ok":true,"result":true,"description":"Webhook was set"} 第八步:设置 Bot 隐私政策
这是使用 Telegram 小程序的必需步骤:
- 在 Telegram 找到
@BotFather - 发送
/mybots - 选择你的 Bot
- 选择 Edit Bot → Edit Privacy Policy
- 输入:
https://telegram.org/privacy-tpa
第九步:配置 Cloudflare Email Routing
启用 Email Routing
- 登录 Cloudflare Dashboard
- 选择你的域名
- 左侧菜单:电子邮件 → 电子邮件路由
- 点击 启用电子邮件路由
- 按提示添加 DNS 记录(Cloudflare 会自动处理)
配置 Catch-all 规则
- 在 Email Routing 页面,点击 路由规则 标签
- 找到 全部地址(Catch-all address)
- 点击 编辑
- 操作 选择:发送到 Worker
- Worker 下拉框选择:
mail2telegram - 保存
第十步:测试
- 从任意邮箱发送测试邮件到:
test@你的域名.com - 打开 Telegram,应该会收到 Bot 发来的消息,包含:
- 邮件标题
- 发件人
- 收件人
- 四个按钮:Preview、Summary、Text、HTML
- 点击按钮可以:
- Preview:直接在 Telegram 预览纯文本内容
- Summary:AI 生成邮件摘要(需配置 AI)
- Text:网页查看纯文本
- HTML:网页查看富文本格式
成功!🎉
推荐配置
添加邮件备份
邮件并不是持久的存在Cloudflare的,如果你按着上面的配置,邮件将会在72小时后缓存失效(之前配置的MAIL_TTL字段),再也无法看到,所以强烈建议同时备份到自己的邮箱中:
编辑 wrangler.jsonc,添加:
"FORWARD_LIST": "your_backup@gmail.com" 记得在 Cloudflare Email Routing 的「目标地址」中添加并验证这个邮箱。
启用 AI 摘要
我这里使用OpenRouter的Claude Haiku 4.5作为总结模型
编辑 wrangler.jsonc,添加:
"OPENAI_API_KEY": "你的AI供应商的Key",
"OPENAI_CHAT_MODEL": "anthropic/claude-haiku-4.5",
"SUMMARY_TARGET_LANG": "chinese"
"OPENAI_COMPLETIONS_API": "https://openrouter.ai/api/v1/chat/completions", 并在 wrangler.jsonc 添加 AI 绑定:
"ai": {
"binding": "AI"
} 每次修改完配置后,保存文件,执行以下命令重新部署,让配置生效
wrangler deploy 管理黑白名单
在 Bot 中发送任意消息,会看到一个小程序入口,可以:
- 管理黑名单(屏蔽特定发件人)
- 管理白名单(只接收特定发件人)
- 测试地址是否会被拦截
无限邮箱地址
你可以用不同的邮箱地址注册不同服务:
-
amazon@你的域名.com- 用于亚马逊 -
netflix@你的域名.com- 用于 Netflix -
work@你的域名.com- 用于工作
所有邮件都会发到同一个 Telegram Bot,但你能清楚地知道是哪个地址收到的。
安全注意事项
- 邮件缓存时间:72 小时后,邮件预览链接会失效,如果不设置则是默认24小时,我上面设置了259200的缓存秒数,所以是72小时(可通过
MAIL_TTL调整) - HTML 模式:查看 HTML 邮件时可能包含跟踪脚本,建议只在确认安全时使用
- 备份重要邮件:建议设置
FORWARD_LIST备份到其他邮箱
🎯 总结
使用 mail2telegram 后,我再也没遇到过重要邮件被误判为垃圾邮件的问题。Telegram 的通知也比 Gmail 更及时,查看邮件更方便。
唯一的小缺点是不支持附件预览,但对于大多数验证码、通知类邮件来说完全够用了。如果需要处理附件,可以配合 FORWARD_LIST 同时转发到其他邮箱。
如果你也被 Gmail 的垃圾邮件过滤困扰,强烈推荐试试这个方案!