TrekMail REST API 开发者概览

查看 TrekMail REST API 的认证方式、权限范围及主要端点。了解如何管理域名、邮箱、共享成员和发送设置,获取不含密码的邮件应用连接信息。本文还说明共享邮箱的读取与发送权限、权限变更的拒绝提示、普通邮箱转换及各类资源,帮助开发者选择正确的请求并处理响应。

文章详情

类型、难度、套餐及最近更新信息。

▼
类型
参考资料
难度
中级
套餐
Nano · Starter · Pro · Agency
最近更新
2026年10月10日

打开 Claude 中的 TrekMail,选择 Connect,登录并授权。无需创建 API 令牌。您可以在 AI 智能体与 API,令牌,已连接应用 中查看权限或断开连接。

自己的 White Label 品牌: 使用品牌控制台中显示的 MCP 地址,并将连接器命名为您的品牌。将其添加为 custom connector;TrekMail 的公开目录页面使用 TrekMail 登录,不能替代您品牌的连接。

TrekMail API 允许你通过 HTTP 客户端或 AI 代理管理域名、邮箱、转发、DNS、邮件迁移和网页邮箱操作。其中包括读取和发送邮件、草稿、定时发送、文件夹、联系人、日历、身份、模板和已阻止的发件人。经过认证的请求使用 bearer 令牌,响应采用 JSON 格式,API 活动会被审计。

用一个密钥读取邮件

在 Pro 和 Agency 套餐中,创建 API 密钥时选择“读取邮件”。明确权限为 mailboxes:messages:read;mailboxes:read 仅列出邮箱地址和连接设置。选择所有邮箱可包含当前和未来的邮箱,也可以限制为指定域名及邮箱。现有密钥不会自动获得新权限。

使用账户密钥访问下列 GET 路由。发送、删除和修改仍需要单独的邮件令牌及权限。托管 MCP 接受 OAuth,不接受 tm_live_ 或 tm_msg_。令牌类型错误会告诉代理正确的路由或授权方式。

GET /api/v1/mailboxes/{mailbox}/messages
GET /api/v1/mailboxes/{mailbox}/folders
GET /api/v1/mailboxes/{mailbox}/messages/{uid}
GET /api/v1/mailboxes/{mailbox}/messages/{uid}/raw
GET /api/v1/mailboxes/{mailbox}/messages/{uid}/attachments/{index}

你将获得的功能

  • REST API v1,采用 JSON 请求和响应格式。
  • **Bearer 令牌认证:**经过认证的 API 调用不使用 Cookie 或会话。
  • 需要的写入操作使用幂等键,避免重试时重复执行操作。
  • 按令牌限速,并提供 Retry-After 标头。
  • 审计日志,可在控制面板的 AI 智能体与 API,审计日志 下查看。
  • MCP 服务器,其目录会根据当前连接的凭据、传输和安全设置进行筛选。因此,范围较窄的项目连接只会看到它可以使用的工具。
  • **域名别名:**将辅助域名上仅用于接收的地址连接到主域名上的相同本地部分,并提供已保存与实时投递状态及安全删除功能。请参阅通过 API 和 MCP 使用域名别名。
  • **双令牌架构:**基础设施使用独立的操作令牌,读取、发送、草稿、定时发送、联系人、日历、身份、模板和文件夹等完整邮件操作使用消息令牌。
  • **出站送达率和退信洞察:**从控制面板获取已发送、已送达、硬退信和软退信汇总,以及每位收件人的 SMTP 代码和响应。请参阅送达率和退信。
  • **邮件应用专用密码:**管理 IMAP、SMTP、日历和联系人应用使用的独立密码,并设置邮件应用接受哪些密码。它们不会取代 API Bearer 令牌或 Message API 令牌。参阅通过 API 和 MCP 管理应用专用密码。
  • 邮箱存储用量:list_mailboxes 和 get_mailbox 返回 used_mb、quota_mb、allocation_mb 和 is_pooled,因此代理无需访问控制面板即可发现接近限额的邮箱。
  • **White Label 管理:**检查设置、管理每个域名的品牌、邀请客户、控制角色和域名、暂停或恢复访问,并通过 API 或 MCP 查看活动。请参阅品牌指南和团队管理指南。

Drive API 和文件自动化

Drive 属于公共 API。它涵盖账户 Drive 和邮箱 Drive 空间、用量、文件夹浏览、上传、文件和文件夹管理、回收站、批量操作、公共共享链接、同步设备密码管理,以及只读的 Drive Storage Add-on 状态。

Drive 使用十一个操作令牌范围:drive:account:read、drive:account:write、drive:account:share、drive:account:purge、drive:mailbox:read、drive:mailbox:write、drive:mailbox:share、drive:mailbox:purge、drive:addon:read、drive:devices:read 和 drive:devices:write。Drive Add-on 的购买、调整容量和取消等计费操作仍只能在控制面板中完成,不会作为 API 或 MCP 写入操作开放。

请从 Drive API 概览或 Drive API 快速入门开始。

双令牌架构

API 使用两种相互独立的令牌类型。你可以根据需要使用其中一种或同时使用两种:

令牌类型 前缀 可用功能
操作令牌 tm_live_ 账户和基础设施工具:White Label、域名、DNS、邮箱、邀请、Drive、迁移、SMTP、工单、计费和 Cloudflare
消息令牌 tm_msg_ 网页邮箱操作:消息、文件夹、附件、草稿、定时发送、垃圾邮件/正常邮件报告、批量操作、联系人、联系人组、日历、撰写辅助工具、身份、模板和已阻止的发件人

操作令牌和消息令牌拥有独立的范围和速率限制。通过在 MCP 服务器环境中配置两种令牌,同一个代理可以同时使用它们。

消息令牌适用于 Pro 和 Agency 套餐。

开始之前

  • 所有套餐均可访问 API:
    • **Nano:**Email Verifier。添加 Drive Storage Add-on 后即可完整访问 Drive API 和 MCP。
    • **Starter:**完整的 Drive、完整的 Email Verifier,以及其余基础设施区域的只读访问权限。这些写入操作请使用控制面板。
    • **Pro / Agency:**完整的基础 API 访问权限,包括消息令牌。White Label 试用或付费附加组件生效期间会添加相应范围。
  • **要连接 AI 代理?**在任何兼容客户端中将 https://trekmail.net/mcp 添加为远程 MCP 服务器。如果客户端支持浏览器授权,则不需要手动令牌。有关远程、CLI/桌面、桥接和自行托管选项,请参阅连接 AI 代理 (MCP)。
  • **要构建自己的集成?**在 AI 智能体与 API,令牌,创建令牌 下创建 tm_live_ 令牌,并将其作为 Authorization: Bearer … 发送。请参阅创建和管理 API 令牌。
  • **初次使用 API?**单击 AI 智能体与 API 页面顶部的 开始导览,快速了解连接方式、令牌管理、已连接应用和审计日志。

认证工作方式

每个请求都必须在 Authorization 标头中包含令牌:

Authorization: Bearer tm_live_abc123...

操作令牌以 tm_live_ 开头,消息令牌以 tm_msg_ 开头。两者都只在创建时显示一次,之后无法再次查看。

如果令牌缺失、被撤销或已过期,API 将返回 401 和 unauthenticated 错误代码。

基础 URL 和版本控制

所有端点都位于:

https://trekmail.net/api/v1

基础 URL 显示在 AI 智能体与 API 控制面板的 快速参考 下。版本位于 URL 路径中。如果将来推出 v2,v1 仍将继续工作。

响应格式

成功响应返回 JSON;单个资源或分页列表使用 data 键:

{
  "data": [
    { "id": 1, "domain": "example.com", "status": "active" }
  ],
  "links": { "next": "...", "prev": null },
  "meta": { "current_page": 1, "last_page": 1, "total": 1 }
}

错误响应采用一致的结构:

{
  "error": {
    "code": "unauthenticated",
    "message": "Invalid or expired API token",
    "hint": "Check that your token is correct and has not been revoked.",
    "request_id": "req_abc123",
    "retryable": false
  }
}

请求 ID

每个响应都包含 X-Request-Id 标头。你也可以通过请求中的 X-Request-Id 提供自己的值。该值会在响应中返回并记录到审计跟踪中。

速率限制

每个令牌每分钟都有速率限制。达到限制时,API 将返回 429,并在 Retry-After 标头中指明何时可以重试。

破坏性操作(删除意图)还具有每个令牌的额外每日限制,以及连续删除之间的冷却时间。

迁移写入操作(开始、取消、重试)具有每个令牌每分钟 10 个请求的专用速率限制,还受服务器级并发上限约束;全局运行的迁移过多时将返回 503。

消息令牌使用单独的限制。默认值为每个令牌每分钟 30 个读取请求、每分钟 60 个发送请求、每天 5,000 次成功读取,以及每个邮箱每天 100 次 API 发送。第二个发送安全计数器默认为每个令牌每天 500 次;通常先达到较低的邮箱上限。这些 API 保护措施不能替代套餐的托管 SMTP 限制或外部提供商自身的限制。

幂等性

标记为幂等的状态变更端点需要 Idempotency-Key 标头。这包括创建、更新、发送和删除操作,否则自动重试可能导致重复操作。提供商检测或连接测试等类似读取的 POST 操作不需要该标头;请检查端点表或 OpenAPI 规范。如果使用相同正文发送相同的键,API 会重放原始响应而不会创建重复项。但邮件发送有一个例外:一旦投递失败(例如因达到发送额度),API 不再重放之前的 202,因此可以稍后用相同内容再次发送同一封邮件。如果你自己提供 X-Request-Id,这次发送请使用新的值:同一邮箱使用相同 X-Request-Id 的发送也会被 API 视为重复,沿用旧值只会返回原来那次失败的投递,不会发送任何内容。对仍在等待或已送达的发送进行重试,仍会得到原始响应。

Idempotency-Key: create-mailbox-alice-2024

如果使用不同正文发送相同的键,API 将返回 409 Conflict。

邮箱存储分配

所有创建邮箱或邀请的端点,即 POST /api/v1/mailboxes、/api/v1/mailboxes:bulk、/api/v1/mailboxes/invites、/api/v1/mailboxes/invites:bulk,都接受可选整数 storage_allocation_mb。

值 含义
省略(或 null) 邮箱使用账户的共享存储池(默认)。
正整数 (MB) 邮箱使用专用存储。从账户存储池中划出确切容量,仅供此邮箱使用。

分配会根据实时存储池减去现有专用邮箱和待处理专用邀请后的容量进行验证。批量端点还会验证整批分配的总和,如果会造成过度分配,则以 422 storage_pool_exceeded 拒绝整批操作。删除专用邮箱、兑换邀请(分配转移到新邮箱)或待处理邀请过期时,存储池都会刷新。

对于邀请,分配会记录在访问代码上,并在兑换时复制到新邮箱。如果兑换时存储池不再能容纳请求的分配(例如另一位管理员在此期间增加了专用分配),新邮箱会平稳降级为共享模式,而不会导致兑换失败;收件人会在成功页面上看到通知。

新建普通邮箱,包括批量创建、通过邀请及 AI 智能体创建的邮箱,均采用默认开启的账户设置 > 新邮箱 > 邮件应用需要应用专用密码设置。更改此设置不会切换现有邮箱的登录方式。POST /api/v1/mailboxes 可通过 client_auth_mode 选择 app_password_only 或 password_or_app_password;省略时采用账户设置。邮箱列表和详情资源返回 client_auth_mode 和 app_passwords_count(有效应用专用密码数量)。共享邮箱没有自己的应用专用密码或登录模式。

用于管理应用专用密码的 6 个 MCP 工具是 list_mailbox_app_passwords、create_mailbox_app_password、rotate_mailbox_app_password、revoke_mailbox_app_password、set_mailbox_client_auth_mode、update_account。 update_account: 为未来创建的邮箱设置 new_mailbox_client_auth_mode;现有邮箱保留当前模式。需要 mailboxes:write、不受资源限制的所有者令牌或连接器,自托管 stdio 还需要 TREKMAIL_ALLOW_DESTRUCTIVE=true。

邮箱 Drive 访问权限

每个邮箱都有一个 drive_access 级别,用于决定其用户可在网页邮箱中使用多少 Drive 功能。该值会在邮箱资源中返回,可以使用 PATCH /api/v1/mailboxes/{id} 设置,也可以使用 POST /api/v1/mailboxes:drive-access 一次设置多个邮箱。

值 含义
full 所有功能:Drive 选项卡、上传和共享、文件搜索以及与计算机同步。默认值。
attachments_only 网页邮箱中没有 Drive,也不能同步。仍可发送邮件;超过附件阈值的文件会以下载链接形式发送,并在保留期后删除该副本。
disabled 没有 Drive,超过阈值的文件也完全无法作为附件。

存储空间在整个账户中共享,因此此设置控制单个用户可以用文件占用多少存储池容量。

暂停邮箱登录

可以暂停邮箱登录,同时让它继续接收邮件:网页邮箱、IMAP、SMTP 和设备密码会被拒绝,已打开的会话会结束,但投递不受影响。因此不会退信,所有邮件都会等待登录恢复。使用 POST /api/v1/mailboxes/{id}:suspend-login(以及 :resume-login)进行设置,或使用 POST /api/v1/mailboxes:login-access 设置多个邮箱。

邮箱资源通过 login_suspended、login_suspended_at 和 login_suspended_reason 报告此状态。读取 login_suspended 以判断用户能否登录,读取 status 以判断邮箱本身是否运行。暂停登录的邮箱仍保持 active,因为它仍在接收邮件。:pause 是另一项操作:它会将 status 设置为 disabled,同时停止投递。

暂停登录会永久撤销所有应用专用密码,恢复登录不会恢复这些密码。管理员在控制面板、通过 API 或 AI 智能体设置新邮箱密码,以及密码恢复、转为共享邮箱、移至“最近删除”时,也会撤销所有应用专用密码。恢复已删除的邮箱不会恢复这些密码。

请参阅通过 API 暂停邮箱登录。

批量端点只接受 mailbox_ids、domain_id 或 all 中的一个选择器,并返回所执行的操作:

{ "data": { "drive_access": "attachments_only", "matched": 24, "updated": 21, "skipped_shared": 3 } }

当一个域名对应一位客户时,应使用 domain_id 选择器。已处于所请求级别的邮箱计入 matched,但不计入 updated,因此可以安全地重复调用。

共享邮箱在单一端点上会以 422 drive_access_not_applicable 被拒绝,在批量端点上则会被跳过并计数:它们没有自己的网页邮箱用户,因此成员以自己的级别打开共享邮箱,存储在共享行上的值不会产生任何影响。

此限制同时适用于 API 和界面。受限邮箱的 Drive 空间不会出现在 GET /api/v1/drive/spaces 中,按 ID 访问其文件会返回 404,也无法为其创建设备同步。

转发地址

GET /api/v1/domains/{id}/forwarding-addresses 返回的不只是列表,因为转发地址的两个属性无法从地址本身看出:

{
  "data": [ { "id": 8, "address": "sales@acme.com", "local_part": "sales",
              "domain_id": 4, "recipients": ["team@example.net"], "is_active": true } ],
  "limits": { "used": 1, "max": 100, "recipients_per_address": 15 },
  "delivery": { "active": true, "requires_plan": "pro",
                "paused_until": null, "paused_reason": null }
}
  • limits.max 按域名计算并取决于套餐:Pro 为 100,Agency 为 300,Nano 或 Starter 可保存但不激活 25 个。
  • delivery.active 表示这些规则此刻是否正在转发邮件。套餐低于 requires_plan 时为 false,设置 paused_until 时也为 false(账户超过了每小时发送速率;请参阅各套餐的发送限制)。规则可以是 is_active: true 但仍不投递,因此在报告转发功能正常之前,请读取 delivery,而不只是 is_active。

在无法投递的套餐上也允许创建并返回 201:规则会被保存,并在升级后开始工作。这与控制面板一致,其中此类规则显示为已保存但未激活。

拒绝会以 422 返回,且 error.code 设置为 validation_error 或 limit_exceeded。原因可能是地址已在域名上使用、收件人与发件人在同一域名(会形成循环)、收件人域名没有有效的 MX,或每个域名的限额已满。

这些端点上的 POST 和 DELETE 需要 Idempotency-Key;PATCH 不需要。

投递历史记录

GET /api/v1/domains/{id}/forwarding-addresses/{addressId}/log 返回近期邮件的实际处理结果,最新事件排在最前:

{
  "data": [
    { "id": 91, "occurred_at": "2026-07-27T09:12:04+00:00", "outcome": "delivered",
      "from": "rfq@northgatesupply.com", "to": "sales@example.net",
      "smtp_code": "2.0.0", "smtp_response": "250 2.0.0 OK" }
  ],
  "address": "sales@acme.com",
  "window": { "retention_days": 30, "max_events": 200 }
}

outcome 可以是 delivered、deferred(临时失败,仍在重试)、failed(收件人的服务器拒绝了邮件)或 blocked。最后一种表示垃圾邮件过滤器在转发之前阻止了邮件,因此它根本没有到达收件人。将 blocked 当作退信会让人错误地调查接收服务器,而问题实际发生在我们的服务器上。

limit(1-200,默认 100)是唯一的参数。窗口取决于套餐的保留期:Agency 为 30 天,其他套餐为 7 天。没有更早的事件可供查询,因为转发事件会被清除。

共享(团队)邮箱

共享邮箱有独立的团队收件箱。can_read是读取,can_send是以此地址发送。打开共享文件夹需要读取,通过Message API从共享收件箱发送需要两项权限。没有共享密码、单独登录或成员角色。

GET /api/v1/mailboxes 和 GET /api/v1/mailboxes/{id} 现在返回 mailbox_type("user" 或 "shared")以及布尔值 is_shared;共享邮箱还包括 shared_member_count。调用成员端点之前,请使用这些字段区分团队收件箱和普通邮箱。

端点 方法 所需范围 功能
/api/v1/mailboxes/{id}/members GET mailboxes:read 列出共享邮箱的成员(每位成员包含:member_mailbox_id、email、can_read、can_send、access(read_send、read_only、send_only))
/api/v1/mailboxes/{id}/members POST mailboxes:write 添加成员,正文为{member_mailbox_id, can_read?, can_send?}。两项权限默认均为true。
/api/v1/mailboxes/{id}/members/{member} PATCH mailboxes:write 修改权限,{can_read?, can_send?, custom_label?}。仅在仅发送访问可用时才能关闭读取。
/api/v1/mailboxes/{id}/members/{member} DELETE mailboxes:write 移除成员;至少一人必须保留读取。
/api/v1/shared-mailboxes POST mailboxes:create 创建共享邮箱,正文 {domain_id, local_part, display_name, member_mailbox_ids[], storage_shared?, storage_mb?}
/api/v1/mailboxes/{id}/convert-to-shared POST mailboxes:write 将现有邮箱转换为共享邮箱,正文 {member_mailbox_ids[]}(轮换旧密码,使其无法再登录;如果后端同步尚未确认,则返回 202 conversion_pending 并自动重试)
/api/v1/mailboxes/{id}/convert-to-regular POST mailboxes:write 将共享邮箱转换回普通邮箱,正文 {password}(删除成员并设置新的登录密码)

转回普通邮箱会移除所有成员。请设置新的网页邮箱密码,再到安全标签页为邮件应用创建应用专用密码。

更改权限时,如果两项都将关闭,可能返回422 no_access_left;请求的读取更改不可用时,返回422 send_only_disabled;最后一名活跃阅读者将失去权限时,返回422 last_reader。要取消所有访问,请使用移除,并在移除最后一名阅读者前为另一名活跃成员授予读取。这些错误还会返回shared_mailbox_id、现有成员的member_id,以及指明修复所需请求的hint。

成员端点复用现有的 mailboxes:read / mailboxes:write 范围。共享邮箱没有单独的范围。

要了解原生邮件应用访问,请为普通成员邮箱调用 GET /api/v1/mailboxes/{member_mailbox_id}/client-setup。其 shared_mailboxes 对象会报告持久的原生就绪状态、以此地址发送的实际就绪状态和原因、Inbox/Sent/Archive/Junk 的确切路径以及允许的操作。can_send 是分配的 以此地址发送 权限,并不能证明 SMTP 当前已就绪。该端点绝不会返回密码。使用共享邮箱 ID 调用它会返回 422 direct_login_unavailable,因为共享地址无法直接进行认证。

shared_mailboxes.items[]仅包含在原生文件夹访问已启用时拥有读取权限的成员。delegated_send_addresses是可用团队发件人地址的独立列表,每项含id、email和display_name,也可能为空。它不授予文件夹访问,也不检查发送是否就绪。这些地址不是Message API身份。White Label也应使用返回的服务器,不要复制平台主机名。

删除成员、更改 can_read / can_send 或将共享邮箱转换为普通邮箱时,如果启用了原生访问,则会同步邮件服务器权限。503 native_access_sync_failed 响应可以重试,并保证成员关系、权限或邮箱类型保持不变,而不是仅部分应用操作。

可用端点

Drive 有单独的参考文档,此处不再重复;请参阅 Drive API 概览。为向后兼容而保留的账户级 SMTP 端点在每个域名的 SMTP 路由下说明,而不作为当前端点列出。

端点 方法 所需范围
/api/v1/domains GET domains:read
/api/v1/domains/{id} GET domains:read
/api/v1/domains/{id}/matching-addresses GET domains:read
/api/v1/domains/{id}/matching-addresses PUT domains:write
/api/v1/domains/{id}/matching-addresses DELETE domains:write
/api/v1/domains/{id}/dns-requirements GET domains:dns:read
/api/v1/domains/{id}/dns-recheck POST domains:dns:recheck
/api/v1/domains/{id}/spam-metrics GET domains:read
/api/v1/domains/{id}/spam-metrics/summary GET domains:read
/api/v1/domains/{id}/deliverability GET domains:read
/api/v1/domains/{id}/bounces GET domains:read
/api/v1/domains/{id}/signature GET domains:read
/api/v1/domains/{id}/forwarding-addresses GET domains:read
/api/v1/domains/{id}/forwarding-addresses/{addressId}/log GET domains:read
/api/v1/dns-checks/{id} GET domains:dns:read
/api/v1/mailboxes GET mailboxes:read
/api/v1/mailboxes POST mailboxes:create
/api/v1/mailboxes/{id} PATCH mailboxes:write
/api/v1/mailboxes/invites POST mailboxes:invites:create
/api/v1/mailboxes/invites:bulk POST mailboxes:invites:create
/api/v1/mailboxes:bulk POST mailboxes:create
/api/v1/mailboxes/{id}/forwarding GET mailboxes:forwarding:read
/api/v1/mailboxes/{id}/forwarding PUT mailboxes:forwarding:write
/api/v1/mailboxes/{id}/rules GET mailboxes:rules:read
/api/v1/mailboxes/{id}/rules POST mailboxes:rules:write
/api/v1/mailboxes/{id}/rules/{ruleId} GET mailboxes:rules:read
/api/v1/mailboxes/{id}/rules/{ruleId} PUT mailboxes:rules:write
/api/v1/mailboxes/{id}/rules/{ruleId} DELETE mailboxes:rules:write
/api/v1/mailboxes/{id}/rules/reorder PATCH mailboxes:rules:write
/api/v1/mailboxes/{id}/auto-reply GET mailboxes:auto-reply:read
/api/v1/mailboxes/{id}/auto-reply PUT mailboxes:auto-reply:write
/api/v1/mailboxes/{id}/sieve GET mailboxes:rules:read
/api/v1/mailboxes/{id}/sieve PUT mailboxes:rules:write
/api/v1/mailboxes/{id}:delete-intent POST mailboxes:delete
/api/v1/delete-intents/{id}:confirm POST mailboxes:delete
/api/v1/me GET (任何有效的操作令牌)
/api/v1/mailboxes/{id}/message-tokens POST mailboxes:message-tokens:manage
/api/v1/mailboxes/{id}/message-tokens GET mailboxes:message-tokens:manage
/api/v1/message-tokens/{id} DELETE mailboxes:message-tokens:manage
/api/v1/message-tokens/{id} PATCH mailboxes:message-tokens:manage
/api/v1/messages GET messages:read (消息令牌)
/api/v1/messages/{uid} GET messages:read (消息令牌)
/api/v1/messages/{uid} PATCH messages:write (消息令牌)
/api/v1/messages/send POST messages:send (消息令牌)
/api/v1/messages/deliveries/{requestId} GET messages:read (消息令牌)
/api/v1/messages/sending-limits GET messages:read (消息令牌)
/api/v1/messages/_ping GET messages:read (消息令牌,诊断)
/api/v1/messages/{uid}/attachments/{index} GET messages:read (消息令牌)
/api/v1/messages/{uid}/attachments GET messages:read (消息令牌)
/api/v1/messages/{uid}/raw GET messages:read (消息令牌;返回 raw_base64, encoding, content_type, size_bytes)
/api/v1/messages/folders POST messages:write (消息令牌)
/api/v1/messages/folders/{path} PATCH messages:write (消息令牌)
/api/v1/messages/folders/{path} DELETE messages:write (消息令牌)
/api/v1/messages/{uid}:spam POST messages:write (消息令牌)
/api/v1/messages/{uid}:ham POST messages:write (消息令牌)
/api/v1/messages/bulk POST messages:write (消息令牌)
/api/v1/messages/folders:empty POST messages:write (消息令牌)
/api/v1/messages/drafts POST messages:write (消息令牌);返回 uid + uidvalidity
/api/v1/messages/drafts/{uid} PUT messages:write (消息令牌);需要草稿的 uidvalidity
/api/v1/messages/scheduled POST messages:send (消息令牌)
/api/v1/messages/scheduled GET messages:read (消息令牌)
/api/v1/messages/scheduled/{id} PATCH messages:send (消息令牌)
/api/v1/messages/scheduled/{id} DELETE messages:send (消息令牌)
/api/v1/messages/contacts GET messages:read (消息令牌)
/api/v1/messages/contacts POST messages:write (消息令牌)
/api/v1/messages/contacts/{id} PATCH messages:write (消息令牌)
/api/v1/messages/contacts/{id} DELETE messages:write (消息令牌)
/api/v1/messages/contacts/import POST messages:write (消息令牌)
/api/v1/messages/contacts/export GET messages:read (消息令牌)
/api/v1/messages/contact-groups GET messages:read (消息令牌)
/api/v1/messages/contact-groups/{id}/members GET messages:read (消息令牌)
/api/v1/messages/external-accounts GET messages:read (消息令牌)
/api/v1/messages/external-accounts POST messages:write (消息令牌)
/api/v1/messages/external-accounts/{id} PATCH messages:write (消息令牌)
/api/v1/messages/external-accounts/{id} DELETE messages:write (消息令牌)
/api/v1/messages/external-accounts/detect POST messages:read (消息令牌)
/api/v1/messages/external-accounts/test POST messages:write (消息令牌)
/api/v1/messages/external-accounts/{id}/test POST messages:write (消息令牌)
/api/v1/messages/_me GET 任何消息令牌(自省)
/api/v1/messages/calendar/events GET messages:read (消息令牌)
/api/v1/messages/calendar/events POST messages:write (消息令牌)
/api/v1/messages/calendar/events/{id} PATCH messages:write (消息令牌)
/api/v1/messages/calendar/events/{id} DELETE messages:write (消息令牌)
/api/v1/messages/{uid}/reply GET messages:read (消息令牌)
/api/v1/messages/{uid}/reply-all GET messages:read (消息令牌)
/api/v1/messages/{uid}/forward GET messages:read (消息令牌)
/api/v1/messages/contact-groups POST messages:write (消息令牌)
/api/v1/messages/contact-groups/{id} PATCH messages:write (消息令牌)
/api/v1/messages/contact-groups/{id} DELETE messages:write (消息令牌)
/api/v1/messages/contact-groups/{id}/members POST messages:write (消息令牌)
/api/v1/messages/contact-groups/{id}/members DELETE messages:write (消息令牌)
/api/v1/messages/identities GET messages:read (消息令牌)
/api/v1/messages/identities POST messages:write (消息令牌)
/api/v1/messages/identities/reply-policy PATCH messages:write (消息令牌)
/api/v1/messages/identities/{id} PATCH messages:write (消息令牌)
/api/v1/messages/identities/{id} DELETE messages:write (消息令牌)
/api/v1/messages/templates GET messages:read (消息令牌)
/api/v1/messages/templates POST messages:write (消息令牌)
/api/v1/messages/templates/{id} PATCH messages:write (消息令牌)
/api/v1/messages/templates/{id} DELETE messages:write (消息令牌)
/api/v1/messages/blocked-senders GET messages:read (消息令牌)
/api/v1/messages/blocked-senders POST messages:write (消息令牌)
/api/v1/messages/blocked-senders/{id} DELETE messages:write (消息令牌)
/api/v1/mailboxes/{id}/enable-imap POST mailboxes:write (操作令牌)
/api/v1/migrations/test-connection POST migrations:write
/api/v1/migrations GET migrations:read
/api/v1/migrations/{id} GET migrations:read
/api/v1/migrations POST migrations:write
/api/v1/migrations/{id}:cancel POST migrations:write
/api/v1/migrations/{id}:retry POST migrations:write
/api/v1/migrations/{id} DELETE migrations:write
/api/v1/migrations/bulk/preview POST migrations:write
/api/v1/migrations/bulk POST migrations:write
/api/v1/migrations/bulk GET migrations:read
/api/v1/migrations/bulk/{batch} GET migrations:read
/api/v1/migrations/bulk/{batch}:cancel POST migrations:write
/api/v1/migrations/bulk/{batch}:retry POST migrations:write
/api/v1/migrations/bulk/{batch}:resume POST migrations:write
/api/v1/migrations/bulk/{batch} DELETE migrations:write
/api/v1/migrations/bulk/{batch}/jobs/{job}/password PATCH migrations:write
/api/v1/account GET account:read
/api/v1/account PATCH mailboxes:write (仅限所有者,令牌不受资源限制; MCP: update_account)
/api/v1/sending-limits GET account:read
/api/v1/billing/status GET billing:read
/api/v1/billing/invoices GET billing:read
/api/v1/domains POST domains:create
/api/v1/domains/{id} DELETE domains:delete
/api/v1/domains/{id}/catch-all PATCH domains:write
/api/v1/domains/{id}/mail-hosting PATCH domains:write
/api/v1/domains/{id}/forwarding-addresses POST domains:write
/api/v1/domains/{id}/forwarding-addresses/{addressId} PATCH domains:write
/api/v1/domains/{id}/forwarding-addresses/{addressId} DELETE domains:write
/api/v1/domains/{id}/dkim:retry POST domains:write
/api/v1/domains/{id}/note PATCH domains:write
/api/v1/domains/{id}/signature PATCH domains:write
/api/v1/domains/{id}/branding GET domains:read
/api/v1/domains/{id}/branding PATCH domains:write
/api/v1/domains/{id}/branding/logo/{slot} PUT domains:write
/api/v1/domains/{id}/branding/logo/{slot} DELETE domains:write
/api/v1/domains/{id}/branding/verify-dns POST domains:write
/api/v1/domains/{id}/branding/preview POST domains:write
/api/v1/domains/{id}/branding DELETE domains:write
/api/v1/domains:bulk-add POST domains:create
/api/v1/mailboxes/{id} GET mailboxes:read
/api/v1/mailboxes/{id}/client-setup GET mailboxes:read
/api/v1/mailboxes/{id}/apple-mail-profile GET mailboxes:read
/api/v1/mailboxes/{id}/bounces GET mailboxes:read
/api/v1/mailboxes/{id}/password POST mailboxes:write
/api/v1/mailboxes/{id}/app-passwords GET mailboxes:read
/api/v1/mailboxes/{id}/app-passwords POST mailboxes:write
/api/v1/mailboxes/{id}/app-passwords/{appPasswordId}:rotate POST mailboxes:write
/api/v1/mailboxes/{id}/app-passwords/{appPasswordId} DELETE mailboxes:write
/api/v1/mailboxes/{id}:client-auth-mode POST mailboxes:write
/api/v1/mailboxes:client-auth-mode POST mailboxes:write
/api/v1/mailboxes/{id}/note PATCH mailboxes:write
/api/v1/mailboxes/{id}:pause POST mailboxes:write
/api/v1/mailboxes/{id}:restore POST mailboxes:delete
/api/v1/mailboxes/{id}:resume POST mailboxes:write
/api/v1/mailboxes/{id}:suspend-login POST mailboxes:write
/api/v1/mailboxes/{id}:resume-login POST mailboxes:write
/api/v1/mailboxes:login-access POST mailboxes:write
/api/v1/mailboxes:drive-access POST mailboxes:write
/api/v1/mailboxes/{id}/members GET mailboxes:read
/api/v1/mailboxes/{id}/members POST mailboxes:write
/api/v1/mailboxes/{id}/members/{member} PATCH mailboxes:write
/api/v1/mailboxes/{id}/members/{member} DELETE mailboxes:write
/api/v1/shared-mailboxes POST mailboxes:create
/api/v1/mailboxes/{id}/convert-to-shared POST mailboxes:write
/api/v1/mailboxes/{id}/convert-to-regular POST mailboxes:write
/api/v1/tickets GET tickets:read
/api/v1/tickets/{id} GET tickets:read
/api/v1/tickets/{id}/messages GET tickets:read
/api/v1/tickets POST tickets:write
/api/v1/tickets/{id}:mark-seen POST tickets:write
/api/v1/tickets/{id}/reply POST tickets:write
/api/v1/tickets/{id}:close POST tickets:write
/api/v1/domains/{id}/smtp GET smtp:read
/api/v1/domains/{id}/smtp PUT smtp:write
/api/v1/domains/{id}/smtp/profiles GET smtp:read
/api/v1/domains/{id}/smtp/profiles POST smtp:write
/api/v1/domains/{id}/smtp/profiles/{connectionId} PUT smtp:write
/api/v1/domains/{id}/smtp/profiles/{connectionId} DELETE smtp:write
/api/v1/domains/{id}/smtp:test POST smtp:write
/api/v1/domains/{id}/smtp:test-status/{jobId} GET smtp:read
/api/v1/smtp/default GET smtp:read
/api/v1/smtp/default PUT smtp:write
/api/v1/smtp (旧版,向后兼容) GET smtp:read
/api/v1/smtp (旧版,向后兼容) PUT smtp:write
/api/v1/smtp/{id} (旧版,向后兼容) DELETE smtp:write
/api/v1/smtp:test (旧版,向后兼容) POST smtp:write
/api/v1/smtp:test-status/{jobId} (旧版,向后兼容) GET smtp:read
/api/v1/messages/{uid} DELETE messages:write (消息令牌)
/api/v1/messages/{uid}:move POST messages:write (消息令牌)
/api/v1/messages/folders GET messages:read (消息令牌)
/api/v1/mailboxes/{id}/aliases GET mailboxes:read
/api/v1/mailboxes/{id}/aliases POST mailboxes:write
/api/v1/mailboxes/{id}/aliases/{aliasId} PATCH mailboxes:write
/api/v1/mailboxes/{id}/aliases/{aliasId} DELETE mailboxes:write
/api/v1/verify POST verify:write
/api/v1/verify/bulk POST verify:write
/api/v1/verify/bulk/{jobId} GET verify:read
/api/v1/verify/bulk/{jobId}/download GET verify:read
/api/v1/verify/credits GET verify:read
/api/v1/verify/bulk GET verify:read
/api/v1/verify/bulk/{jobId}/cancel POST verify:write
/api/v1/verify/bulk/{jobId} DELETE verify:write
/api/v1/cloudflare/validate-token POST cloudflare:read
/api/v1/cloudflare/zones POST cloudflare:read
/api/v1/cloudflare/connect POST cloudflare:write
/api/v1/cloudflare/preview POST cloudflare:read
/api/v1/cloudflare/apply POST cloudflare:write
/api/v1/cloudflare/tokens GET cloudflare:read
/api/v1/cloudflare/tokens/{id} DELETE cloudflare:delete

Cloudflare 端点遵循与控制面板相同的流程:验证令牌、列出区域、连接域名、预览 DNS 更改,然后应用更改。/cloudflare/preview 和 /cloudflare/apply 都接受两个可选的每域名控制项:

  • included_records 是允许修改的记录列表,以域名 ID 为键:{ "123": ["mx_primary", "spf_record"] }。省略的记录会被跳过,因此可以只应用 MX 和 SPF,稍后再处理 DKIM。省略此字段即可应用所有记录。
  • confirmed_conflicts:当预览标记已存在但值不同的记录时,请在此列出其记录 ID(使用相同的 { domain_id: [record_ids] } 结构),以授权替换。

记录 ID(mx_primary、spf_record、dkim_primary、dmarc_main、…)直接来自预览响应,因此典型代理会先调用预览,然后将需要的 ID 传回 apply:

POST /api/v1/cloudflare/apply
{
  "domain_ids": [123],
  "included_records": { "123": ["mx_primary", "spf_record"] },
  "confirmed_conflicts": { "123": ["dmarc_main"] }
}

每个域名的 SMTP 路由和账户默认值

SMTP 按域名配置。每个域名可选择三种路由之一:平台托管发送、已保存的 SMTP 配置文件(你自己的提供商,可跨域名复用)或“未配置”。一个账户级默认值决定新域名最初使用哪种路由。

每域名端点(smtp:read / smtp:write):

端点 方法 功能
/api/v1/domains/{id}/smtp GET 当前路由:smtp_mode、effective_smtp_mode、profile、effective_profile
/api/v1/domains/{id}/smtp PUT 设置路由,正文 {smtp_mode: platform|profile|not_configured|inherit, smtp_connection_id?, set_account_default?, apply_to_all?}
/api/v1/domains/{id}/smtp/profiles GET 列出账户已保存的 SMTP 配置文件
/api/v1/domains/{id}/smtp/profiles/{connectionId}/usage GET 列出使用配置文件的确切域名和用于以此地址发送的地址(不含凭据)
/api/v1/domains/{id}/smtp/profiles POST 创建配置文件并用于此域名
/api/v1/domains/{id}/smtp/profiles/{connectionId} PUT 更新配置文件(影响使用它的每个域名)
/api/v1/domains/{id}/smtp/profiles/{connectionId} DELETE 删除配置文件(使用它的域名会重新分配到账户默认值)
/api/v1/domains/{id}/smtp:test POST 测试路由,返回 {job_id, poll_url}
/api/v1/domains/{id}/smtp:test-status/{jobId} GET 查询测试任务

关于路由正文的几点说明:

  • smtp_mode=platform 选择托管发送;smtp_mode=profile 需要 smtp_connection_id;not_configured 清除路由。
  • smtp_mode=inherit 使域名实时跟随账户默认值:默认值改变时,该域名也随之改变。网页界面始终写入具体路由,但后端仍支持 inherit,因此 GET 返回 effective_smtp_mode,显示 inherit 当前解析到的值。
  • set_account_default: true 相当于控制面板中的 设为账户默认 开关(新域名从此路由开始)。apply_to_all: true 相当于 应用到所有域 按钮(一次性将每个域名切换到此路由)。

账户级默认端点(smtp:read / smtp:write):

端点 方法 功能
/api/v1/smtp/default GET 返回 default_smtp_mode(设置前为 null)、effective_default_smtp_mode(未设置时使用的套餐基准)、default_smtp_connection_id 和 profile
/api/v1/smtp/default PUT 设置默认值,正文 {smtp_mode: platform|profile|not_configured, smtp_connection_id?, apply_to_all?}

删除作为账户默认值的配置文件会将默认值重置为套餐基准。

旧版端点。账户级 GET/PUT /api/v1/smtp(以及 DELETE /api/v1/smtp/{id}、POST /api/v1/smtp:test、GET /api/v1/smtp:test-status/{jobId})为向后兼容而保留,但不再控制每域名路由:请使用上述每域名端点和 /smtp/default。旧版 MCP 工具 get_smtp_config / update_smtp_config 也因此被弃用。

White Label 品牌、客户和团队访问

品牌通过 branding:read / branding:write 按域名配置。域名可以使用自己的品牌(mode=custom)、继承账户默认值(mode=inherit)或关闭品牌。需要有效的 White Label 试用或付费附加组件。取消后,所有者在显示的宽限期内保留只读恢复权限。读取域名的 dns_records 并准确发布返回的记录。不要根据示例推导主机名或 CNAME 目标。

端点 方法 功能
/api/v1/domains/{id}/branding GET 读取品牌:mode、white_label_addon_active、brand、hosts、要创建的 dns_records、cname_target 和 mail_zone
/api/v1/domains/{id}/branding PATCH 部分合并更新:mode、name、primary_color/accent_color、dashboard_enabled/dashboard_label、webmail_enabled/webmail_label、mail_zone_enabled、support_email、support_url、sender_email、scope
/api/v1/domains/{id}/branding/logo/{slot} PUT 上传 base64 徽标(slot = light|dark|favicon;PNG/JPG,favicon 可用 ICO,≤1 MB,不支持 SVG)。默认 scope=domain 需要 custom 模式;在 inherit 域名上显式使用 scope=account_default 需要不受限制的令牌。
/api/v1/domains/{id}/branding/logo/{slot} DELETE 删除徽标槽位。使用相同的域名/账户默认范围规则;DELETE 以查询参数接收 scope。
/api/v1/domains/{id}/branding/verify-dns POST 将品牌主机和品牌邮件区域的 DNS 验证加入队列
/api/v1/domains/{id}/branding/preview POST 创建短期预览 URL(未设置品牌时返回 422 no_brand)
/api/v1/domains/{id}/branding?scope=domain|all DELETE 清除此域名或整个账户的品牌

PATCH 是部分合并,因此省略的字段会保留。如果品牌当前关闭,请传递 mode 以重新启用。自定义 sender_email 必须位于具有已验证 DKIM 密钥的域名上。mail_zone_enabled 在品牌自己的域名下提供邮件应用和 DAV 同步。它属于品牌而非单个域名,因此需要 mode=custom 或 scope=account_default;inherit 域名返回 422 inherited_brand。读取 mail_zone.dns_status、mail_zone.client_hosts_status、mail_zone.records、mail_zone.dav_url 和 mail_zone.dav_ready 以跟踪配置,并且只使用已就绪的 DAV 地址。完整代理工作流程请参阅 White Label 品牌 API 和 MCP 指南。

账户级 White Label 界面在 /api/v1/white-label 下增加 13 条路由:状态和设置进度、实时访问目录、成员列表和生命周期操作、账户活动,以及每位成员的操作和登录历史记录。它使用 members:read、members:write 和 activity:read。访问权限始终是账户权益、用户当前成员资格、凭据授权和任何域名限制的交集。路由表和状态转换请参阅通过 API 和 MCP 管理 White Label 团队。

OpenAPI 规范位于 /api/openapi.json,可导入 Postman、Insomnia 或代码生成器。

快速修复

  • **401 “unauthenticated”:**检查是否存在 Authorization: Bearer <token> 标头,并确认令牌未被撤销或过期。
  • **403 “plan_api_disabled”:**请求的范围不在你的套餐中。Nano 包含 Email Verifier(购买 Drive Storage Add-on 后也包含 Drive)。其余 API 需要升级到 Starter 或更高套餐。
  • **403 “token_scope_blocked_by_plan”:**令牌包含当前套餐不可用的范围。撤销该令牌,并使用允许的范围创建新令牌。
  • **403 “scope_blocked_by_entitlement”:**由于附加组件未激活,或操作是在宽限期内执行写入,已保存的 White Label 授权不可用。重新激活 White Label,然后重新签发或授权凭据。
  • **403 “scope_blocked_by_membership”:**当前成员角色比请求的操作范围更窄。请所有者更改角色;仅重新授权无法扩大成员资格。
  • **422 “missing_idempotency_key”:**向端点参考中指定的写入操作添加 Idempotency-Key 标头。
  • **403 “mailbox_sending_paused”:**该邮箱的出站邮件不再像其所有者发送的邮件,通常是密码落入他人手中,因此已停止发送。读取、列出和其他所有端点仍可使用;只有发送被拒绝,重试不会解除限制。需要更改邮箱密码,之后由支持团队重新启用发送。请参阅为什么我无法发送电子邮件?。
  • **429 速率受限:**等待 Retry-After 标头中指定的时长后再重试。达到按邮箱计算的每日 API 上限时,也会返回 rate_limited,但此时 retryable 为 false、dimension 为 api_mailbox_daily,并附带 resets_at 时间:提前重试不会成功,请等到该时间。
  • **429 “sending_limit_exceeded”:**某项发送额度已用完。dimension 说明是哪一项,resets_at 说明何时重置。在此之前重试不可能成功,因此 retryable 为 false。GET /api/v1/messages/sending-limits 的 remaining_today 表示该邮箱今天还能发送给多少位收件人。当最低的额度是账户每日总额时,limit_today 为 null,在该总额用完之前 remaining_today 也为 null(用完后为 0);操作令牌可通过 GET /api/v1/sending-limits 查看该总额。如果 dimension 为 recipients_per_message,请把邮件拆分成几封较小的邮件。请参阅各套餐的发送限制。

发送电子邮件:正文、标头和送达率

POST /api/v1/messages/send 接受请求结构 {to, subject, body: {text, html}, attachments, reply_to_message_id, headers}。

  • body.text 和 body.html 都是可选的,但至少需要一个。如果只提供 body.text,我们会使用 <p> 段落自动生成 HTML 替代版本(空行分隔段落;单个换行变为 <br>),使邮件在所有现代客户端中正常显示。如需等宽文本,请在 body.html 中发送字面值 <pre>...</pre>。
  • headers 是用户提供的可选出站标头对象。允许列表包括 List-Unsubscribe、List-Unsubscribe-Post、Reply-To 和任何自定义 X-* 跟踪标头。其他名称(From、Subject、Message-Id、Authentication-Results 等)由平台管理,并以 422 拒绝。包含 CR/LF 的值也会被拒绝(防止标头注入)。根据 RFC 2822,每个值最多 998 个字符。
  • 对于批量发送或自动化场景,请参阅批量发件人送达率标头部分,了解 List-Unsubscribe 设置和账户级 auto_list_unsubscribe 开关。

202 表示邮件已被接受,但尚未发送。邮件离开队列时会再次检查发送额度,因此请使用 202 响应中的 request_id,通过 GET /api/v1/messages/deliveries/{request_id} 查看结果。同一邮箱的任何消息令牌都可以查询,不限于发送该邮件的令牌;未知的 request_id 会返回 404。如果邮件被某项限制拦下,status 为 failed,failure 会写明是哪项限制(dimension)以及何时重置(resets_at)。发送失败的邮件可以稍后用相同内容再次发送。如果你自己提供 X-Request-Id,请换用新的值,旧值只会返回原来的投递。定时邮件如果在发送时间达到限制,会以 limit_reached 状态保留 7 天:可用 GET /api/v1/messages/scheduled?status=limit_reached 列出这些邮件,用 PATCH /api/v1/messages/scheduled/{id} 设置新的 scheduled_for 以便稍后发送,或用 DELETE 删除。

相关文章

跳转到延续此工作流的邻近指南。

登录 TrekMail

访问您的控制面板、邮箱和 DNS。

12 个字符 两次密码一致

重置邮件已发送

如果该邮箱对应已有账户,我们已发送密码重置说明。

继续即表示您同意 TrekMail 的 服务条款 和 隐私政策.