Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions codex_register.spec
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ a = Analysis(
'src.core.utils',
'src.services.base',
'src.services.tempmail',
'src.services.yyds_mail',
'src.services.moe_mail',
'src.services.outlook',
'src.services.outlook.account',
Expand Down
8 changes: 8 additions & 0 deletions src/config/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class TaskStatus(str, Enum):
class EmailServiceType(str, Enum):
"""邮箱服务类型"""
TEMPMAIL = "tempmail"
YYDS_MAIL = "yyds_mail"
OUTLOOK = "outlook"
MOE_MAIL = "moe_mail"
TEMP_MAIL = "temp_mail"
Expand Down Expand Up @@ -106,6 +107,13 @@ class EmailServiceType(str, Enum):
"timeout": 30,
"max_retries": 3,
},
"yyds_mail": {
"base_url": "https://maliapi.215.im/v1",
"api_key": "",
"default_domain": "",
"timeout": 30,
"max_retries": 3,
},
"outlook": {
"imap_server": "outlook.office365.com",
"imap_port": 993,
Expand Down
58 changes: 56 additions & 2 deletions src/config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,12 +258,18 @@ class SettingDefinition:
# 邮箱服务配置
"email_service_priority": SettingDefinition(
db_key="email.service_priority",
default_value={"tempmail": 0, "outlook": 1, "moe_mail": 2},
default_value={"tempmail": 0, "yyds_mail": 1, "outlook": 2, "moe_mail": 3},
category=SettingCategory.EMAIL,
description="邮箱服务优先级"
),

# Tempmail.lol 配置
"tempmail_enabled": SettingDefinition(
db_key="tempmail.enabled",
default_value=True,
category=SettingCategory.TEMPMAIL,
description="是否启用 Tempmail 渠道"
),
"tempmail_base_url": SettingDefinition(
db_key="tempmail.base_url",
default_value="https://api.tempmail.lol/v2",
Expand All @@ -282,6 +288,43 @@ class SettingDefinition:
category=SettingCategory.TEMPMAIL,
description="Tempmail 最大重试次数"
),
"yyds_mail_enabled": SettingDefinition(
db_key="yyds_mail.enabled",
default_value=False,
category=SettingCategory.TEMPMAIL,
description="是否启用 YYDS Mail 渠道"
),
"yyds_mail_base_url": SettingDefinition(
db_key="yyds_mail.base_url",
default_value="https://maliapi.215.im/v1",
category=SettingCategory.TEMPMAIL,
description="YYDS Mail API 地址"
),
"yyds_mail_api_key": SettingDefinition(
db_key="yyds_mail.api_key",
default_value="",
category=SettingCategory.TEMPMAIL,
description="YYDS Mail API Key",
is_secret=True
),
"yyds_mail_default_domain": SettingDefinition(
db_key="yyds_mail.default_domain",
default_value="",
category=SettingCategory.TEMPMAIL,
description="YYDS Mail 默认域名"
),
"yyds_mail_timeout": SettingDefinition(
db_key="yyds_mail.timeout",
default_value=30,
category=SettingCategory.TEMPMAIL,
description="YYDS Mail 超时时间(秒)"
),
"yyds_mail_max_retries": SettingDefinition(
db_key="yyds_mail.max_retries",
default_value=3,
category=SettingCategory.TEMPMAIL,
description="YYDS Mail 最大重试次数"
),

# 自定义域名邮箱配置
"custom_domain_base_url": SettingDefinition(
Expand Down Expand Up @@ -408,8 +451,12 @@ class SettingDefinition:
"registration_sleep_max": int,
"registration_entry_flow": str,
"email_service_priority": dict,
"tempmail_enabled": bool,
"tempmail_timeout": int,
"tempmail_max_retries": int,
"yyds_mail_enabled": bool,
"yyds_mail_timeout": int,
"yyds_mail_max_retries": int,
"tm_enabled": bool,
"cpa_enabled": bool,
"email_code_timeout": int,
Expand Down Expand Up @@ -673,12 +720,19 @@ def proxy_url(self) -> Optional[str]:
registration_entry_flow: str = "native"

# 邮箱服务配置
email_service_priority: Dict[str, int] = {"tempmail": 0, "outlook": 1, "moe_mail": 2}
email_service_priority: Dict[str, int] = {"tempmail": 0, "yyds_mail": 1, "outlook": 2, "moe_mail": 3}

# Tempmail.lol 配置
tempmail_enabled: bool = True
tempmail_base_url: str = "https://api.tempmail.lol/v2"
tempmail_timeout: int = 30
tempmail_max_retries: int = 3
yyds_mail_enabled: bool = False
yyds_mail_base_url: str = "https://maliapi.215.im/v1"
yyds_mail_api_key: Optional[SecretStr] = None
yyds_mail_default_domain: str = ""
yyds_mail_timeout: int = 30
yyds_mail_max_retries: int = 3

# 自定义域名邮箱配置
custom_domain_base_url: str = ""
Expand Down
3 changes: 3 additions & 0 deletions src/services/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
EmailServiceType
)
from .tempmail import TempmailService
from .yyds_mail import YYDSMailService
from .outlook import OutlookService
from .moe_mail import MeoMailEmailService
from .temp_mail import TempMailService
Expand All @@ -21,6 +22,7 @@

# 注册服务
EmailServiceFactory.register(EmailServiceType.TEMPMAIL, TempmailService)
EmailServiceFactory.register(EmailServiceType.YYDS_MAIL, YYDSMailService)
EmailServiceFactory.register(EmailServiceType.OUTLOOK, OutlookService)
EmailServiceFactory.register(EmailServiceType.MOE_MAIL, MeoMailEmailService)
EmailServiceFactory.register(EmailServiceType.TEMP_MAIL, TempMailService)
Expand Down Expand Up @@ -55,6 +57,7 @@
'EmailServiceType',
# 服务类
'TempmailService',
'YYDSMailService',
'OutlookService',
'MeoMailEmailService',
'TempMailService',
Expand Down
13 changes: 12 additions & 1 deletion src/services/tempmail.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import logging
from typing import Optional, Dict, Any, List
import json
import os

from curl_cffi import requests as cffi_requests

Expand Down Expand Up @@ -48,6 +49,12 @@ def __init__(self, config: Dict[str, Any] = None, name: str = None):

self.config = {**default_config, **(config or {})}

# ←←← 最终优化:API Key 完全可选(付费/免费自动切换)↓↓↓
self.api_key = self.config.get("api_key") or os.getenv("TEMPMail_API_KEY")
if self.api_key:
logger.info(f"✅ Tempmail.lol Plus/Ultra 已加载 API Key: {self.api_key[:30]}...")
# 没 Key 时不打印任何警告,直接走免费模式(符合你的需求)

# 创建 HTTP 客户端
http_config = RequestConfig(
timeout=self.config["timeout"],
Expand Down Expand Up @@ -83,6 +90,7 @@ def create_email(self, config: Dict[str, Any] = None) -> Dict[str, Any]:
headers={
"Accept": "application/json",
"Content-Type": "application/json",
**({"Authorization": f"Bearer {self.api_key}"} if self.api_key else {}),
},
json={}
)
Expand Down Expand Up @@ -163,7 +171,10 @@ def get_verification_code(
response = self.http_client.get(
f"{self.config['base_url']}/inbox",
params={"token": token},
headers={"Accept": "application/json"}
headers={
"Accept": "application/json",
**({"Authorization": f"Bearer {self.api_key}"} if self.api_key else {}),
}
)

if response.status_code != 200:
Expand Down
Loading
Loading