fix: keep mail and CPA traffic direct
This commit is contained in:
@@ -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 服务:
|
||||
|
||||
@@ -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`
|
||||
|
||||
8
main.py
8
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 ""))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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})
|
||||
|
||||
Reference in New Issue
Block a user