[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82743":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":15,"starSnapshotCount":15,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},82743,"gpt-account-manager","margetrp-hub\u002Fgpt-account-manager","margetrp-hub","Self-hosted operations workspace for mailbox intake, refresh queues, and deployable maintenance workflows.","",null,"Python",122,37,51,0,3,31,59,13,69.1,false,"main",[],"2026-06-12 04:01:38","# GPT账号管理助手\n\n演示地址：\u003Chttps:\u002F\u002Fmail.wsphl.cfd\u002F>\n\n仓库地址：\u003Chttps:\u002F\u002Fgithub.com\u002Fmargetrp-hub\u002Fgpt-account-manager>\n\n交流群：QQ 群 `260789529`，欢迎大家进群交流项目使用、部署和问题反馈。\n\n我做这个项目，不是为了让管理员先把一堆凭证放到服务器里，然后只给某一个人用。它更像一个批量账号管理工作台：普通用户自己导入邮箱资料，自己收验证码，自己把需要刷新的账号推进队列；管理员只负责站点维护、临时邮箱提取、CPA 仓管和必要的批量整理。\n\n它现在主要处理几类事情：\n\n- Outlook \u002F Microsoft Graph + IMAP 邮箱批量导入和取信。\n- 临时邮箱 JWT 批量导入和取信。\n- 邮件验证码检索、服务端工作区邮件缓存、搜索、复制和本地删除。\n- 账号分组、封禁\u002F异常标记、刷新队列管理。\n- 右上角中英文界面切换，语言选择保存在当前浏览器。\n- CPA \u002F CLIProxyAPI 仓管巡检，识别 RT 失效、会话失效、封禁、风控、额度耗尽、非 OpenAI 凭证等状态。\n- OpenAI OAuth 凭证刷新，并导出 CPA \u002F Sub2API 可用的 auth JSON。\n- 确定失败账号一键清理：从 CPA 和刷新队列移除，不删除邮箱管理里的邮箱资料。\n- 长效手机接码池：手机号和 API URL 绑定到单个账号，遇到手机验证时可以独立取码和留痕。\n\n## 我希望它解决的问题\n\n批量账号维护最烦的地方不是某一个 API 调不通，而是流程散在很多地方：邮箱资料在一处，临时邮箱 JWT 在一处，CPA 里又是一批 auth file，刷新失败以后还要再判断到底是邮箱没收到码、RT 失效、账号封禁、地区受限还是额度耗尽。\n\n这个工具想把这些步骤压到一个清楚的工作流里：\n\n- 收信链路和刷新链路分开，临时邮箱和微软邮箱也分开，不互相污染。\n- 每个错误尽量归类成人能处理的原因，而不是只扔一段英文堆栈。\n- 普通用户的数据默认留在当前浏览器，不因为多人使用同一个 VPS 就串到一起。\n- 真正需要服务端帮忙的流程，用 `X-Workspace-Id` 做工作区隔离。\n- CPA 仓管不是只扫 401，而是尽量告诉你这个账号现在到底是什么状态。\n\n## 技术架构\n\n- 后端是单进程 Python HTTP 服务，基于 `ThreadingHTTPServer`，负责静态页面、客户端 API、管理员 API、CPA 对接、OAuth 协议流程和自检。\n- 前端是原生 HTML \u002F CSS \u002F JavaScript，没有前端构建步骤，部署时直接解压即可运行。\n- 浏览器优先保存轻量资料：邮箱资料、分类、忽略列表、CPA 设置默认保存在 `localStorage`；完整邮件正文和 HTML 写入服务端工作区缓存，避免浏览器存储超额。\n- 服务端工作区隔离：普通客户端调用服务端辅助 API 时，会发送浏览器生成的 `ctgptm.workspaceId`，服务端写入 `data\u002Fworkspaces\u002F\u003Cworkspace-id>\u002F`。\n- 邮箱链路独立：Microsoft 账号走 Graph \u002F IMAP 取信链路；临时邮箱走 Cloudflare Temp Email Worker 兼容 API。\n- CPA 仓管链路独立：通过目标 CPA 管理端点扫描、诊断、删除或替换 auth file，管理密钥不写入本工具服务端文件。\n- OAuth 刷新链路使用后端协议状态机，生成 CPA \u002F Sub2API 可用的 auth JSON；刷新时要求显式填写代理 URL，避免误用 VPS 默认出口。\n- 自检、管理员页和管理员 API 在设置 `MAIL_PICKUP_ADMIN_TOKEN` 后变成私有入口。\n\n## 页面说明\n\n- `\u002F`：账号管理台，导入邮箱、收信、查码、分组、删除本地缓存、推送刷新队列。\n- `\u002Fmailboxes.html`：邮箱管理台，集中整理 Outlook 四段和临时邮箱 JWT，支持批量导入、搜索筛选、分组、复制、一行一个邮箱的 TXT 导出、JSON 备份和删除。\n- `\u002Frefresh.html`：凭证刷新队列，处理邮箱登录账号、CPA 同步、auth JSON 导出。\n- `\u002Fwarehouse.html`：CPA 仓管，扫描异常账号、删除失效 auth、查看诊断原因。\n- `\u002Fconverter.html`：本地 Session \u002F auth JSON 转换工具。\n- `\u002Flogin.html`：管理员登录页，写入 HttpOnly cookie，并可在当前浏览器记住 token。\n- `\u002Fadmin.html`：管理员临时邮箱 JWT 提取和公共池导出辅助页。\n- `\u002Fhealth.html`：部署自检页，公共部署时需要管理员 token\u002Fcookie。\n\n## 界面截图\n\n下面是实际页面渲染后的脱敏截图，邮箱、token、代理和账号标识都已经打码。\n\n![凭证刷新工作台](docs\u002Fscreenshots\u002Frefresh-workbench-masked.png)\n\n![邮箱管理页](docs\u002Fscreenshots\u002Fmailbox-manager-masked.png)\n\n## 数据边界\n\n前台收信默认不把用户邮箱资料写进服务器全局文件。普通用户导入的 Outlook 密码、client_id、refresh_token、临时邮箱 JWT、分类和本地删除记录，都优先保存在当前浏览器；完整邮件正文和 HTML 会按工作区写入服务端缓存，前端只分页读取当前结果。\n\n当用户使用服务端辅助能力时，数据按工作区保存：\n\n```text\ndata\u002Fworkspaces\u002F\u003Cworkspace-id>\u002Faccounts.json\ndata\u002Fworkspaces\u002F\u003Cworkspace-id>\u002Ftemp_addresses.json\ndata\u002Fworkspaces\u002F\u003Cworkspace-id>\u002Fmessages.json\ndata\u002Fworkspaces\u002F\u003Cworkspace-id>\u002Frefresh_results.json\ndata\u002Fworkspaces\u002F\u003Cworkspace-id>\u002Flogin_history.json\n```\n\n管理员 `\u002Fapi\u002F*` 和 `\u002Fadmin-api\u002F*` 仍然是全局运维面，必须用 `MAIL_PICKUP_ADMIN_TOKEN` 保护。不要把管理员 token 发给普通用户。\n\n## 快速运行\n\nDocker 运行：\n\n```bash\ncp .env.example .env\n# 编辑 .env，把 MAIL_PICKUP_ADMIN_TOKEN 换成 `openssl rand -hex 32` 生成的长随机令牌\ndocker compose up -d --build\n```\n\n已有旧 VPS 部署时，可以用迁移脚本把 `\u002Fopt\u002Fctgptm-mail-assistant` 和旧环境变量平移到 Docker：\n\n```bash\nsudo bash deploy\u002Fmigrate-systemd-to-docker.sh\n```\n\n需要网页里点击升级时，启用宿主机升级 agent：\n\n```bash\nsudo cp deploy\u002Fgpt-account-manager-upgrade-agent.* \u002Fetc\u002Fsystemd\u002Fsystem\u002F\nsudo systemctl daemon-reload\nsudo systemctl enable --now gpt-account-manager-upgrade-agent.timer\n```\n\n打开：\n\n```text\nhttp:\u002F\u002F127.0.0.1:8765\u002F\n```\n\n本地直接运行：\n\n```bash\npython3 server.py\n```\n\n打开：\n\n```text\nhttp:\u002F\u002F127.0.0.1:8765\u002F\n```\n\nWindows 开发环境：\n\n```powershell\ncd D:\\wiki\\tools\\gpt-account-manager\npy -3 server.py\n```\n\n## 环境变量\n\n最小配置：\n\n```bash\nMAIL_PICKUP_HOST=127.0.0.1\nMAIL_PICKUP_PORT=8765\nMAIL_PICKUP_ADMIN_TOKEN=replace-with-a-long-random-token\nGPT_ACCOUNT_MANAGER_APP_TITLE=GPT账号管理助手\nGPT_ACCOUNT_MANAGER_TEMP_WORKER_URL=https:\u002F\u002Fyour-temp-worker.example\nMAIL_PICKUP_LOGIN_STRATEGY=protocol\nMAIL_PICKUP_NODE_BIN=node\n```\n\n可选配置：\n\n```bash\n# 如果临时邮箱 Worker 设置了站点口令\n# GPT_ACCOUNT_MANAGER_TEMP_SITE_PASSWORD=\n\n# 管理员公共池推送，不配置时只生成可复制 JSON\n# GPT_ACCOUNT_MANAGER_PUBLIC_POOL_API_URL=https:\u002F\u002Fyour-public-pool.example\u002Fapi\u002Fimport\n# GPT_ACCOUNT_MANAGER_PUBLIC_POOL_TOKEN=optional-pool-token\n\n# 只有需要连接内网、局域网、容器私网 CPA 管理端点时再开启\n# MAIL_PICKUP_CPA_ALLOW_REMOTE=1\n\n# 协议登录辅助\n# MAIL_PICKUP_FETCH_CONCURRENCY=8\n# MAIL_PICKUP_CHATGPT_LOGIN_URL=https:\u002F\u002Fchatgpt.com\u002Fauth\u002Flogin\n# OPENAI_OAUTH_REDIRECT_URI=http:\u002F\u002Flocalhost:1455\u002Fauth\u002Fcallback\n# OPENAI_OAUTH_REFRESH_SCOPE=openid profile email\n```\n\n刷新流程会调用 `openai_sentinel_token.cjs`，所以部署机需要有 `node`。如果使用 `socks4:\u002F\u002F` 或 `socks5:\u002F\u002F` 代理，还需要安装 PySocks：\n\n```bash\nsudo apt-get update\nsudo apt-get install -y python3-socks\nsudo npm install --omit=dev --cache \u002Ftmp\u002Fgpt-account-manager-npm-cache --no-audit --no-fund\n```\n\n## VPS 部署\n\n推荐 Python 服务只监听 `127.0.0.1:8765`，外部流量由 Nginx 或其它反向代理转发。\n\n```bash\nsudo unzip -o gpt-account-manager-*.zip -d \u002Fopt\u002Fctgptm-mail-assistant\nsudo chown -R www-data:www-data \u002Fopt\u002Fctgptm-mail-assistant\nsudo systemctl restart ctgptm-mail-assistant\nsudo systemctl status ctgptm-mail-assistant --no-pager\n```\n\n历史部署路径里仍然保留 `ctgptm-mail-assistant`，是为了兼容已有 VPS 和浏览器 localStorage，不代表公开项目名。\n\n## API 边界\n\n- `POST \u002Fclient-api\u002Ffetch`：当前浏览器提交邮箱资料并取信，不写入全局账号池。\n- `POST \u002Fclient-api\u002Fmessages\u002Fdelete`：删除\u002F隐藏本地缓存邮件，不删除远端邮箱真实邮件。\n- `POST \u002Fclient-api\u002Fcpa\u002Fscan-401`：扫描 CPA\u002FCLIProxyAPI 管理端点，并诊断异常凭证原因。\n- `POST \u002Fclient-api\u002Fcpa\u002Frepair-401`：对选中 CPA auth file 执行修复或删除。\n- `POST \u002Fadmin-api\u002Fextract-jwts`：管理员临时邮箱 JWT 提取，需要 `MAIL_PICKUP_ADMIN_TOKEN`。\n\n## 开源边界\n\n发布包和仓库不应该包含：\n\n- `data\u002F`\n- `.cache\u002F`\n- `.ssh\u002F`\n- `node_modules\u002F`\n- `output\u002F`\n- `release\u002F`\n- 真实 `.env`\n- 邮箱密码、refresh_token、JWT、CPA management key、代理密码、管理员 token\n\n## 致谢\n\n这个项目做的时候参考过一些朋友的开源思路，尤其是 ChatGPT session 处理、CPA\u002FSub2API auth 转换和账号运维工具这几块。感谢：\n\n- [maowuzz\u002Fchatgpt-session-forge](https:\u002F\u002Fgithub.com\u002Fmaowuzz\u002Fchatgpt-session-forge)\n- [gtxx3600\u002FGPTSession2CPAandSub2API](https:\u002F\u002Fgithub.com\u002Fgtxx3600\u002FGPTSession2CPAandSub2API)\n\n本仓库没有 vendoring 或直接复制这些项目，核心流程是围绕浏览器优先的账号管理、邮箱接码、CPA 仓管和 OAuth 刷新重新组织的。\n","GPT账号管理助手是一个自托管的操作工作区，用于邮箱接收、队列刷新和可部署的维护工作流。其核心功能包括批量处理Outlook\u002FMicrosoft Graph + IMAP邮箱和临时邮箱JWT的导入与取信、邮件验证码检索及服务端邮件缓存等，并提供账号分组、封禁标记、刷新队列管理等功能。此外，它还支持OpenAI OAuth凭证刷新、CPA仓管巡检以及长效手机接码池等功能。该工具适用于需要集中管理和维护大量账号的场景，如企业级邮箱管理、API凭证刷新等，通过将分散的流程整合到一个清晰的工作流中，提高效率并减少错误。基于Python开发，前端采用原生HTML\u002FCSS\u002FJavaScript构建，便于快速部署使用。",2,"2026-06-11 04:09:05","CREATED_QUERY"]