一个本地运行的 ChatGPT 会话管理工具,用于导入 Outlook 账号、自动获取 OpenAI 邮箱验证码、批量完成 ChatGPT 登录,并导出 CPA / sub2api / Cockpit 可用的凭证 JSON。
这个项目适合需要集中管理多个 ChatGPT Web Session 的本地工作流。所有账号数据、登录结果和导出文件都保存在本机,不需要外部数据库。
- 支持批量导入 Outlook 账号
- 支持 IMAP 与 Microsoft Graph 双协议取件
- 支持外部邮箱 Provider:Cloudflare Temp Email / Cloud Mail
- 自动从邮箱中提取 OpenAI 验证码
- 支持批量 ChatGPT 登录,并可设置并发数
- 登录进度、状态和日志实时刷新
- 自动识别账号停用 / 删除类错误
- CPA 导出:一个账号一个 JSON 文件
- sub2api 导出:生成包含
accounts数组的聚合 JSON - Cockpit 导出:生成
cockpit-tools可直接导入的扁平 Codex token JSON 数组 - CPA 仓管:扫描 CLIProxyAPI 401 凭证,自动重登获取新 CPA,封号时删除旧凭证
- 支持粘贴原始
https://chatgpt.com/api/auth/sessionJSON 并转换 - 支持通过环境变量或 Windows 系统代理配置后端出站代理
- Node.js 18 或更高版本
- Outlook 账号 OAuth 数据:
- 邮箱
- 密码
- Microsoft OAuth Client ID
- Refresh Token
- 可选:自建 Cloudflare Temp Email / Cloud Mail 收件 API
- 可以访问以下服务:
chatgpt.comauth.openai.comoutlook.office365.comgraph.microsoft.com
npm installnpm start然后打开:
http://localhost:3000
默认端口是 3000。也可以指定端口:
PORT=8080 npm startWindows PowerShell:
$env:PORT = "8080"
npm start后端出站请求使用 undici,代理配置在 config.js 中:
proxy: process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.ALL_PROXY || 'auto'默认值 auto 会尝试读取 Windows 当前用户代理。也可以手动指定:
HTTPS_PROXY=http://127.0.0.1:7897 npm start如果不想使用代理,可以在 config.js 中设置为 direct 或 none。
-
打开 Web UI。
-
在“邮箱取件”页点击“批量导入邮箱”。默认使用 Outlook,格式如下:
user@outlook.com----password----client-id----refresh-token如果验证码邮件不是 Outlook 收件,而是自建 Cloudflare Temp Email / Cloud Mail,可以在导入弹窗顶部选择对应邮箱服务并填写配置。导入时会自动把 Provider 配置附加到账号行,配置会保存在本机浏览器里。
也可以手动追加 provider:
user@example.com----password----client-id----refresh-token----cloudflare-temp-mail----baseUrl=https://mail.example.com;adminAuth=your-admin-auth user@example.com----password----client-id----refresh-token----cloud-mail----baseUrl=https://mail.example.com;token=your-tokenproviderConfig也支持 JSON:user@example.com----password----client-id----refresh-token----cloud-mail----{"baseUrl":"https://mail.example.com","adminEmail":"admin@example.com","adminPassword":"password"} -
进入“自动登录”页。
-
选择需要登录的账号,并设置并发数。
-
点击登录。
-
登录成功后,选择成功账号并导出:
CPA:每个账号导出为一个 JSON 文件sub2api:导出为一个聚合 JSON 文件Cockpit:导出为一个 JSON 数组文件,可导入 jlcodes99/cockpit-tools
CPA 导出采用“一个账号一个 JSON 文件”的形式。结构示例:
{
"type": "codex",
"email": "user@example.com",
"account_id": "00000000-0000-4000-9000-000000000000",
"chatgpt_account_id": "00000000-0000-4000-9000-000000000000",
"plan_type": "free",
"chatgpt_plan_type": "free",
"id_token": "header.payload.",
"access_token": "real-access-token",
"refresh_token": "",
"session_token": "real-session-token",
"last_refresh": "2026-05-24T00:00:00.000Z",
"expired": "2026-08-22T00:00:00.000Z",
"disabled": false,
"id_token_synthetic": true
}该格式由 ChatGPT Web Session 和 access token claims 派生生成。登录成功后程序不会主动退出 ChatGPT,因为退出可能导致 access token 失效。
sub2api 导出为聚合结构:
{
"exported_at": "2026-05-24T00:00:00.000Z",
"proxies": [],
"accounts": []
}每个账号会包含 OAuth 凭证、账号 ID、用户 ID、套餐类型、过期时间和额外元数据。
Cockpit 导出采用 cockpit-tools 当前导入逻辑支持的扁平 Codex token JSON 数组。结构示例:
[
{
"type": "codex",
"auth_mode": "oauth",
"email": "user@example.com",
"name": "user@example.com",
"account_id": "00000000-0000-4000-9000-000000000000",
"organization_id": "",
"user_id": "user-example",
"plan_type": "free",
"id_token": "header.payload.",
"access_token": "real-access-token",
"refresh_token": "",
"session_token": "real-session-token",
"last_refresh": "2026-05-24T00:00:00.000Z",
"expired": "2026-08-22T00:00:00.000Z",
"source": "chatgpt_session_forge",
"id_token_synthetic": true
}
]cockpit-tools 会读取 id_token、access_token、account_id,并在 refresh_token 为空时使用 session_token 作为回退字段。
“CPA 仓管”页用于直接操作 CLIProxyAPI 的管理 API。处理流程:
扫描 CPA auth-files
→ 发现 401 凭证
→ 用本地同邮箱账号重新登录 ChatGPT
→ 登录成功:生成 CPA JSON 并上传覆盖
→ 登录失败且账号已停用:删除 CPA 中的旧凭证
需要填写:
- CPA 地址,例如
http://localhost:8317 - 管理密钥,对应 CLIProxyAPI 管理 API 的
Authorization: Bearer <key>
本功能只会自动处理 status/status_message 中包含 401 或 unauthorized 的凭证。其他异常会跳过或记录失败,避免误删。
外部邮箱 Provider 只影响“获取验证码邮件”这一步,不会改变 ChatGPT 登录、CPA / sub2api / Cockpit 导出和 CPA 仓管逻辑。
导入弹窗已经内置可视化配置面板:
- Cloudflare Temp Email:支持
TEMP API、ADMIN AUTH、CUSTOM AUTH、查询方式、接收邮箱、随机子域和域名更新 - Cloud Mail:支持
API 地址、管理员邮箱、管理员密码和域名
当前支持:
cloudflare-temp-mail:兼容 Cloudflare Temp Email 管理接口,读取/admin/mails,可配置adminAuth/customAuthcloud-mail:兼容 Cloud Mail 公共接口,读取/api/public/emailList,可配置token,或用adminEmail+adminPassword自动获取 token
该兼容层参考了 FoundZiGu/GuJumpgate 中 Cloudflare Temp Email / Cloud Mail 的接口思路;本项目没有合并它的仓管功能,只在取验证码邮件这层增加兼容。
- 感谢 FoundZiGu/GuJumpgate 提供 Cloudflare Temp Email 和 Cloud Mail 的接口思路。
- 感谢 DanOps-1/Gpt-Agreement-Payment 提供 ChatGPT 协议登录流程参考。
运行时账号数据保存在:
data/accounts.json
日志保存在:
logs/
这两个路径都已加入 .gitignore,不会被提交到仓库。
本项目会处理高度敏感的数据:
- Outlook 密码
- OAuth refresh token
- ChatGPT access token
- ChatGPT session token
- 导出的 CPA / sub2api / Cockpit 凭证文件
不要提交运行数据、日志、导出的 JSON / ZIP 文件,或任何包含 token 的截图。公开仓库前请务必检查:
git status --ignorednpm start启动 Express 服务。
npm run dev使用 Node watch mode 启动开发模式。
当前暂未选择许可证。如果你希望其他人复用或修改该项目,请在公开发布前添加合适的开源许可证。