refactor(config): 优化Outlook提供者优先级和验证码匹配逻辑

- 调整Outlook提供者优先级:IMAP_OLD > IMAP_NEW > Graph API
- 增强OpenAI验证邮件发件人匹配模式,支持子域名
- 改进Graph API提供者的401错误处理,避免因权限不足误判
- 修复配置解析中的类型转换问题
This commit is contained in:
cnlimiter
2026-03-15 19:10:53 +08:00
parent 1628552b92
commit 2f2fb51764
4 changed files with 32 additions and 10 deletions

View File

@@ -132,7 +132,8 @@ OTP_CODE_SEMANTIC_PATTERN = r'(?:code\s+is|验证码[是为]?\s*[:]?\s*)(\d{6
OPENAI_EMAIL_SENDERS = [
"noreply@openai.com",
"no-reply@openai.com",
"@openai.com", # 通配符匹配
"@openai.com", # 精确域名匹配
".openai.com", # 子域名匹配(如 otp@tm1.openai.com
]
# OpenAI 验证邮件关键词

View File

@@ -301,7 +301,7 @@ SETTING_DEFINITIONS: Dict[str, SettingDefinition] = {
# Outlook 配置
"outlook_provider_priority": SettingDefinition(
db_key="outlook.provider_priority",
default_value=["graph_api", "imap_new", "imap_old"],
default_value=["imap_old", "imap_new", "graph_api"],
category=SettingCategory.EMAIL,
description="Outlook 提供者优先级"
),
@@ -373,13 +373,31 @@ def _convert_value(attr_name: str, value: str) -> Any:
elif target_type == dict:
if isinstance(value, dict):
return value
if not value:
return {}
import json
return json.loads(value) if value else {}
import ast
try:
return json.loads(value)
except (json.JSONDecodeError, ValueError):
try:
return ast.literal_eval(value)
except Exception:
return {}
elif target_type == list:
if isinstance(value, list):
return value
if not value:
return []
import json
return json.loads(value) if value else []
import ast
try:
return json.loads(value)
except (json.JSONDecodeError, ValueError):
try:
return ast.literal_eval(value)
except Exception:
return []
else:
return value
@@ -568,7 +586,7 @@ class Settings(BaseModel):
email_code_poll_interval: int = 3
# Outlook 配置
outlook_provider_priority: List[str] = ["graph_api", "imap_new", "imap_old"]
outlook_provider_priority: List[str] = ["imap_old", "imap_new", "graph_api"]
outlook_health_failure_threshold: int = 5
outlook_health_disable_duration: int = 60
outlook_default_client_id: str = "24d9a0ed-8787-4584-883c-2fd79308940a"