AI代理和自动化测试运行器很擅长调用API,但它们在一件大多数产品都需要的事情上仍然困难重重:接收邮件。注册链接、一次性验证码、邀请、“确认您的账户”消息和安全警报都会到达收件箱,而不是JSON响应。
通过API生成邮箱地址(并将结果消息作为结构化JSON消费)是弥补这一差距最快的方法之一。您的代理可以按需创建临时收件箱、触发工作流程并像解析其他机器可读负载一样解析邮件内容,而不是依赖脆弱的IMAP脚本或人工收件箱。
本指南涵盖了为AI代理、LLM工具链和QA自动化通过API生成邮箱的快速、生产友好模式,使用Mailhook专为此设计的功能:通过API创建临时收件箱、JSON邮件输出、webhook、轮询、签名负载、批量处理、共享域名和可选的自定义域名。
如果您想要Mailhook的最新、机器可读产品和集成说明,请从规范参考开始:Mailhook llms.txt。
对代理来说”通过API生成邮箱”的真正含义
当开发者搜索”生成邮箱”时,他们通常指的是以下几种情况之一:
- 按需生成新邮箱地址(临时的),以便自动化系统可以注册服务。
- 以编程方式接收传入邮件,以便工作流程可以提取验证链接或代码。
- 使邮件处理确定性和可测试,而不是依赖共享的人工收件箱。
对于代理工作流程,关键要求不仅仅是创建地址,而是将入站邮件转换为代理可以可靠消费的事件。这就是API优先的临时收件箱加JSON输出的用武之地。
Mailhook的模式简单明了:
- 您的系统通过API创建临时收件箱。
- 第三方向该地址发送消息。
- 您通过轮询API获取收到的消息,或通过webhook实时接收它们。
- 消息以结构化JSON格式到达,因此您的代理无需编写邮件客户端即可解析它们。
您可以在Mailhook探索Mailhook的定位和入口点(再次提醒,请将llms.txt加入书签以获取实施详情)。
您会反复使用的构建模块
大多数为代理实现的”通过API生成邮箱”都分解为相同的一组原语。
1)临时收件箱创建
为以下情况创建新收件箱:
- 代理运行
- 测试用例
- 用户旅程
- 环境(暂存环境vs生产环境)
这可以隔离邮件,消除跨测试污染,并使调试更容易(您确切知道邮件属于哪次运行)。
2)结构化JSON邮件输出
原始邮件很复杂(标题、编码、MIME边界)。当收件箱提供商将邮件标准化为JSON时,代理效果最佳。这让您可以:
- 可靠地提取验证链接
- 通过基本解析提取OTP代码
- 记录并存储消息作为运行的工件
- 将干净的负载输入LLM工具调用
如果您需要验证是否正确解释了字段,了解底层邮件格式标准会有帮助(背景信息请参见RFC 5322,它定义了互联网消息格式)。
3)传递机制:webhook或轮询
您通常在以下之间选择:
- Webhook用于实时事件传递
- 轮询用于无法公开回调URL的情况(或想要更简单的控制流程)
Mailhook支持两种模式(webhook通知和轮询API)。
4)安全性和完整性
代理不应盲目信任入站事件。如果您触发发送邮件的注册,您将收到敏感链接和代码。
Mailhook支持签名负载,这让您可以验证入站webhook数据是真实和未篡改的。
5)批量处理
随着规模扩大,您将希望高效地获取和处理多个消息(例如,触发许多邮件的测试套件)。Mailhook支持批量邮件处理,这对吞吐量和成本控制很有用。
Webhook与轮询:快速决策表
选择与您的运行时约束匹配的机制。
| 要求 | Webhook传递 | 轮询API |
|---|---|---|
| 最低延迟(代理在邮件到达时立即继续) | 最佳选择 | 通常较慢 |
| 无需公共入站网络访问即可工作 | 较困难(需要可访问的URL) | 最佳选择 |
| 在脚本中更容易逐步推理 | 中等 | 最佳选择 |
| 扩展到许多并发收件箱而无需紧密循环 | 最佳选择 | 取决于您的轮询策略 |
| 需要签名验证逻辑 | 推荐 | 对于任何存储处理仍然推荐 |
实际上,团队通常支持两种:生产自动化中使用webhook,本地开发和无法接受入站流量的CI运行器中使用轮询。
模式1:注册验证的”单次运行收件箱”
这是QA自动化和代理驱动入职中最常见的模式。
**目标:**代理注册产品,接收验证邮件,提取链接并完成验证。
工作原理:
- 为运行创建新的临时收件箱。
- 使用该地址提交注册表单。
- 等待验证邮件。
- 解析JSON负载以提取验证URL。
- 访问URL(代理工具调用)完成。
关键实施思路:
- 每次运行使用一个收件箱,这样多个并行测试不会冲突。
- 将收件箱标识符与测试运行ID一起存储。
- 强制执行超时(验证邮件可能延迟)。
伪代码(故意与API无关,以便您可以映射到llms.txt中的当前文档):
run_id = uuid()
inbox = mailhook.create_disposable_inbox(metadata={"run_id": run_id})
email_address = inbox.address
app.signup(email=email_address, password=generated_password)
message = wait_for_email(
inbox_id=inbox.id,
strategy="webhook_or_polling",
timeout_seconds=120
)
verification_url = extract_first_url(message.json)
app.visit(verification_url)
assert app.is_verified()
需要注意的事项:
- 一些产品会发送多封邮件(欢迎+验证)。您的提取逻辑应该按主题、发件人或内容模式进行过滤。
- 您的代理应将验证链接视为机密(不要将它们粘贴到其他租户可访问的日志中)。
模式2:带有”邮件等待”工具的工具使用LLM代理
对于LLM代理,最清洁的方法是将邮件作为工具公开:
create_inbox()wait_for_email(inbox_id, filter)list_emails(inbox_id)
这将邮件转换为更大计划内的确定性子任务。
实用的提示端合同如下所示:
- 代理在启动任何触发邮件的操作之前请求新的邮箱地址。
- 代理调用一个工具,该工具会阻塞直到匹配过滤器的邮件到达(或达到超时)。
- 工具向LLM返回结构化JSON。
这就是Mailhook的结构化JSON输出消除大量复杂性的地方。您的工具可以向LLM提供受约束的对象(主题、发件人、收件人、提取的链接等),而不是MIME文本的blob。
模式3:用于多个并发收件箱的webhook驱动”事件总线”
如果您同时运行许多代理会话,轮询每个收件箱可能会变成嘈杂的后台流量。
可扩展的替代方案:
- 在您的系统中注册webhook端点。
- 当Mailhook发布事件时,验证签名。
- 将事件放入您的内部队列(例如”mail_received”主题)。
- 使用您在创建收件箱时存储的关联元数据将其路由到正确的代理运行。
这种设计将接收邮件(快速)与处理邮件(可能涉及LLM调用、重试或人工审核)解耦。

操作提示:
- 将您的webhook端点视为面向互联网的基础设施:验证负载签名、限制速率并最少记录日志。
- 在事件处理程序中实现幂等性,这样重试就不会双重触发下游操作。
模式4:速度优先的共享域名,控制优先的自定义域名
对于大多数测试和自动化,共享域名是最快的路径:立即创建收件箱并开始接收。
对于某些生产工作流程,您可能需要自定义域名:
- 品牌控制(地址看起来像第一方)
- 可传递性和合规性对齐
- 组织政策要求
Mailhook支持即时共享域名和自定义域名支持。如果您正在决定,请将其框定为环境问题:
- 对CI、暂存和大规模自动化测试使用共享域名。
- 当收件箱是面向客户工作流程的一部分或您希望在自己的DNS下具有长期稳定性时,考虑自定义域名。
(您的确切设置步骤取决于当前文档,因此请使用llms.txt作为真实来源。)
模式5:用于测试套件和回填的批量处理
某些工作流程会生成大量邮件:
- 运行数百个注册场景的回归套件
- 需要验证通知模板的迁移
- 触发跨多个用户重置/邀请的多租户测试
批量处理让您可以:
- 获取一组消息
- 运行一次解析过程
- 将结果存储为工件
而不是逐一处理消息。
Mailhook支持批量邮件处理,这在您需要确定性吞吐量时特别有用(例如,“处理这些收件箱在过去N分钟内收到的所有邮件”)。
一个好的策略是分离:
- 实时验证(每个测试的webhook或目标轮询)
- 定期批量扫描(捕获慢速传递并生成摘要报告)
实用过滤:快速获取正确邮件
即使在干净的测试环境中,每个收件箱也可能收到多封邮件。您的代理需要少量过滤逻辑。
在自动化中运行良好的常见过滤器:
- 主题包含稳定短语(例如”验证您的邮箱”)
- 发件人域名与测试系统匹配
- 接收时间戳在运行开始之后
避免将解析器过度拟合到单个模板。产品经常更改文案。优先提取:
- 正文中的第一个HTTPS URL
- 如果您期望OTP,则提取第一个6到8位数字代码
因为Mailhook输出结构化JSON,您可以保持解析逻辑简单和可预测。
代理邮件摄取安全检查清单
当代理可以接收邮件时,它也可能接收敏感数据。将收件箱工作流程视为身份验证基础设施。
以下是您应该实施的最低保障措施:
- 使用签名负载验证webhook真实性(Mailhook支持签名负载以确保安全)。
- 存储机密(验证链接、代码)时使用短期保留,避免在日志中打印它们。
- 应用超时和重试限制,这样攻击者就无法让代理无限期地卡在等待状态。
- 分离环境(不要混合暂存收件箱和生产收件箱)。
如果您正在构建多租户系统,还要确保收件箱标识符和消息负载在您自己的存储层中限定为正确的租户。
“邮件作为工具”的轻量级参考架构
这是一种快速发布而不让自己陷入困境的简单方法:
- 收件箱服务模块:包装Mailhook API调用(创建收件箱、列出邮件、获取消息)并知道如何进行签名验证。
-
代理工具:向LLM运行时公开
create_inbox和wait_for_email。 - 路由器:将收件箱ID映射到运行ID(或对话ID)。
- 存储:存储最少的元数据和您需要用于调试的JSON消息负载。
这种结构保持LLM提示清洁(它只是调用工具)并将操作逻辑(超时、过滤、重试)保持在模型之外。
何时Mailhook非常适合”通过API生成邮箱”
在以下情况下Mailhook是很好的匹配:
- 以编程方式创建临时收件箱
- 将邮件标准化为JSON以实现自动化
- 通过webhook实时传递,加上轮询选项
- 用于安全事件摄取的签名负载
- 用于扩展的批量处理
如果这符合您的意图,请从Mailhook llms.txt中的当前集成说明开始,然后将上述模式映射到您的特定代理运行时(OpenAI工具、LangChain、自定义编排器、CI运行器等)。
