SuperAPI AI 工具集

authorizing-api-requests

安全与审计

查看项目

更新于 10-16 09:25

技能介绍

用途

本技能是 Mailtrap API 请求认证与授权的统一参考,适用于在编写任何 Mailtrap API 调用之前(代码、脚本、CI、IaC 或 AI 智能体),以及选择令牌作用域与流、决定令牌存储位置、解析账户级端点的 account_id、排查 401 Unauthorized / 403 Forbidden 响应等场景。其他技能(sending-emails、testing-with-sandbox、using-email-templates、managing-contacts、setting-up-sending-domain)引用这些约定,而不重复定义。

主要能力

每个 Mailtrap API 请求需要两样东西:

  1. 认证头中的 API 令牌——证明身份并携带作用域。
  2. 对于账户级端点(发送主机之外的大多数端点),URL 路径中的 account_id。

API 令牌

在 Settings > API Tokens 创建令牌,使用能正常工作的最小作用域:

  • Email Sending API——用于 send.api.mailtrap.io 和 bulk.api.mailtrap.io。尽可能按流(transactional、bulk)划分作用域。
  • Email Testing API——用于 Sandbox(sandbox.api.mailtrap.io)。始终与实时发送令牌分开。
  • Account-level API——用于 Contacts、Templates、Sending Domains、Suppressions 以及 https://mailtrap.io/api/accounts/{account_id}/... 下的其他端点。

如果用户拥有合适的套餐,单个令牌可以覆盖多个作用域;但优先使用更窄的令牌(一个流 / 一个项目 / 一个产品面),以便泄露时影响范围有限。参考:API tokens 文档。

认证头(两种等价形式)

Mailtrap 接受以下任一头部。示例中使用 Bearer——它是更常见的 HTTP 约定,也匹配大多数生成的 SDK 代码。

形式 头部 使用时机
Bearer(首选) Authorization: Bearer $MAILTRAP_API_TOKEN 新代码、SDK、curl 示例的默认选择
Api-Token(旧版) Api-Token: $MAILTRAP_API_TOKEN 较旧的客户端,或使用 Bearer 不便时

不要同时发送两者。同一个值放入任一头部即可。

令牌存放位置

  • 本地开发:环境变量,或位于 .gitignore 中的 .env 文件。使用 direnv、dotenv 或框架内置机制加载。
  • CI / 构建:CI 提供商的加密密钥存储(GitHub Actions secrets、GitLab CI variables、CircleCI contexts)。仅以环境变量注入。
  • 生产 / 预发:真正的密钥管理器(AWS Secrets Manager、GCP Secret Manager、Azure Key Vault、HashiCorp Vault、Doppler、1Password 等)。按计划轮换。
  • 智能体 / LLM 工作流:宿主智能体的密钥存储。切勿将令牌粘贴到聊天或提示词中。

硬性规则:

  • 切勿在源代码、配置或笔记本中硬编码令牌。
  • 切勿提交令牌。如果落入 git,请轮换它;历史记录会永久保留。
  • 切勿通过命令行标志传递令牌——它会泄露到 shell 历史、ps 和 CI 日志中。
  • 切勿让 LLM 将字面令牌回显到生成的代码中。在所有示例中使用 $VAR_NAME 形式的 shell 变量占位符,使生成的代码引用环境变量而非字面值。
  • 切勿混用沙箱和实时令牌。泄露的沙箱密钥必须无法发送真实邮件。

推荐的环境变量名

这些名称在本仓库其他技能及下方示例片段中一致使用。

变量 用途
MAILTRAP_API_TOKEN 通用 API:Email Send(transactional 和 bulk)、Templates、Contacts、Sending Domains、Suppressions
MAILTRAP_SANDBOX_API_TOKEN Sandbox / Email Testing(独立作用域)
MAILTRAP_ACCOUNT_ID 账户级端点的路径参数

如果你的环境使用不同名称,在启动时一次性设置别名,以便其他技能中的示例无需修改即可使用。

自动解析 account_id

account_id 是每个 https://mailtrap.io/api/accounts/{account_id}/... 端点上的整数前缀。不要硬编码它。它会因环境而异,每个组织不同,并且当你把脚本复制到队友的账户时会静默出错。

每次会话从 Accounts 端点解析一次,该端点列出令牌可访问的每个账户:

curl -s https://mailtrap.io/api/accounts \
  -H "Authorization: Bearer $MAILTRAP_API_TOKEN"

响应结构(数组):

[
  {"id": 12345, "name": "My Company", "access_levels": [1000]},
  {"id": 67890, "name": "Client Account", "access_levels": [100]}
]

access_levels 取值:

  • 1000——账户所有者
  • 100——管理员
  • 10——查看者(大多数端点上只读)

缓存为环境变量的一行命令(如果令牌能看到多个账户,请选择正确的账户):

export MAILTRAP_ACCOUNT_ID=$(curl -s https://mailtrap.io/api/accounts \
  -H "Authorization: Bearer $MAILTRAP_API_TOKEN" | jq '.[0].id')

参考:Accounts API。

使用方式(快速参考)

# 实时发送(路径中无 account_id)
curl -X POST https://send.api.mailtrap.io/api/send \
  -H "Authorization: Bearer $MAILTRAP_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ ... }'

# 账户级端点
curl "https://mailtrap.io/api/accounts/$MAILTRAP_ACCOUNT_ID/contacts/lists" \
  -H "Authorization: Bearer $MAILTRAP_API_TOKEN"

# Sandbox / Testing
curl -X POST "https://sandbox.api.mailtrap.io/api/send/$MAILTRAP_INBOX_ID" \
  -H "Authorization: Bearer $MAILTRAP_SANDBOX_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ ... }'

常见错误与修复

错误 修复
在代码、配置或笔记本中硬编码令牌 从 $MAILTRAP_API_TOKEN 加载(env、.env、CI secret、secret manager);如果曾泄露则轮换令牌
通过 CLI 标志传递令牌(--token=...) 使用环境变量;CLI 标志会泄露到 shell 历史、ps 和 CI 日志
提交令牌后在后续提交中删除 历史会永久保留该值——立即轮换令牌,不要只是删除文件
将令牌粘贴到聊天 / 提示词 / issue 将聊天视为公开;如果发生则轮换
对沙箱主机使用实时 MAILTRAP_API_TOKEN 沙箱使用自己的作用域和 MAILTRAP_SANDBOX_API_TOKEN;混用要么失败,要么意外发送真实邮件
硬编码 account_id 每次运行通过 GET https://mailtrap.io/api/accounts 解析一次,并通过 $MAILTRAP_ACCOUNT_ID 传递
当令牌能看到多个账户时选错账户 按名称或 access_levels(1000 = owner)过滤 GET /api/accounts 响应,而不是用 .[0]
同时发送 Authorization 和 Api-Token 头部 选择其一(新代码用 Bearer);重复没有必要,且会混淆某些中间层
使用查看者作用域的令牌进行写入 检查 access_levels;写入需要相关账户的 100(admin)或 1000(owner)

适用场景

  • 在编写任何 Mailtrap API 调用之前(代码、脚本、CI、IaC 或 AI 智能体)。
  • 选择要配置的令牌作用域与流。
  • 决定令牌存放位置(env、secret manager、CI)。
  • 解析账户级端点的 account_id。
  • 排查 401 Unauthorized / 403 Forbidden 响应。

限制

资料未提供关于速率限制、令牌有效期、具体套餐价格或各端点详细参数的信息,暂未提供。