From fdada7c8db6922c21467cdd1b140adfd3dc3650e Mon Sep 17 00:00:00 2001 From: mmc Date: Thu, 19 Mar 2026 11:44:39 +0800 Subject: [PATCH] fix: keep mail and CPA traffic direct --- CONFIG_GUIDE.md | 24 ++++++++++++++++++++++++ README.md | 4 ++++ main.py | 8 ++++++-- openai_pool_orchestrator/register.py | 26 +++++++++++++------------- support.py | 3 +-- 5 files changed, 48 insertions(+), 17 deletions(-) diff --git a/CONFIG_GUIDE.md b/CONFIG_GUIDE.md index e09a855..2fb6a3b 100644 --- a/CONFIG_GUIDE.md +++ b/CONFIG_GUIDE.md @@ -22,6 +22,8 @@ 作用:注册 OpenAI 时使用的固定代理。 +注意:这个代理只用于 OpenAI 注册流程;邮箱服务接口默认直连,不使用代理。 + 常见填写示例: ```json @@ -95,6 +97,28 @@ } ``` +当前建议:DuckMail 直连,不要走 OpenAI 的代理;否则在当前环境下可能出现 `502 Bad Gateway`。 + +如果你填写了 `domain`,程序会固定使用这个域名创建邮箱,不会再随机选择其他 DuckMail 域名。 + +例如: + +```json +"duckmail": { + "api_base": "https://api.duckmail.sbs", + "bearer_token": "your_duckmail_token", + "domain": "cursors.online" +} +``` + +实际创建出来的邮箱会像: + +```text +ocxxxxxxx@cursors.online +``` + +也就是说,前缀是程序随机生成的,但域名会固定用你填写的 `cursors.online`。 + ### `moemail` 如果你有 MoeMail 服务: diff --git a/README.md b/README.md index f4a9dbc..dcb629c 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,10 @@ python3 /root/standalone_cli/run.py config setup - `http://127.0.0.1:17891` +说明:这个 `proxy` 用于 OpenAI 注册流程,邮箱服务接口默认直连,不走代理。 + +如果你在 DuckMail 配置里填写了 `domain`,程序会固定使用这个域名创建邮箱,不会随机切换到其他 DuckMail 域名。 + 模板里的 URL 现在使用了更明确的占位值: - `https://your-cpa.example.com` diff --git a/main.py b/main.py index 8949fb9..35100e9 100644 --- a/main.py +++ b/main.py @@ -201,6 +201,7 @@ def handle_register(args: argparse.Namespace) -> dict[str, Any]: try: provider_name, provider = mail_router.next_provider() print(f"[*] 本次使用邮箱提供商: {provider_name}") + print("[*] 邮箱接口默认直连,不使用代理") token_json = register_run( proxy, mail_provider=provider, @@ -234,7 +235,7 @@ def handle_register(args: argparse.Namespace) -> dict[str, Any]: run_result: dict[str, Any] = {"ok": True, "file": file_name, "email": email} cpa = get_pool_maintainer(cfg) if cpa: - cpa_ok = cpa.upload_token(file_name, token_data, proxy=proxy or "") + cpa_ok = cpa.upload_token(file_name, token_data, proxy="") run_result["cpa_uploaded"] = cpa_ok print(f"[{'+' if cpa_ok else '-'}] CPA {'上传成功' if cpa_ok else '上传失败'}: {email}") if cfg.get("auto_sync"): @@ -328,6 +329,7 @@ def handle_config_setup(args: argparse.Namespace) -> dict[str, Any]: cfg = load_sync_config() print("开始交互式配置,直接回车表示使用当前值。\n") + print("说明: OpenAI 注册流程使用 `proxy`,邮箱接口默认直连,不使用代理。\n") cfg["proxy"] = _prompt_text("1) 注册代理地址", str(cfg.get("proxy") or "http://127.0.0.1:17891")) cfg["auto_register"] = _prompt_bool("2) 池不足时自动注册", bool(cfg.get("auto_register", False))) @@ -345,7 +347,9 @@ def handle_config_setup(args: argparse.Namespace) -> dict[str, Any]: elif provider_name == "duckmail": provider_cfg["api_base"] = _prompt_text(" DuckMail API 地址", str(provider_cfg.get("api_base") or "https://api.duckmail.sbs")) provider_cfg["bearer_token"] = _prompt_text(" DuckMail Bearer Token", str(provider_cfg.get("bearer_token") or "")) - provider_cfg["domain"] = _prompt_text(" DuckMail 域名(可留空)", str(provider_cfg.get("domain") or "")) + provider_cfg["domain"] = _prompt_text(" DuckMail 域名(填写后将固定使用该域名,不再随机选域)", str(provider_cfg.get("domain") or "")) + if provider_cfg.get("domain"): + print(f" 已固定 DuckMail 域名: {provider_cfg['domain']},后续邮箱会使用该域名。") elif provider_name == "moemail": provider_cfg["api_base"] = _prompt_text(" MoeMail API 地址", str(provider_cfg.get("api_base") or "")) provider_cfg["api_key"] = _prompt_text(" MoeMail API Key", str(provider_cfg.get("api_key") or "")) diff --git a/openai_pool_orchestrator/register.py b/openai_pool_orchestrator/register.py index 6de489d..3d587c2 100755 --- a/openai_pool_orchestrator/register.py +++ b/openai_pool_orchestrator/register.py @@ -1325,17 +1325,17 @@ def run( emitter.info("正在创建临时邮箱...", step="create_email") try: email, dev_token = mail_provider.create_mailbox( - proxy=static_proxy, - proxy_selector=mail_proxy_selector, + proxy="", + proxy_selector=None, ) except TypeError: - email, dev_token = mail_provider.create_mailbox(proxy=static_proxy) + email, dev_token = mail_provider.create_mailbox(proxy="") else: emitter.info("正在创建 Mail.tm 临时邮箱...", step="create_email") email, dev_token = get_email_and_token( - static_proxies, + None, emitter, - proxy_selector=mail_proxies_selector, + proxy_selector=None, ) if not email or not dev_token: emitter.error("临时邮箱创建失败", step="create_email") @@ -1487,25 +1487,25 @@ def run( code = mail_provider.wait_for_otp( dev_token, email, - proxy=static_proxy, - proxy_selector=mail_proxy_selector, + proxy="", + proxy_selector=None, stop_event=stop_event, ) except TypeError: code = mail_provider.wait_for_otp( dev_token, email, - proxy=static_proxy, + proxy="", stop_event=stop_event, ) else: code = get_oai_code( dev_token, email, - static_proxies, + None, emitter, stop_event, - proxy_selector=mail_proxies_selector, + proxy_selector=None, ) if not code: return None @@ -1765,12 +1765,12 @@ def run( return None try: _otp_code2 = mail_provider.wait_for_otp( - dev_token, email, proxy=static_proxy, - proxy_selector=mail_proxy_selector, stop_event=stop_event, + dev_token, email, proxy="", + proxy_selector=None, stop_event=stop_event, ) except TypeError: _otp_code2 = mail_provider.wait_for_otp( - dev_token, email, proxy=static_proxy, stop_event=stop_event, + dev_token, email, proxy="", stop_event=stop_event, ) if not _otp_code2 or _otp_code2 in _tried_codes: time.sleep(2) diff --git a/support.py b/support.py index 7053ce3..4e95187 100644 --- a/support.py +++ b/support.py @@ -743,7 +743,6 @@ def upload_all_tokens_to_cpa(cfg: Optional[Dict[str, Any]] = None, skip_uploaded maintainer = get_pool_maintainer(config) if not maintainer: raise ValueError("请先配置 CPA 地址和 Token") - proxy = str(config.get("proxy") or "").strip() results = [] for path in iter_token_files(): try: @@ -751,7 +750,7 @@ def upload_all_tokens_to_cpa(cfg: Optional[Dict[str, Any]] = None, skip_uploaded if skip_uploaded and "cpa" in extract_uploaded_platforms(token_data): results.append({"file": path.name, "email": token_data.get("email", path.name), "ok": True, "skipped": True}) continue - ok = maintainer.upload_token(path.name, token_data, proxy=proxy) + ok = maintainer.upload_token(path.name, token_data, proxy="") if ok: mark_token_uploaded_platform(path, "cpa") results.append({"file": path.name, "email": token_data.get("email", path.name), "ok": ok, "skipped": False})