生产邮箱资产自动导入
此路线只导入可读邮箱资产到 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
}
管理端导入窗口默认勾选自动扫描;API 仍按兼容规则使用 auto_scan=false 时,新增邮箱固定进入 category=new、status=new。
Outlook OAuth 格式:email----password----client_id----refresh_token----tag;密码和 tag 可选。兼容部分批量导出器插入的 第1000条、第2000条账号、第3000行数据 等纯序号分隔行,系统会忽略这些分隔行,不计为失败账号;真实字段不完整的账号仍会明确报错。
iCloud/Gmail URL 收信格式:email----receiving_url----tag,可显式传 format=icloud_api_v1 或 format=gmail_api_v1;未传 format 时系统会按邮箱域名和 HTTPS URL 自动识别。已知来源继续走专用驱动;未知公网 HTTPS 来源自动进入“通用 URL”驱动,支持常见 JSON 邮件列表、单封邮件 JSON 与静态 HTML 邮箱页,并保留 URL 编码参数。Gmail 仅接受 gmail.com/googlemail.com,并进入独立 gmail_api 池。iCloud 已知来源包括 icloud-api.top、mail.sayt.cloud/api/v1/access/.../mailboxes/.../view、ipm.yx66.email/api/v1/mailboxes/.../code?key=... 和 191006.xyz/mailbox/{token};这些继续使用原专用解析。
邮箱列表的“导出当前筛选”和“导出选中”会保持可回导格式:iCloud/Gmail 导出为 email----receiving_url----tag,Outlook 导出为 email----password----client_id----refresh_token----tag,自有域名邮箱导出为 email----https://gptmail.passkissyou.online/mail/receiver?... 。域名邮箱 URL 默认按收件时间倒序只显示最新一封邮件,并每 5 秒自动刷新并重新收取邮件,可切换“查看全部邮件 / 只看最新一封”;显示完整主题、发件人、正文和链接。自动化项目需要 JSON 时,在同一参数后把路径改为 /api/mail/receiver,并按 3-5 秒间隔轮询同一 URL;每次请求都会刷新 IMAP 后再返回最新内容。传 auto_refresh=0 可关闭浏览器页面自动刷新。同一行用 format=managed_domain_v1 回导时会从 URL 的 domain 参数绑定当前用户已配置的同名域名池,不再附带内部 domain-generated 标记。历史的 managed_domain://domain 三段格式仍兼容。
通用 URL 必须使用 HTTPS 标准 443 端口、可解析到公网地址,且不得携带 URL 登录凭证;私网、回环、Docker 网段和每次重定向目标都会被拦截复检。新来源先健康检测并验证邮箱归属,成功后才进入可领取库存;失败会显示“通用 URL 不可用”,不会影响现有邮箱池。系统只在导入健康检测、人工查看或已领取邮箱 refresh=1 时抓取,响应体有大小上限,只缓存标准化的最近邮件。需要登录、验证码或 JavaScript 执行才能展示邮件的页面会被隔离,不会进入可领取库存。
“邮件查看”默认刷新当前邮箱,并以缩略列表展示邮件。点击“查看完整邮件”会读取缓存的完整可读正文;HTML 中的样式脚本不会显示,HTTP/HTTPS 链接会保留为可点击链接。完整正文默认最多缓存 120000 个字符,可通过 MAILOPS_MESSAGE_BODY_TEXT_MAX 调整。
同一 API Key 只会导入到该 Key 所属用户的邮箱池;跨用户重复邮箱会被拦截。
自有域名邮箱在“域名邮箱”页面独立管理:先添加域名并配置 DNS,再验证邮件主机,最后填写 Catch-all 汇总邮箱的 IMAP 配置。生成的域名邮箱进入独立 domain_* 邮箱池,收件验证通过前不会进入可领取库存。同一域名的历史前缀会永久占用,删除邮箱不会让旧前缀再次生成;不同域名之间可以使用相同前缀。
不要发送 GPT 的 id_token、access_token、chatgpt_account_id,也不要调用 /api/gpt-accounts/report。
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 和生成域名邮箱,不是注册机对接接口。
绿色 = 固定配置 ,所有域名通常不变红色 = 变动配置 ,新增域名时必须替换
图 1:DNS 红色换成新域名,绿色通常照抄;点击图片可放大。
图 2:Stalwart 创建一个真实 Catch-all 账号和 @域名别名;点击图片可放大。
图 3:GPTMail 把同一个 Catch-all IMAP 凭证填入这里;点击图片可放大。
红色字段怎么改:逐项输入规则
下面是图片中所有红色内容的替换规则。不要凭感觉填写;按“输入格式”和“来源”操作。
位置 红色字段 应该输入什么 示例 / 来源
DNS MX mail.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
新增域名四步
在域名 DNS 平台添加 A、MX、TXT;A 和 MX 指向邮件主机。
在 Stalwart 创建域名对象和独立 Catch-all 账号,并添加 @domain.com 别名。
为 mail.domain.com 配置 TLS 证书,确认 IMAPS 993 登录成功。
在 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
mailA 103.73.161.214- 600
@MX mail.example.com10 600
@TXT v=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.comCatch-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,后续项目才能领取。
打开“域名邮箱” → 新增域名:域名填 example.com,邮件主机填 mail.example.com,保存。
复制 GPTMail 生成的 _mailops-verification TXT 值,回 DNS 平台保存;点击“验证 DNS”,状态必须是 verified。
Catch-all 开关打开;IMAP 主机填 mail.example.com,端口 993,SSL 打开;用户名填 mailops-example-catchall,密码填刚才 Stalwart 账号密码;保存。
看到 Catch-all 和 receiver 状态均为 verified 后,生成数量,例如 1000,字符集选“小写字母 + 数字”。
生成后使用该域名自动生成的 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 用户名、密码、别名
IMAP SSL 开启,端口 993 IMAP 主机、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 位验证码会标记为已用。