1475 字
7 分钟
一起和你的AI助理一起使用域名邮箱的方案

前段时间把 resend-hermes-bridge 做成了一个可以独立安装的小服务。这篇文章介绍一下它的新定位:让你和自己的 AI 小助理共用一個域名邮箱。

你可以把它理解为:给本地 AI 助理(比如 Hermes)配一个 [email protected] 的邮箱地址。别人往这个地址发邮件,AI 会读内容、看附件、决定怎么回复;平时收到的非机器人邮件,助理也会整理好通知你。发信则由助理通过 MCP 创建草稿、你确认后统一走 Resend 发出。

效果预览#

下面是助理把邮件摘要和自动回复结果推送到不同聊天工具的样子:

TelegramQQ
Telegram 通知效果QQ 通知效果

为什么需要这个桥接层#

邮件是一种很自然的”外部世界 → 本地 AI”通道,但直接让 AI 处理会有几个问题:

  • 邮件服务商通过 Webhook 推送事件,需要验签、拉取正文和附件;
  • AI 决定回复后,还要调用邮件 API 发出去;
  • 中间涉及附件落盘、发信确认、失败恢复、审计日志,混在一起很难维护。

所以我把”邮件边界”拆成一个独立的 FastAPI 服务:AI 只负责决策,bridge 只负责落地。这样 Webhook 验签、Resend API、本地文件系统、Hermes 调用都各自收敛在桥接层,AI 侧只看到一个干净的 MCP 工具集。

核心功能#

resend-hermes-bridge 现在主要做四件事:

  1. 接收 Resend 入站邮件

    • 监听 email.received Webhook,校验 Svix 签名;

    • 拉取完整邮件正文、HTML 和附件;

    • 命中机器人地址时交给本地 AI 处理,其他邮件仅通知主人。

  2. 让 AI 自动回复邮件

    • 解析发件人、主题、正文和附件;

    • 通过 prompt 把邮件任务交给 Hermes;

    • AI 返回 action=reply 时,bridge 自动生成并发送回复邮件,支持 HTML 和内联图片。

  3. 统一对外发信与草稿确认

    • AI 通过 MCP 创建邮件草稿,真正发送前必须在聊天里确认;

    • 确认后由 bridge 调用 Resend API 发信;

    • 同时提供本地邮件历史的列表、搜索、查看、删除和标签管理。

  4. 通知与审计

    • 支持把邮件通知发到 Telegram、QQ、微信机器人等你已经配置好的 Hermes 目标;

    • SQLite 记录每封邮件的事件、处理步骤、附件和发信结果;

    • 启动时自动恢复未处理完成的 Webhook 事件,避免漏信。

架构概览#

Resend Inbound
|
| email.received + Svix signature
v
FastAPI bridge (127.0.0.1:8765)
|
|-- fetch inbound email and attachments from Resend
|-- write state to data/state.db
|-- notify owner through Hermes send
|-- run Hermes chat for bot-addressed emails
|-- send Resend replies when Hermes returns action=reply
|
v
Hermes local runtime

手动发信走另一条路径:

Hermes MCP resend_email
|
|-- confirmed=false: create local draft and show preview
|-- user confirms in chat
|-- confirmed=true + draft_id: bridge validates draft and sends
|-- list/search/view/delete/tag local email history
v
Resend outbound email

几个设计上的取舍:

  • 默认只绑定 127.0.0.1,不直接暴露公网;
  • Webhook 路径和发信路径分离,反向代理只转发 /webhooks/resend;
  • 附件严格限制在 data/attachments/ 和 data/generated/ 下,防止路径遍历;
  • MCP 发信采用两步确认,先创建草稿,用户确认后再发送,避免 Agent 误操作;
  • 通知目标可配置,通过 NOTIFICATION_TARGET 指定 Telegram、QQ、微信机器人等;
  • 界面语言可配置,BRIDGE_LANGUAGE 支持中文或英文通知与邮件列表展示。

快速安装#

前提:

  • 本机已安装并配置好 Hermes;
  • 有一个在 Resend 验证过的发信域名;
  • Python >= 3.11。
Terminal window
git clone https://github.com/AnyAstra/resend-hermes-bridge.git
cd resend-hermes-bridge
./scripts/install.sh

安装脚本会:

  1. 检查 Hermes CLI 和 ~/.hermes/config.yaml;
  2. 检查 Python 版本;
  3. 创建 .venv 并安装依赖;
  4. 从 .env.example 交互式生成 .env;
  5. 安装 systemd 用户服务并启动;
  6. 把 MCP server 注册到 Hermes config.yaml。

主要配置项:

Terminal window
RESEND_API_KEY= # Resend API key
RESEND_WEBHOOK_SECRET= # Webhook 签名密钥
RESEND_DOMAIN= # 你的域名,如 yourdomain.com
BOT_FROM_LOCAL=bot # 机器人邮箱前缀,生成 [email protected]
OWNER_FROM_LOCAL=mail # 主人发信邮箱前缀,生成 [email protected]
AI_NAME=卡宝 # 通知里显示的 AI 名字
NOTIFICATION_TARGET=telegram # 通知目标,也可改成 qqbot、weixin 等
BRIDGE_LANGUAGE=zh # zh 或 en

检查服务:

Terminal window
systemctl --user status resend-hermes-bridge.service
curl http://127.0.0.1:8765/health

如果 Hermes 会话已经打开,执行 /reload-mcp 重新加载 MCP 工具。

Resend 与 Nginx 配置#

在 Resend 控制台:

  1. 添加并验证发信域名;
  2. 创建 API key,写入 RESEND_API_KEY;
  3. 创建 Inbound Email Webhook,事件选 email.received;
  4. 复制 Webhook Signing Secret,写入 RESEND_WEBHOOK_SECRET。

Nginx 只暴露 Webhook 路径:

location /your-resend-endpoint {
proxy_pass http://127.0.0.1:8765/webhooks/resend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

注意不要把 /send、/show-draft 整个服务直接暴露到公网。

修改 .env 配置后,需要重启本项目和 Hermes Gateway 服务才能生效:

Terminal window
systemctl --user restart resend-hermes-bridge.service
hermes gateway restart

运维常用命令#

查看数据库健康状态:

Terminal window
.venv/bin/python scripts/manage.py status

查看失败事件:

Terminal window
.venv/bin/python scripts/manage.py failed --limit 20

查看某封邮件的处理步骤:

Terminal window
.venv/bin/python scripts/manage.py steps <email_id>

查看 MCP 草稿:

Terminal window
.venv/bin/python scripts/manage.py drafts

重新注册 MCP:

Terminal window
.venv/bin/python scripts/manage.py install-mcp

查看服务日志:

Terminal window
journalctl --user -u resend-hermes-bridge.service -f

安全注意#

  • .env 和 data/ 都可能包含敏感信息,不要提交到仓库;
  • 公网 Webhook 入口只转发到本地 /webhooks/resend,且必须让签名校验继续生效;
  • /send 和 /show-draft 没有设计成公网认证 API,只能放在本机或可信内网;
  • AI 处理邮件时使用 --yolo,邮件正文和附件都是不可信输入,不要在高权限账户上运行。

总结#

resend-hermes-bridge 是我把”邮件”作为 AI 助理外部接口的一次尝试。它没有试图做一个完整的邮件服务,而是专注于让本地 AI 安全地收发域名邮箱,同时把发信确认、附件管理、通知推送、审计日志这些边界问题收敛在一个小服务里。

如果你也在用 Hermes 或其他本地 AI 助理,并且有 Resend 域名,可以试试看。项目开源在 GitHub,MIT 协议,欢迎提 issue 或 PR。


项目地址:AnyAstra/resend-hermes-bridge

一起和你的AI助理一起使用域名邮箱的方案
https://karx.cn/posts/resend-hermes-bridge/
作者
karx
发布于
2026-06-26
许可协议
CC BY-NC-SA 4.0