邮件仍然是许多产品工作流的”最后一英里”:账户验证、密码重置、魔术链接、发票、警报和人工交接。对于 LLM 代理来说,这最后一英里通常是第一个出错的环节,因为典型的邮箱是为人类设计的(交互式界面、混乱的 HTML、长期身份),而不是为确定性自动化设计的。
AI 邮件是该模型的逆转:不是让代理登录邮箱,而是通过 API 提供短期邮箱,将消息作为结构化 JSON 接收,并将入站邮件视为代理可以安全使用的事件流。
本文解释了代理如何通过 API 使用一次性邮箱,使其可靠的模式,以及需要锁定什么以防止邮件成为安全隐患。
实际中的”AI 邮件”含义
当开发人员说”AI 邮件”时,他们通常希望实现以下一个或多个结果:
- 代理可以按需创建邮件地址(每个任务、每次测试运行、每次用户尝试)。
- 系统可以确定性地等待特定邮件,而无需固定的睡眠时间。
- 邮件以结构化 JSON(标题、文本、链接、附件元数据)形式到达,而不是代理必须抓取的 HTML。
- 运行可以隔离,因此并行代理不会在同一邮箱中发生冲突。
- 集成是安全的,因为入站邮件是不可信输入。
一次性邮箱 API 的存在是因为传统方法在类似代理的并发性下会失败:
- 共享 QA 邮箱会产生冲突和非确定性。
- 加号寻址通常会折叠到同一邮箱,仍然需要 UI 或 IMAP 客户端。
- “临时 Gmail 账户”由于登录摩擦和政策变化而中断。
- HTML 邮件解析很脆弱,增加了安全风险。
一次性邮箱将邮件转变为具有生命周期控制的可编程资源。
代理需要的核心原语
大多数代理和自动化友好的邮件系统都收敛到相同的概念模型:
- 邮箱:一个短期容器,拥有可路由的邮件地址。
- 消息:一个不可变的接收邮件,标准化为 JSON。
- 交付机制:webhooks(推送)、轮询(拉取)或两者。
- 工件提取:将消息转换为最小结果,如 OTP、魔术链接 URL 或附件引用。
以下是团队在 2026 年实施”AI 邮件”的常见方式的快速比较:
| 方法 | 适用于 | 首先出错的地方 | 代理友好性 |
|---|---|---|---|
| 共享邮箱(IMAP/UI) | 手动 QA,低容量 | 冲突、不稳定等待、脆弱解析 | 低 |
| 加号寻址到一个邮箱 | 简单唯一性 | 仍然共享,仍需检索逻辑 | 中低 |
| 本地 SMTP 捕获工具 | 本地开发 | 不代表真实交付,不适合共享 CI | 中等 |
| 通过 API 的一次性邮箱 | CI、QA 自动化、LLM 代理 | 主要是集成错误(匹配、超时、安全) | 高 |
参考工作流:代理安全邮件验证
最常见的”AI 邮件”流程是注册或登录验证。强健的版本如下所示:
-
创建一次性邮箱并将其
inbox_id与您的运行或尝试 ID 一起存储。 - 触发产品操作,使用生成的邮件地址发送邮件(注册、密码重置、邀请等)。
-
确定性地等待邮件:
- 优先使用 webhook 信号以获得低延迟。
- 保持轮询作为恢复的后备。
- 将邮件作为 JSON 使用,然后提取最小工件(OTP 或验证链接)。
- 使用工件完成流程。
- 清理(或允许过期)以减少保留风险并防止跨运行污染。
关键思想是代理永远不会像人类那样”检查邮箱”。它执行受控的工具调用,返回结构化的有界数据。

为 LLM 代理设计邮件工具接口
无论您是构建自己的代理工具还是集成到代理框架中,接口比提供商更重要。好的”AI 邮件”工具表面有三个属性:
- 小型:代理只获得所需内容。
- 确定性:输入和输出使重试安全。
- 受约束:代理不能意外泄露数据或执行不安全的链接。
实用的工具集如下所示:
create_inbox(metadata) -> { inbox_id, email, expires_at }wait_for_message(inbox_id, matcher, timeout_ms) -> { message_id }get_message(inbox_id, message_id) -> { message_json }extract_verification_artifact(message_json, policy) -> { otp | url }
示例:工具合同(提供商无关)
以下是描述您希望代理边界外观的伪 JSON。保持架构稳定,以便您可以交换提供商或实现。
{
"tool": "wait_for_message",
"input": {
"inbox_id": "inbox_...",
"timeout_ms": 60000,
"matcher": {
"from_domain_allowlist": ["example.com"],
"subject_contains": "Verify",
"received_after": "2026-02-13T21:10:00Z"
}
},
"output": {
"message_id": "msg_..."
}
}
代理可靠性的两个重要注意事项:
- 尽可能在稳定信号上匹配(已知发送方域、已知模板标记、您控制的关联标头),而不是完全格式化的 HTML。
- 使工具首先返回句柄(
message_id),然后获取完整消息,以便您可以干净地记录和重试。
AI 邮件的 Webhooks vs 轮询
一次性邮箱 API 通常同时支持 webhooks 和轮询。对于代理,混合方法通常是最好的:webhooks 用于快速交付,轮询作为安全网。
| 机制 | 优势 | 劣势 | 最佳实践 |
|---|---|---|---|
| Webhooks(推送) | 低延迟,事件驱动,较少 API 调用 | 需要签名验证、重试语义、公共端点 | 验证签名、去重事件、处理前存储 |
| 轮询(拉取) | 简单网络,易于推理 | 更高延迟,容易滥用紧密循环 | 使用退避、光标和时间预算 |
如果您让代理直接轮询,它可能会创建失控循环。更安全的模式是公开单个 wait_for_message 工具来强制执行:
- 最大超时
- 退避策略
- 去重
- 窄匹配器
使 AI 邮件确定性(这样代理就不会猜测)
邮件是异步的,可能会延迟、重复或重新排序。确定性来自一些设计不变量。
隔离:每次尝试一个邮箱
将邮箱视为范围资源:
- 注册验证:每次尝试一个邮箱
- 端到端测试:每次运行一个邮箱
- 长时间运行的代理:每个会话一个邮箱,带轮换
隔离减少了整个问题空间。代理不再需要在共享邮箱中”找到正确的邮件”。
关联:添加您自己的标识符
如果您控制发送应用程序,请添加一个稳定且机器可读的关联令牌,例如:
-
X-Correlation-Id标头 - 验证 URL 查询中的唯一值
- text/plain 正文中的已知标记
这有助于您避免对主题、显示名称或本地化 HTML 的模糊匹配。
幂等性和去重:期待重复
您的系统应该假设:
- SMTP 重试发生
- Webhook 重试发生
- 测试重新运行
- 代理在部分失败后再次调用工具
将您关心的工件(OTP 或验证 URL)建模为一次性使用对象,并使”使用”操作在应用层级上幂等。
可观察性:记录正确的 ID(而不是整个邮件)
要调试代理流程,您需要结构化日志,将运行连接到邮箱和消息,而不泄露内容。
| 字段 | 为什么重要 |
|---|---|
run_id / attempt_id
|
关联整个工作流 |
inbox_id |
范围邮箱句柄 |
message_id |
确切消息引用 |
received_at |
延迟和超时调试 |
sender_domain |
可投递性和欺骗信号 |
artifact_hash(可选) |
无需存储机密即可去重 |
代理读取邮件的安全防护
入站邮件是不可信内容。对于 LLM 代理,风险不仅是恶意软件,还有指令注入。
将邮件内容视为敌对的
实用规则:
- 优先使用
text/plain进行自动化和提取。 - 不要在代理环境中渲染 HTML。
- 永远不要让代理在没有严格白名单的情况下跟随链接。
- 避免将原始邮件正文传递到通用推理提示中。首先提取最小工件。
验证 webhooks
如果您使用 webhooks,需要签名有效载荷验证和重放抵抗。支持签名有效载荷的提供商减少了您的负担,但您仍需要验证签名并拒绝意外的时间戳。
有关为什么 webhook 验证很重要的背景,Stripe 的 webhook 安全指导是一个被广泛引用的基准:Webhook 签名。
Mailhook 的适用场景
Mailhook 专门为这种”AI 邮件”模型构建:
- 通过 API 创建一次性邮箱
- 将邮件作为结构化 JSON 接收
- REST API 访问
- 实时 webhook 通知
- 轮询 API 进行检索
- 即时共享域和自定义域支持
- 用于 webhook 安全的签名有效载荷
- 批量邮件处理
- 无需信用卡即可开始
有关确切的端点、有效载荷格式和规范集成合同,请使用机器可读参考:Mailhook llms.txt。
最小的”AI 邮件”推出计划
如果您正在为代理或 CI 采用一次性邮箱,安全的推出顺序是:
- 从共享域开始进行快速集成,并在匹配器、超时和日志上进行迭代。
- 一旦您的签名验证和去重正确,添加 webhooks 以获得速度。
- 当您需要更强的隔离、白名单或可投递性控制时,迁移到自定义域。
如果您想深入了解域选择,Mailhook 关于共享域与自定义域的工程写作是一个很好的补充:测试邮件域:共享域与自定义域。
底线
当邮件被视为自动化原语而不是 UI 时,AI 邮件就会工作。通过 API 提供的一次性邮箱、JSON 标准化消息和确定性等待语义为代理提供了可靠的方式来完成验证流程,大规模运行 QA,并处理操作接入,而无需脆弱的抓取。
如果您现在正在实施此模式,请将您的集成锚定在提供商的合同上(对于 Mailhook,那就是 llms.txt),保持代理工具表面小型化,并及早强制执行安全边界。这种组合将”邮件步骤”从脆弱的异常转变为代理管道的可靠部分。