API 文档

给注册机、多线程脚本和外部服务调用的邮箱池接口。

返回控制台

AI 快速接入

把下面这段直接给 AI 或自动化脚本即可。它包含最小配置、固定调用顺序和禁止事项。

你要接入 MailOps 邮箱池 API。

BASE_URL = "https://gptmail.passkissyou.online"
API_KEY = "mak_xxx"
CATEGORY = "safe"
CONCURRENCY = 5  # 注册机并发数;每个 worker 都必须单独调用 reserve
CODE_KEYWORD = "code,验证码,verification code,OpenAI,ChatGPT,gpt"

所有请求都带:
Authorization: Bearer API_KEY
Content-Type: application/json

固定流程:
1. 领取邮箱,只能用:
   POST {BASE_URL}/api/mailboxes/reserve
   body: {"category":CATEGORY,"consume":true}
2. 如果返回 email 为空,表示邮箱池耗尽,停止本轮注册。
3. 使用返回的 email 去目标系统提交绑定邮箱。
4. 等待 10-20 秒后查询验证码:
   GET {BASE_URL}/api/mail/code?email={email}&keyword={CODE_KEYWORD}&limit=10&folders=inbox,junk
5. 如果 found=false,继续间隔轮询,不要重新领取新邮箱,除非本次注册流程已经判定失败。

重要限制:
- 不要用 GET /api/mailboxes 来分配邮箱,它只是查看列表。
- 并发注册必须用 reserve;并发数不通过 API 传,而是在注册机线程/任务数里配置。
- 每个并发 worker 一次注册只领取一次邮箱,不能多个 worker 共享同一个 email。
- 默认 consume=true,邮箱返回前已被服务器标记 used,不会再次从 safe 池发出。
- 验证码关键词优先填 code/验证码/verification code,其次才是 OpenAI/ChatGPT/gpt。
- 本地 used_emails.json 只能当日志,不是防重复主逻辑。

机器可读规格:/api-spec.json

接入步骤

  1. 管理员登录控制台,导入 Outlook/Hotmail 资产,并完成可读性扫描分类。
  2. 确认要消费的邮箱在目标分类里,默认推荐 safe
  3. 进入 API 中心生成 mak_... API Key。Key 只完整显示一次,必须立即保存到注册机配置里。
  4. 注册机配置 base_urlapi_keycategorykeyword、并发数和验证码轮询参数。
  5. 每个注册 worker 都通过 POST /api/mailboxes/reserve 领取唯一邮箱,不要用列表接口分配邮箱。
  6. 提交绑定邮件后,只对刚领取的这个邮箱调用 GET /api/mail/code 轮询验证码。
  7. 最终收不到码时,调用 POST /api/mailboxes/report-code 上报 timeout,后台会把邮箱隔离到 no_code

基础配置

先确定注册机在哪里运行,再选择 base_url。这个值最容易填错。

注册机位置base_url 填写说明
和后台在同一台电脑/NAS 容器内部http://127.0.0.1:8009只适合同机访问。
局域网其他机器http://192.168.6.35:8009NAS 局域网地址,速度最快,但只在内网可用。
公网机器或外部 VPShttps://gptmail.passkissyou.online走公网反代和 HTTPS,注册机不在你内网时用这个。

所有 API 请求都要携带:

Authorization: Bearer mak_xxx
Content-Type: application/json

浏览器控制台登录用账号密码;注册机和外部脚本只使用 Bearer API Key,不需要也不应该处理登录 Cookie。

注册机推荐配置模板:

{
  "email_provider": "mailmanage",
  "mailmanage": {
    "base_url": "https://gptmail.passkissyou.online",
    "api_key": "mak_xxx",
    "category": "safe",
    "keyword": "code,验证码,verification code,OpenAI,ChatGPT,gpt",
    "folders": "inbox,junk",
    "consume": true,
    "poll_interval_seconds": 8,
    "poll_timeout_seconds": 180
  },
  "concurrency": 5
}

注册机填写项

按当前后台接入 MailManage 时,注册机只需要填写下面这些项。邮箱账号、client_id、refresh_token 只导入到本后台,不要填进注册机。

注册机字段应该填写说明
邮箱提供商MailManage选择本后台邮箱池。
MailManage Base URLhttps://gptmail.passkissyou.online公网注册机用这个;同机测试才用 http://127.0.0.1:8009
MailManage API Keymak_xxx在本后台 API 中心生成,完整 Key 只显示一次。
MailManage 分类safe注册推荐用 safe。不要填 used;free/套餐只用于特殊策略。
MailManage 关键词code,验证码,verification code,OpenAI,ChatGPT,gpt验证码邮件过滤词。优先包含 code/验证码/verification code,避免只填 gpt 时漏掉“Your verification code”这类邮件。
并发数3-10这是注册机线程/任务数,不是 API 参数。每个并发 worker 都调用一次 reserve,后台保证唯一邮箱。
验证码轮询间隔8-10 秒每次轮询同一个 email,不要没找到就重新领取。
验证码超时180-300 秒最终超时后调用 /api/mailboxes/report-code 上报 timeout。
绑定邮箱留空必须留空,注册机才会每次从 MailManage 原子领取唯一邮箱。
绑定失败释放回 safe 池默认关闭关闭最稳,失败也消耗邮箱。确认失败不会污染邮箱时再开启。
失败回收租约秒数1800只在开启失败回收时使用。

配置对照

如果你之前按原 MailManage 页面配置过注册机,迁移到本地后台时主要差异如下。

配置项原站常见配置本地后台配置说明
邮箱提供商MailManageMailManage保持一致。
API Keymak_xxxmak_xxx在本地 API 中心重新生成,不能直接假设原站 Key 可用。
Base URLhttps://mailmanage.lizaliza.tophttps://gptmail.passkissyou.onlinehttp://127.0.0.1:8009这是最容易漏的项。注册机必须指向本后台,不要再指向原站。
分类safe / free / 套餐safe / free / 套餐 / used注册机通常填 safe。used 只用于查看已消费邮箱。
关键词gptcode,验证码,verification code,OpenAI,ChatGPT,gpt新配置更稳:先按验证码词命中,再兼容 OpenAI/ChatGPT/gpt。
并发由注册机线程数决定仍由注册机线程数决定API 没有 concurrency 参数。并发 5 就是 5 个 worker 同时各调用一次 reserve。
领取方式常见是列表取一个邮箱POST /api/mailboxes/reserve本地后台默认领取即 used,专门防并发重复。
已用处理可能依赖本地 used 文件或成功后 mark服务器领取时已标记 used本地 used 文件只是日志,不是主防线。

推荐流程

并发注册时,用领取即消费模式。邮箱返回前,后台已经把它改成 used,所以页面不刷新、本地 used 文件写入失败、程序重启,都不会重复发出同一个 safe 邮箱。

POST /api/mailboxes/reserve

{"category":"safe","consume":true}
{
  "ok": true,
  "email": "user@hotmail.com",
  "consumed": true,
  "mailbox": {
    "email": "user@hotmail.com",
    "category": "used",
    "status": "used",
    "used": 1,
    "reserved": 0
  }
}

然后轮询验证码:

GET /api/mail/code?email=user@hotmail.com&keyword=code,验证码,verification code,OpenAI,ChatGPT,gpt&limit=10&folders=inbox,junk

防重复机制

只要注册机用 POST /api/mailboxes/reserveconsume=true,邮箱会在返回给注册机之前自动离开 safe 池。这个动作发生在数据库事务里,不依赖网页刷新,也不依赖本地 used_emails.json

阶段数据库状态效果
领取前category=safe, used=0, reserved=0可以被 safe 池领取。
reserve 返回前category=used, status=used, used=1, reserved=0已经从 safe 池剔除。
后续并发领取查询条件会排除 used=1不会再把这个邮箱发给其他 worker。

如果你开启 consume=false 租约模式,邮箱不会立刻变成 used,而是进入 reserved 状态;成功后必须调用 mark-used,失败后按策略调用 release。高并发注册默认不要用租约模式。

并发配置

并发不是填给 MailOps API 的参数,而是注册机自己的 worker/线程/任务数量。MailOps 只负责保证每个 worker 通过 reserve 拿到的邮箱唯一。

场景推荐值说明
刚开始实测3先确认验证码、注册流程和失败上报都正常。
稳定跑批5-10邮箱 API、目标站、网络都稳定后再提高。
大量并发10+可以领唯一邮箱,但目标站发码和 Outlook 刷新可能限速,建议逐步加。
worker_1 -> POST /api/mailboxes/reserve -> email A -> 只轮询 email A 的验证码
worker_2 -> POST /api/mailboxes/reserve -> email B -> 只轮询 email B 的验证码
worker_3 -> POST /api/mailboxes/reserve -> email C -> 只轮询 email C 的验证码

不要先 GET /api/mailboxes 拉一批邮箱再在本地分配;多进程、多机器或重启时很容易重复。所有并发 worker 都必须即时调用 POST /api/mailboxes/reserve

验证码关键词

关键词不是最终验证码,验证码仍然由系统从邮件正文里提取 4-8 位数字。关键词只是先筛选“哪封邮件可能是验证码邮件”。

优先级关键词用途
最高code,验证码,verification code最直接命中验证码邮件标题和正文。
OpenAI,ChatGPT命中发件服务或产品名。
兼容gpt兼容原 MailManage 配置,但单独使用可能漏掉只写 verification code 的邮件。
调试留空不按关键词过滤,只从最新邮件里提取数字,容易误读旧码,不建议实战默认使用。
推荐:
GET /api/mail/code?email=user@hotmail.com&keyword=code,验证码,verification code,OpenAI,ChatGPT,gpt&limit=10&folders=inbox,junk

兼容旧配置:
GET /api/mail/code?email=user@hotmail.com&keyword=gpt&limit=10

接口总览

方法路径用途注册机是否推荐
POST/api/mailboxes/reserve并发安全领取邮箱推荐
GET/api/mail/code查询验证码推荐
GET/api/mail/{email}兼容原站旧文档的验证码查询写法兼容
POST/api/mailboxes/mark-used标记已用,租约模式成功后调用可选
POST/api/mailboxes/release释放未消费租约租约模式可用
GET/api/mailboxes查看邮箱列表不要用于分配

领取邮箱

POST /api/mailboxes/reserve
字段类型默认说明
categorystringsafe领取哪个分类的邮箱,例如 safe、free、套餐。
statusstring可选,进一步按状态过滤。
consumebooleantrue推荐 true。返回邮箱前直接标记 used。
lease_secondsnumber1800仅 consume=false 时有意义。
curl -X POST "https://gptmail.passkissyou.online/api/mailboxes/reserve" ^
  -H "Authorization: Bearer mak_xxx" ^
  -H "Content-Type: application/json" ^
  -d "{\"category\":\"safe\",\"consume\":true}"

无可用邮箱时:

{"ok":true,"mailbox":null,"email":"","reason":"no_available","error":"no available mailbox"}

租约模式

如果你想“失败后释放回池”,可以关闭领取即消费。这个模式会返回 lease_token,成功后 mark-used,失败后 release。高并发注册默认不建议用它,因为失败释放策略要由调用方管理。

POST /api/mailboxes/reserve

{"category":"safe","consume":false,"lease_seconds":1800}
POST /api/mailboxes/mark-used

{"email":"user@hotmail.com","lease_token":"returned_token"}
POST /api/mailboxes/release

{"email":"user@hotmail.com","lease_token":"returned_token"}

注册机如何知道失败:Phase2 绑定/上传结束后会得到 oauth_result.ok。成功时调用 mark-used;失败时如果开启“绑定失败释放回 safe 池”,注册机会调用 release。默认关闭失败回收,因为某些失败代表邮箱本身不可用或已经注册,回池后可能反复失败。若进程异常退出没有 release,租约到期后后台会自动释放,默认 1800 秒。

查询验证码

GET /api/mail/code?email=user@hotmail.com&keyword=code,验证码,verification code,OpenAI,ChatGPT,gpt&limit=10&folders=inbox,junk

兼容原站旧文档写法:GET /api/mail/user@hotmail.com&keyword=gpt&limit=10。新项目推荐继续使用上面的标准 query 写法。

参数默认说明
email必填刚领取到的邮箱。
keyword邮件关键词。推荐 code,验证码,verification code,OpenAI,ChatGPT,gpt;系统会在命中的邮件中提取 4-8 位数字验证码。
limit10实时拉取并检查最近多少封邮件,最大 50。
refresh1默认实时刷新 Outlook/Hotmail 后再提码。传 0 时只读本地缓存。
foldersinbox,junk默认同时检查收件箱和垃圾箱,避免误判“没收到码”。
include_old0默认只认领取/预留之后的新验证码,防止老验证码被误读。调试历史邮件时才传 1。
curl -H "Authorization: Bearer mak_xxx" "https://gptmail.passkissyou.online/api/mail/code?email=user@hotmail.com&keyword=code,验证码,verification code,OpenAI,ChatGPT,gpt&limit=10&folders=inbox,junk"

每次 found=false 都会被后台记为一次真实收码未命中。默认 6 次未命中或连续 120 秒仍没有验证码时,后台自动把邮箱标记为 no_code,从后续 safe 领取池排除。

{
  "ok": true,
  "email": "user@hotmail.com",
  "code": "123456",
  "found": true,
  "category": "used",
  "refreshed": true,
  "refresh_error": "",
  "code_health": "healthy",
  "poll_count": 0,
  "quarantined": false,
  "message": {
    "subject": "...",
    "from_addr": "...",
    "body_preview": "..."
  }
}

收码失败上报

扫描历史邮件不能证明邮箱未来一定能收到验证码。可靠判定来自真实注册发码:如果多次轮询收件箱和垃圾箱仍没有验证码,后台会自动隔离;注册机最终超时时仍应上报一次,便于立即写入失败原因。

POST /api/mailboxes/report-code
{"email":"user@hotmail.com","result":"timeout","detail":"300s 内未收到验证码"}
字段说明
resultsuccess 表示收到码;pending 表示一次轮询未命中;timeout / no_code 表示最终没收到码。
threshold失败多少次后隔离,默认 1。注册机实战默认 1 次,因为发码已经经过轮询和重发。
lease_token租约模式可带上;领取即消费模式不需要。

隔离后的邮箱会显示在 no_code 分类;普通 safe 查询和 reserve 领取会自动跳过。

列表查询

GET /api/mailboxes 只用于查看,不用于并发分配。默认排除 used=1reserved=1no_code 收码异常邮箱。

GET /api/mailboxes?category=safe&page=1&limit=100
GET /api/mailboxes?category=used
GET /api/mailboxes?search=hotmail&include_used=1&include_reserved=1
参数说明
category按分类筛选。
status按状态筛选。
search搜索邮箱、标签或原因。
page / limit分页。
include_used设为 1 时包含已用邮箱。
include_reserved设为 1 时包含已预留邮箱。
include_unhealthy设为 1 时包含收码异常邮箱;查看 category=no_code 时会自动包含。

Python 示例

import time
import requests

BASE_URL = "https://gptmail.passkissyou.online"
API_KEY = "mak_xxx"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

r = requests.post(
    f"{BASE_URL}/api/mailboxes/reserve",
    headers=HEADERS,
    json={"category": "safe", "consume": True},
    timeout=30,
).json()

if not r.get("email"):
    raise RuntimeError("没有可用邮箱")

email = r["email"]

# 这里提交绑定邮箱给目标系统,然后等待邮件进入缓存
time.sleep(15)

code = requests.get(
    f"{BASE_URL}/api/mail/code",
    headers=HEADERS,
    params={"email": email, "keyword": "code,验证码,verification code,OpenAI,ChatGPT,gpt", "limit": 10, "folders": "inbox,junk"},
    timeout=30,
).json()

print(email, code.get("code"))

错误处理

状态含义处理
401API Key 缺失或错误检查 Authorization。
404邮箱不存在或接口不存在确认 base_url 指向本后台。
409扫描或并发状态冲突稍后重试。
200 + email=""目标分类已耗尽补充邮箱或换分类。
200 + found=false暂未找到验证码继续轮询或重新扫描邮箱。