Skip to content
Engineering

一次性邮箱 API:创建和轮换收件箱 ID

| | 3 分钟阅读
Disposable Address API: Create and Rotate Inbox IDs
Disposable Address API: Create and Rotate Inbox IDs

当你构建 AI 代理、自动化 QA 或大批量注册和验证流程时,邮箱很快就会成为瓶颈。传统收件箱难以为每个任务单独隔离,难以在运行间重置,且难以可靠地解析。一次性邮箱 API 改变了这一点:每个工作流程获得自己的收件箱标识符(收件箱 ID),你可以随时轮换它,你的应用接收邮件作为结构化数据而不是抓取 HTML。

本文解释了一次性邮箱 API 的典型工作方式,如何安全地创建和轮换收件箱 ID,以及将其连接到 LLM 代理或自动化时要注意什么。

“创建和轮换收件箱 ID” 的真正含义

一次性收件箱系统通常有三个概念:

  • 收件箱 ID:你生成(或提供商生成)的唯一标识符,表示一个邮箱。
  • 邮箱地址:从收件箱 ID 加域名(共享域或你的自定义域)派生。传入邮件路由到该收件箱。
  • 消息检索:你获取消息(轮询)或接收消息(webhook)作为 JSON。

“轮换” 意味着你停止使用一个收件箱 ID 并切换到一个全新的,可以按运行、按用户、按尝试或按计划进行。轮换为你提供隔离并使清理简单:无需从共享邮箱删除线程,你只需放弃该 ID。

对于 AI 代理,这很重要,因为代理通常需要一个干净、确定性的通道来完成一项工作(例如,“注册、确认邮件、提取代码、继续”),而不会被旧消息混淆。

一次性邮箱 API 何时是合适的工具(何时不是)

一次性邮箱 API 适用于:

  • 你需要许多收件箱(数百到数百万)用于并行工作流程。
  • 你需要机器可读的邮件(JSON)来驱动自动化。
  • 你需要运行间快速重置和隔离
  • 你需要入站邮件作为事件(webhooks),以便代理可以近实时响应。

在以下情况下不太适合:

  • 你需要具有人工协作功能的长期邮箱。
  • 你需要发送、线程对话或完整的”邮件客户端”功能。

对于验证流程和 QA,轮换一次性收件箱 ID 通常是最简单可靠的模式。

一次性邮箱 API 的核心功能

如果你要设计对接(或选择)提供商,这些功能决定轮换在生产环境中的工作效果。

收件箱生命周期控制

你通常需要:

  • 创建收件箱
  • 列出收件箱的消息
  • 按 ID 获取消息
  • 可选删除或过期收件箱

即使你的提供商不支持显式删除,只要旧收件箱变得无关紧要(并且理想情况下会过期),轮换仍然有效。

自动化友好的 JSON 输出

邮件出了名的混乱。将其规范化为结构化 JSON 的提供商减少了脆弱的解析。

至少,有用的字段包括:

  • From、to、subject、date
  • 文本正文和 HTML 正文
  • 标头
  • 附件元数据(如果支持)

关于邮件标头和格式的标准背景,RFC 5322 是权威参考:RFC 5322

Webhooks 或轮询(最好两者都有)

Webhooks 减少延迟和浪费的轮询。轮询可以作为防火墙环境或重试的回退。

例如,Mailhook 支持实时 webhook 通知轮询 API,这使得在代理和测试运行器中构建强大的”等待邮件”步骤变得更容易。

参考架构:代理友好的一次性收件箱

LLM 代理和 QA 运行器的常见架构如下:

  1. 你的协调器通过 API 创建收件箱 ID。
  2. 它将派生的邮箱地址交给目标站点的注册或验证流程。
  3. 当邮件到达时,你的系统接收 webhook(或轮询)。
  4. 你的自动化从 JSON 中提取验证链接或代码。
  5. 运行完成,收件箱 ID 被轮换。

架构图显示 AI 代理协调器通过 API 创建一次性收件箱,将派生的邮箱地址传递到注册流程,通过 webhook 将传入邮件作为 JSON 接收,提取验证代码或链接,然后轮换到新的收件箱 ID 进行下一次运行。

轮换策略(根据故障模式选择)

轮换不是一刀切的。正确的策略取决于你如何调试、如何处理重试,以及多个系统是否可以向同一地址发送邮件。

轮换策略 最适合 工作原理 主要风险 缓解措施
按运行(临时) QA、CI、负载测试 每次测试运行使用新收件箱 ID 如果收件箱快速过期,故障后更难检查 将消息 JSON 存储在日志或测试工件中
按用户会话 多步骤入职 整个会话使用一个收件箱 会话冲突时的交叉污染 使用强唯一 ID,在数据库中强制唯一性
按尝试(重试安全) 邮件传递不稳定 每次重试尝试使用新收件箱 创建更多收件箱 应用 TTL 和清理策略
时间分段(滚动窗口) 长期运行代理 每隔 N 分钟/小时轮换 延迟邮件可能到达旧收件箱 保持宽限窗口并监控两个收件箱

对于大多数代理工作流程,按尝试是最可靠的,因为它避免了用户或系统重试注册时的歧义。

实用的”创建和轮换”数据模型

将收件箱 ID 视为短期凭证。你的系统应该明确跟踪它们。

一个简单的表(或文档)通常需要:

  • inbox_id
  • email_address
  • purpose(例如,signup_verificationpassword_resetreceipt_ingestion
  • run_idtrace_id
  • statusactiverotatedexpired
  • created_atrotated_at

这个模型使得回答”此测试运行使用了哪个收件箱?“和”我们是否应该仍然接受此收件箱的消息?“等问题变得容易。

创建收件箱 ID 的示例流程(API 无关)

提供商在确切路由和认证上有所不同,但逻辑保持一致。

1) 创建收件箱

使用你的提供商的”创建收件箱”端点并存储返回的标识符。

{
  "inbox_id": "inbx_7f3c2a...",
  "address": "[email protected]",
  "created_at": "2026-01-15T15:16:53Z"
}

2) 在工作流程中使用地址

address 传递给目标系统(注册表单、OAuth 测试用户流程、B2B 邀请等)。

3) 等待邮件(webhook 优先,轮询回退)

一个强大的模式是:

  • 订阅 webhooks 以获得近实时传递。
  • 也允许轮询作为 webhook 传递临时失败时的回退。
方法 延迟 操作复杂性 故障模式 最佳实践
Webhook 中(需要端点、重试) 端点停机、签名验证失败 验证签名,实现幂等性,快速返回 2xx
轮询 中到高 低到中 速率限制、浪费请求、测试较慢 指数退避,超时后停止

Mailhook 支持安全签名负载,这正是你想要的 webhook 验证。

提取代理需要的内容(不脆弱解析)

大多数验证邮件归结为以下之一:

  • 一个链接(魔法链接、确认邮件、重置密码)
  • 一个数字或字母数字代码(OTP)

如果你的提供商返回 texthtml,优先解析文本。HTML 解析更容易出错,特别是有跟踪包装器的情况下。

代理的实用提取方法:

  • 如果提供商提供链接提取功能,优先使用专用字段。
  • 否则,扫描文本中的 URL 并按域白名单选择。
  • 对于代码,使用受预期长度和附近关键词约束的模式(例如,“Your code is”)。

将提取的工件和原始消息 JSON 一起保留在运行日志中。当站点更改其邮件模板时,这非常有价值。

如何安全轮换收件箱 ID

轮换很容易实现得很糟糕。目标是避免:

  • 将延迟邮件接受到”错误”运行中
  • 在重试期间丢失消息
  • 当多个工作者共享状态时创建竞争条件

使用显式状态和宽限窗口

一个可靠的方法是:

  • 创建时将收件箱标记为 active
  • 轮换时,将其标记为 rotated,但在短暂的宽限窗口(例如,10 到 30 分钟)内保持可读。
  • 宽限窗口后,将其标记为 expired 并停止监听。

这有助于处理延迟传递,同时仍保持系统清洁。

使”等待邮件”幂等

如果你使用 webhooks,由于重试,同一消息可能被传递多次。你的处理程序应该是幂等的。

典型的幂等键选择:

  • 提供商消息 ID
  • (inbox_id + subject + date + from)的哈希

存储已处理的消息 ID,以便你的代理不会双击验证链接。

在失败时轮换,而不仅仅是时间到了

在注册验证中,轮换的最常见原因不是时间流逝,而是歧义:

  • 用户重试注册。
  • 测试运行器重新运行失败的测试。
  • 目标系统发送多个验证邮件。

按尝试轮换使每个收件箱绑定到单个”预期邮件”,这简化了代理的推理。

域名:共享域 vs 自定义域

许多一次性收件箱提供商提供即时共享域,有些支持自定义域

共享域便于测试和内部工具,但在以下情况下自定义域可能很重要:

  • 被测试的站点阻止已知的一次性域。
  • 你需要面向客户端操作的品牌一致性。
  • 你想要对可传递性声誉的更严格控制。

如果你正在构建生产验证流程(不仅仅是 QA),自定义域支持通常是值得的。

安全和合规基础(不要跳过这个)

邮件可以携带敏感数据(登录链接、发票、PII)。如果你通过自动化路由它,将收件箱 ID 视为秘密。

关键实践:

  • 验证 webhook 签名用于每个事件(Mailhook 支持签名负载)。
  • 限制访问消息检索端点的最小权限。
  • 加密存储的消息数据如果你持久化邮件 JSON。
  • 在日志中编辑秘密(验证链接通常包含令牌)。
  • 设置保留策略(只保留调试和合规所需的内容)。

对于 webhook 签名验证模式,Stripe 的 webhook 文档是被广泛引用的最佳实践示例:Stripe: verifying webhooks

QA 自动化:测试套件的清洁模式

如果你的目标是 CI 稳定性,一次性收件箱模式应该最小化不稳定性:

  • 每个测试用例生成收件箱(或者如果套件很大,每个测试类)。
  • 使用有界超时等待邮件。
  • 如果发生超时,轮换并重试一次(并将原始消息日志附加到失败)。

避免对同一收件箱运行许多测试。共享收件箱创建非确定性,这是可靠 CI 的敌人。

LLM 代理:使邮件成为工具,而不是干扰

当工具是确定性的时,代理表现最佳。返回结构化 JSON 的收件箱是一个好的工具接口,因为它减少了”解释”工作。

如果你正在构建代理工具规范,定义:

  • create_inbox(purpose, run_id) -> {inbox_id, address}
  • wait_for_message(inbox_id, timeout_s) -> {message_json}
  • rotate_inbox(inbox_id) -> {new_inbox_id, new_address}

让代理远离基础设施细节(如退避逻辑、webhook 重试、签名验证)。让你的协调器处理那些,并暴露干净的原语。

Mailhook 的定位

Mailhook 专门为可编程一次性收件箱而构建:你可以通过 API 创建收件箱,将邮件作为结构化 JSON 接收,并通过 webhooks 或轮询集成。如果你需要一个与 AI 代理和自动化工作流程良好配合的一次性邮箱 API,它直接匹配这种”创建和轮换收件箱 ID”模式。

你可以在 Mailhook 探索该产品。

disposable-email email-automation ai-agents api-integration qa-testing

相关文章