diff --git a/openai_pool_orchestrator/mail_providers.py b/openai_pool_orchestrator/mail_providers.py index 3965872..128797f 100755 --- a/openai_pool_orchestrator/mail_providers.py +++ b/openai_pool_orchestrator/mail_providers.py @@ -398,9 +398,10 @@ class MoeMailProvider(MailProvider): # ==================== DuckMail ==================== class DuckMailProvider(MailProvider): - def __init__(self, api_base: str = "https://api.duckmail.sbs", bearer_token: str = ""): + def __init__(self, api_base: str = "https://api.duckmail.sbs", bearer_token: str = "", domain: str = ""): self.api_base = api_base.rstrip("/") self.bearer_token = bearer_token + self.domain = str(domain).strip() def _auth_headers(self, token: str = "") -> Dict[str, str]: h: Dict[str, str] = {"Accept": "application/json"} @@ -419,17 +420,19 @@ class DuckMailProvider(MailProvider): headers["Authorization"] = f"Bearer {self.bearer_token}" try: - domains_resp = session.get(f"{self.api_base}/domains", headers={"Accept": "application/json"}, timeout=15, verify=False) - if domains_resp.status_code != 200: - return "", "" - data = domains_resp.json() - items = data if isinstance(data, list) else (data.get("hydra:member") or []) - domains = [str(i.get("domain") or "") for i in items if isinstance(i, dict) and i.get("domain") and i.get("isActive", True)] - if not domains: - return "", "" - # 优先使用 duckmail.sbs 主域名,避免临时域名被 OpenAI 封禁 - _preferred = [d for d in domains if "duckmail" in d.lower()] - domain = random.choice(_preferred) if _preferred else random.choice(domains) + domain = self.domain + if not domain: + domains_resp = session.get(f"{self.api_base}/domains", headers={"Accept": "application/json"}, timeout=15, verify=False) + if domains_resp.status_code != 200: + return "", "" + data = domains_resp.json() + items = data if isinstance(data, list) else (data.get("hydra:member") or []) + domains = [str(i.get("domain") or "") for i in items if isinstance(i, dict) and i.get("domain") and i.get("isActive", True)] + if not domains: + return "", "" + # 优先使用 duckmail.sbs 主域名,避免临时域名被 OpenAI 封禁 + _preferred = [d for d in domains if "duckmail" in d.lower()] + domain = random.choice(_preferred) if _preferred else random.choice(domains) local = f"oc{secrets.token_hex(5)}" email = f"{local}@{domain}" @@ -793,6 +796,7 @@ def create_provider_by_name(provider_type: str, mail_cfg: Dict[str, Any]) -> Mai return DuckMailProvider( api_base=api_base or "https://api.duckmail.sbs", bearer_token=str(mail_cfg.get("bearer_token", "")).strip(), + domain=str(mail_cfg.get("domain", "")).strip(), ) elif provider_type == "cloudflare_temp_email": return CloudflareTempEmailProvider( diff --git a/openai_pool_orchestrator/static/index.html b/openai_pool_orchestrator/static/index.html index eabdf1e..66554ab 100755 --- a/openai_pool_orchestrator/static/index.html +++ b/openai_pool_orchestrator/static/index.html @@ -632,6 +632,11 @@ +