电子邮件配置
Hermes 可以使用标准 IMAP 和 SMTP 协议接收并回复电子邮件。向 Agent 的地址发送邮件,它会在同一线程中回复 —— 无需特殊客户端或机器人 API。适用于 Gmail、Outlook、Yahoo、Fastmail 或任何支持 IMAP/SMTP 的提供商。
无需外部依赖
电子邮件适配器使用 Python 内置的 imaplib、smtplib 和 email 模块,无需额外包或外部服务。
前置条件
- 为您的 Hermes Agent 准备一个专用电子邮件账号(请勿使用个人邮箱)
- 该邮箱账号已启用 IMAP
- 如果使用 Gmail 或其他启用了双重认证的提供商,需要应用专用密码
Gmail 配置
- 在您的 Google 账号上启用双重认证
- 前往应用专用密码
- 创建新的应用专用密码(选择"邮件"或"其他")
- 复制 16 位密码 —— 将使用它代替常规密码
Outlook / Microsoft 365
- 前往安全设置
- 如果尚未启用,请开启双重认证
- 在"其他安全选项"下创建应用专用密码
- IMAP 主机:
outlook.office365.com,SMTP 主机:smtp.office365.com
其他提供商
大多数电子邮件提供商都支持 IMAP/SMTP。请查阅您的提供商文档了解:
- IMAP 主机和端口(通常是端口 993,使用 SSL)
- SMTP 主机和端口(通常是端口 587,使用 STARTTLS)
- 是否需要应用专用密码
第一步:配置 Hermes
最简便的方式:
hermes gateway setup
从平台菜单中选择 Email。向导将提示您输入邮箱地址、密码、IMAP/SMTP 主机和允许的发件人。
手动配置
在 ~/.hermes/.env 中添加:
# 必填
EMAIL_ADDRESS=hermes@gmail.com
EMAIL_PASSWORD=abcd efgh ijkl mnop # 应用专用密码(不是常规密码)
EMAIL_IMAP_HOST=imap.gmail.com
EMAIL_SMTP_HOST=smtp.gmail.com
# 安全(推荐)
EMAIL_ALLOWED_USERS=your@email.com,colleague@work.com
# 可选
EMAIL_IMAP_PORT=993 # 默认:993(IMAP SSL)
EMAIL_SMTP_PORT=587 # 默认:587(SMTP STARTTLS)
EMAIL_POLL_INTERVAL=15 # 检查收件箱的间隔秒数(默认:15)
EMAIL_HOME_ADDRESS=your@email.com # 定时任务的默认投递目标
第二步:启动网关
hermes gateway # 在前台运行
hermes gateway install # 安装为用户服务
sudo hermes gateway install --system # 仅 Linux:开机启动系统服务
启动时,适配器会:
- 测试 IMAP 和 SMTP 连接
- 将收件箱中所有现有邮件标记为"已读"(仅处理新邮件)
- 开始轮询新邮件
工作原理
接收邮件
适配器以可配置的间隔(默认:15 秒)轮询 IMAP 收件箱中的未读邮件。对于每封新邮件:
- 主题行作为上下文包含(例如
[Subject: Deploy to production]) - 回复邮件(主题以
Re:开头)跳过主题前缀 —— 线程上下文已建立 - 附件会缓存到本地:
- 图片(JPEG、PNG、GIF、WebP)→ 可供视觉工具使用
- 文档(PDF、ZIP 等)→ 可供文件访问
- 纯 HTML 邮件会去除标签提取纯文本
- 自发邮件会被过滤,防止回复循环
- 自动化/无回复发件人会被静默忽略 ——
noreply@、mailer-daemon@、bounce@、no-reply@以及带有Auto-Submitted、Precedence: bulk或List-Unsubscribe头部的邮件
发送回复
通过 SMTP 发送回复,使用正确的邮件线程头部:
- In-Reply-To 和 References 头部维护线程
- 主题行保留并添加
Re:前缀(不会出现双重Re: Re:) - Message-ID 使用 Agent 的域名生成
- 响应以纯文本(UTF-8)格式发送
文件附件
Agent 可以在回复中发送文件附件。在响应中包含 MEDIA:/path/to/file,该文件将作为附件附加到发出的邮件中。
跳过附件
要忽略所有传入附件(出于恶意软件防护或节省带宽的目的),在 config.yaml 中添加:
platforms:
email:
skip_attachments: true
启用后,附件和内联部分在有效载荷解码之前会被跳过。邮件正文文本仍会正常处理。
访问控制
电子邮件访问遵循与其他所有 Hermes 平台相同的模式:
- 设置了
EMAIL_ALLOWED_USERS→ 仅处理来自这些地址的邮件 - 未设置允许列表 → 未知发件人会收到配对码
EMAIL_ALLOW_ALL_USERS=true→ 接受任意发件人(谨慎使用)
注意
请务必配置 EMAIL_ALLOWED_USERS。 没有此设置,任何知道 Agent 邮箱地址的人都可以发送命令。Agent 默认具有终端访问权限。
故障排查
| 问题 | 解决方案 |
|---|---|
| 启动时出现 "IMAP connection failed" | 验证 EMAIL_IMAP_HOST 和 EMAIL_IMAP_PORT。确保账号已启用 IMAP。对于 Gmail,请在设置 → 转发和 POP/IMAP 中启用它。 |
| 启动时出现 "SMTP connection failed" | 验证 EMAIL_SMTP_HOST 和 EMAIL_SMTP_PORT。检查密码是否正确(Gmail 请使用应用专用密码)。 |
| 邮件未收到 | 检查 EMAIL_ALLOWED_USERS 中是否包含发件人的邮箱。检查垃圾邮件文件夹 —— 某些提供商会将自动回复标记为垃圾邮件。 |
| "Authentication failed" | 对于 Gmail,必须使用应用专用密码,不能使用常规密码。请先确保已启用双重认证。 |
| 重复回复 | 确保只有一个网关实例在运行。检查 hermes gateway status。 |
| 响应较慢 | 默认轮询间隔为 15 秒。通过 EMAIL_POLL_INTERVAL=5 减少间隔可加快响应速度(但会增加 IMAP 连接数)。 |
| 回复未线程化 | 适配器使用 In-Reply-To 头部。某些电子邮件客户端(尤其是网页版)可能无法正确对自动消息进行线程化。 |
安全性
注意
请使用专用邮箱账号。 不要使用个人邮箱 —— Agent 会将密码存储在 .env 中,并通过 IMAP 拥有完整的收件箱访问权限。
- 使用应用专用密码而非主密码(Gmail 启用双重认证时必须)
- 设置
EMAIL_ALLOWED_USERS限制可与 Agent 交互的用户 - 密码存储在
~/.hermes/.env中 —— 保护此文件(chmod 600) - IMAP 默认使用 SSL(端口 993),SMTP 默认使用 STARTTLS(端口 587)—— 连接已加密
环境变量参考
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
EMAIL_ADDRESS | 是 | — | Agent 的邮箱地址 |
EMAIL_PASSWORD | 是 | — | 邮箱密码或应用专用密码 |
EMAIL_IMAP_HOST | 是 | — | IMAP 服务器主机(例如 imap.gmail.com) |
EMAIL_SMTP_HOST | 是 | — | SMTP 服务器主机(例如 smtp.gmail.com) |
EMAIL_IMAP_PORT | 否 | 993 | IMAP 服务器端口 |
EMAIL_SMTP_PORT | 否 | 587 | SMTP 服务器端口 |
EMAIL_POLL_INTERVAL | 否 | 15 | 检查收件箱的间隔秒数 |
EMAIL_ALLOWED_USERS | 否 | — | 允许的发件人地址(逗号分隔) |
EMAIL_HOME_ADDRESS | 否 | — | 定时任务的默认投递目标 |
EMAIL_ALLOW_ALL_USERS | 否 | false | 允许所有发件人(不推荐) |