API 文档入口

生产邮箱资产导入、GPT/OpenAI 注册路线和多平台复用路线已拆开,接入时不要混用。

返回控制台

先选路线

GPT/OpenAI 注册路线

最开始的 GPT 注册机链路。用 safe/new 邮箱池,领取后读验证码,并可上报 GPT 账号仓库。

  • 领取邮箱:POST /api/mailboxes/reserve
  • 读验证码:GET /api/mail/code
  • 收不到码隔离:POST /api/mailboxes/report-code
  • GPT 账号上报:POST /api/gpt-accounts/report

打开 GPT 路线文档 GPT spec

多平台复用路线

Cursor/Claude/Poe 等非 OpenAI 平台使用。必须显式传 platform,通过 lease_token 防串号。

  • 平台列表:GET /api/reuse/v1/platforms
  • 状态汇总:GET /api/reuse/v1/summary
  • 按平台预留:POST /api/reuse/v1/mail/reserve
  • 确认/释放:mark-used / release

打开多平台文档 多平台 spec

生产邮箱资产自动导入

此路线只导入可读邮箱资产到 API Key 所属用户的邮箱池,不写入 GPT 账号仓库。

POST /api/accounts/import
Authorization: Bearer mak_xxx
Content-Type: application/json

{
  "format": "gmail_api_v1",
  "text": "user@gmail.com----https://your-approved-receiver.example/show/abc----production-batch",
  "auto_scan": false,
  "limit": 20,
  "concurrency": 3
}
GET /api/export?pool_key=icloud_api&include_used=true
Authorization: Bearer mak_xxx

POST /api/accounts/export-selected
Authorization: Bearer mak_xxx
Content-Type: application/json

{"ids":[101,102,103]}

自有域名邮箱长期接码地址

域名邮箱导出行中的第二段就是可视化接码 URL,默认每 5 秒自动刷新并从 IMAP 重新取最新邮件,浏览器页面会显示最新一封完整邮件。其他注册项目需要结构化数据时,把路径 /mail/receiver 改为 /api/mail/receiver,按 3-5 秒轮询同一 URL;服务每次收到请求都会刷新收件箱后返回,不需要 GPTMail API Key。JSON 的 messages[] 每项包含 subject、from、body、body_text、folder 和 received_at。

性能配置:GPTMail 域名邮箱默认通过 Docker 内部 host.docker.internal:993 连接 Stalwart,TLS SNI 仍使用每个域名的 mail.<domain>。内部连接失败会自动回退到已配置的公网 IMAP 主机,因此不会因内部网络异常导致旧邮箱无法接码。新增域名不需要改代码,只需完成 DNS、证书、Catch-all 和 GPTMail 域名配置。

GET https://gptmail.passkissyou.online/api/mail/receiver?email=xxx%40wenas.online&receiver_token=...&domain=wenas.online&folders=inbox%2Cjunk&limit=20

{
  "ok": true,
  "email": "xxx@wenas.online",
  "count": 1,
  "messages": [{"subject":"Your verification code","from":"noreply@example.com","body":"完整邮件正文(链接保留)","folder":"inbox"}]
}

两个导出接口均返回 UTF-8 文本文件。API Key 仅能导出其所属用户、且已授权邮箱池中的原始导入格式;不会返回 /api/mail/code 临时租约链接。

域名邮箱领取仍使用兼容的 POST /api/mailboxes/reserve,传入对应的 pool_key(例如 domain_wenasmail_com)即可;旧客户端不传该字段时,原有邮箱池行为不变。

查看机器规格

域名邮箱配置(管理员专用)

这里只允许管理员新增域名、配置 Catch-all 和生成域名邮箱,不是注册机对接接口。

绿色 = 固定配置,所有域名通常不变红色 = 变动配置,新增域名时必须替换
DNS 配置示例截图
图 1:DNS 红色换成新域名,绿色通常照抄;点击图片可放大。
Stalwart Catch-all 配置示例截图
图 2:Stalwart 创建一个真实 Catch-all 账号和 @域名别名;点击图片可放大。
GPTMail Catch-all 配置示例截图
图 3:GPTMail 把同一个 Catch-all IMAP 凭证填入这里;点击图片可放大。

红色字段怎么改:逐项输入规则

下面是图片中所有红色内容的替换规则。不要凭感觉填写;按“输入格式”和“来源”操作。

位置红色字段应该输入什么示例 / 来源
DNS MXmail.example.com你的新域名邮件主机,必须是完整 FQDN,不带 https://mail.wenasmail.com
DNS TXT验证值不能自己编写;从 GPTMail 域名卡片复制当前值mdv_...
Stalwart 登录名mailops-example-catchall每域名独立、建议小写字母/数字/短横线,不要带 @mailops-wenasmail-catchall
Stalwart 账号邮箱...@example.com必须是“登录名 + @新域名”mailops-wenasmail-catchall@wenasmail.com
Stalwart 别名@example.com必须保留 @,后面只写新域名;不能写 *@@wenasmail.com
Stalwart 密码随机密码为该 Catch-all 账号生成独立随机密码;不要使用管理员密码同一个密码稍后填入 GPTMail
GPTMail 域名example.com只填域名,不带 https://、路径或邮箱前缀wenasmail.com
GPTMail 邮件主机mail.example.com必须与 DNS MX 值完全一致mail.wenasmail.com
GPTMail IMAP 用户名/密码Catch-all 凭证填写 Stalwart 刚创建的同一账号和密码mailopscatchall + 对应密码
生成数量1000整数,范围 1-5000;只是逻辑地址库存数量库存不足时再生成,不改 Stalwart

新增域名四步

  1. 在域名 DNS 平台添加 A、MX、TXT;A 和 MX 指向邮件主机。
  2. 在 Stalwart 创建域名对象和独立 Catch-all 账号,并添加 @domain.com 别名。
  3. 为 mail.domain.com 配置 TLS 证书,确认 IMAPS 993 登录成功。
  4. 在 GPTMail“域名邮箱”中添加域名、验证 DNS、填写 Catch-all IMAP,然后生成邮箱。

生成与领取

生成的是 Catch-all 下的逻辑地址,不需要在 Stalwart 为每个地址创建真实账号。

pool_key = domain_<规范化域名>
category = new
POST /api/mailboxes/reserve
{
  "pool_key": "domain_wenasmail_com",
  "category": "new",
  "consume": false,
  "lease_seconds": 1800
}

1. DNS 平台:逐条填写示例

配置位置:你的域名注册商 / DNS 控制台

作用:让互联网知道邮件投递到哪台服务器。下面以新域名 example.com 为例;新增域名时只替换红色内容。不要开启代理/CDN,邮件 A 记录必须直连服务器。

主机名类型记录值优先级TTL
mailA103.73.161.214-600
@MXmail.example.com10600
@TXTv=spf1 mx ~all-600
_mailops-verificationTXT复制 GPTMail 页面生成的验证值-600

DNS 生效后检查:mail.example.com 的 A、example.com 的 MX、_mailops-verification.example.com 的 TXT。只收件时 SPF/DKIM/DMARC 不影响 MX 收件;未来发信再补 DKIM/DMARC。

2. Stalwart:页面字段和 REST 示例

第一步必须先创建域名对象:在 Stalwart 中先创建 wenas.online,类型选择 domain。域名对象不存在时,直接创建 Catch-all 账号会报“wenas.online 未找到”。

配置位置:https://admin.passkissyou.online → Stalwart 管理后台 → 域名 / Principal / 账户

作用:创建一个真实 Catch-all 收件账号。只创建这个汇总账号,不要为 GPTMail 生成的每个逻辑邮箱逐个建账号。

页面顺序:先进入域名 / Principal 列表创建 wenas.online 域名对象;确认列表中出现域名后,再创建 individual 账号。

字段填写示例
登录名mailops-example-catchall

自己生成,每个域名最好不同。

名称GPTMail example.com catch-all

仅用于后台识别。

电子邮件mailops-example-catchall@example.com

Catch-all 账号自己的真实邮箱。

别名@example.com

关键字段,表示接收该域名所有未匹配地址。

角色user
密码每个域名独立随机密码

之后原样填入 GPTMail Catch-all IMAP 密码。

配置位置:Stalwart REST API;页面操作和 REST 操作二选一,不要重复创建。

作用:如果页面找不到对应入口,可以用下面的请求创建。$STALWART_AUTH 只在管理员机器临时环境中使用,不要写入注册项目。

旧版 Stalwart 0.15 REST 等价请求:必须先执行域名请求成功,再执行账号请求。

curl -sk -u "$STALWART_AUTH" \
  -H 'Content-Type: application/json' \
  -d '{"type":"domain","name":"wenas.online"}' \
  https://admin.passkissyou.online/api/principal

# 上一步成功后,才执行下面的账号请求

curl -sk -u "$STALWART_AUTH" \
  -H 'Content-Type: application/json' \
  -d '{
    "type":"individual",
    "name":"mailops-wenas-online",
    "description":"GPTMail wenas.online catch-all",
    "secrets":["生成的随机密码"],
    "emails":["mailops-wenas-online@wenas.online","@wenas.online"],
    "roles":["user"]
  }' https://admin.passkissyou.online/api/principal

如果页面中“租户/地理位置”为空,收件不受影响。关键是域名对象、账号邮箱、@example.com 别名和可登录密码。

3. GPTMail:按页面顺序填写

配置位置:GPTMail 控制台 → 左侧“域名邮箱” → 新增域名 / 域名卡片

作用:把 DNS 和 Stalwart 的收件能力绑定到 GPTMail 的独立邮箱池。只有状态全部 verified,后续项目才能领取。

  1. 打开“域名邮箱” → 新增域名:域名填 example.com,邮件主机填 mail.example.com,保存。
  2. 复制 GPTMail 生成的 _mailops-verification TXT 值,回 DNS 平台保存;点击“验证 DNS”,状态必须是 verified。
  3. Catch-all 开关打开;IMAP 主机填 mail.example.com,端口 993,SSL 打开;用户名填 mailops-example-catchall,密码填刚才 Stalwart 账号密码;保存。
  4. 看到 Catch-all 和 receiver 状态均为 verified 后,生成数量,例如 1000,字符集选“小写字母 + 数字”。
  5. 生成后使用该域名自动生成的 domain_example_com pool_key 对接注册机。
POST /api/managed-domains/{id}/verify
POST /api/managed-domains/{id}/catchall
{
  "enabled": true,
  "imap_host": "mail.example.com",
  "imap_port": 993,
  "imap_username": "mailops-example-catchall",
  "imap_password": "同一个 Catch-all 密码",
  "imap_ssl": true
}
POST /api/managed-domains/{id}/generate
{"count":1000,"prefix_length":10,"prefix_charset":"lower_alnum"}

4. 状态不通过时先看这里

状态/错误检查位置
mail host A record is missingDNS 的 mail A 记录是否指向 103.73.161.214
MX record does not point...MX 值必须是 mail.example.com,优先级一般填 10
domain verification TXT record is missingTXT 主机名必须是 _mailops-verification,值必须从当前 GPTMail 域名卡片复制
catch-all IMAP verification failedStalwart 账号密码、别名 @example.com、993/SSL、防火墙和 TLS 证书
no_available配置正常但库存用完;回 GPTMail 生成更多,不要在 Stalwart 逐个建逻辑地址
配置项固定规则每个域名不同的值
DNS需要 A、MX、GPTMail 验证 TXT域名、邮件主机、验证 TXT 值、DNS 平台
Stalwart域名对象 + Catch-all 别名 @域名域名对象、Catch-all 用户名、密码、别名
IMAPSSL 开启,端口 993IMAP 主机、Catch-all 登录凭证
TLS证书 SAN 必须覆盖邮件主机mail.domain.com 证书和续期文件
GPTMail验证通过后才可生成和领取域名记录、Catch-all IMAP、自动生成的 domain_* pool_key

固定项不要改:IMAPS 端口 993、SSL、Catch-all 逻辑、状态要求。红色项每新增一个域名都要换成该域名自己的值。新增域名不需要改 Outlook、iCloud、Gmail 或多平台复用配置。

同一域名的历史前缀永久占用,删除后不会复用;不同域名可使用同名此前缀。

关键边界

控制台顶部的邮箱池选择会同时作用于概览统计、邮箱列表和复检任务。对接扫描接口时传同一个 pool_key,例如 icloud_api、gmail_api 或 outlook_oauth,即可保证任务不会跨池扫描。

项目GPT/OpenAI 路线多平台路线
主要用途OpenAI/GPT 注册机领邮箱和读码Cursor/Claude/Poe 等平台复用已有健康邮箱
领取接口/api/mailboxes/reserve/api/reuse/v1/mail/reserve
平台参数不需要 platform必须显式传 platform
状态语义accounts.used 是 GPT 旧链路已用mailbox_platform_usages 记录各平台使用历史
防重复领取时直接把邮箱移出 safe 池同平台 reserved/success 不再重复发
禁止事项不要接 /api/reuse/v1/*不要用 GET /api/mailboxes 分配邮箱

兼容保留:/api-spec.json 仍是合并规格,给旧工具兼容用;新接入建议直接使用上面的两份独立 spec。

控制台查看 category=待确认(或 status=review)时会同时返回已用和未用的人工复核邮箱,确保分类数字与列表一致。

控制台扫描可调用 POST /api/scan/stop 协作停止:停止后不再派发新邮箱,已经开始的收信请求结束后会显示停止结果。

iCloud URL 收信邮箱扫描会同时检查收件箱和垃圾箱,并保留已缓存的验证码证据,不会被后续欢迎邮件覆盖;支持中文、英文和日文的 ChatGPT/OpenAI 验证码提示,命中 6 位验证码会标记为已用。

放大的配置示意图