feat(config): load mail provider api keys from env
This commit is contained in:
12
README.md
12
README.md
@@ -49,6 +49,12 @@ SOCKS5_PROXY=socks5://user:pass@host:port
|
||||
# 临时邮箱服务(可选:vmail / mailtm / yyds)
|
||||
MAIL_PROVIDER=vmail
|
||||
|
||||
# vmail.dev(MAIL_PROVIDER=vmail 时需要)
|
||||
VMAIL_API_KEY=your_vmail_api_key
|
||||
|
||||
# YYDS Mail(MAIL_PROVIDER=yyds 时需要)
|
||||
YYDS_API_KEY=your_yyds_api_key
|
||||
|
||||
# YesCaptcha(注册功能需要)
|
||||
YESCAPTCHA_API_KEY=your_key_here
|
||||
|
||||
@@ -61,9 +67,9 @@ CURRENCY=usd
|
||||
|
||||
| Provider | `MAIL_PROVIDER` 值 | 说明 |
|
||||
|---|---|---|
|
||||
| vmail.dev | `vmail` | 默认选项;注册时会返回 `mailbox_id`,部分邮箱还会返回 `mailbox_password` |
|
||||
| mail.tm | `mailtm` | 支持自动创建邮箱并轮询 OTP |
|
||||
| YYDS Mail | `yyds` | 支持自动创建邮箱并轮询 OTP |
|
||||
| vmail.dev | `vmail` | 需要 `VMAIL_API_KEY`;注册时会返回 `mailbox_id`,部分邮箱还会返回 `mailbox_password` |
|
||||
| mail.tm | `mailtm` | 不需要 API key;支持自动创建邮箱并轮询 OTP |
|
||||
| YYDS Mail | `yyds` | 需要 `YYDS_API_KEY`;支持自动创建邮箱并轮询 OTP |
|
||||
|
||||
> `register` / `checkout` 都支持以上三种 provider。
|
||||
> `codex-login` 如需自动拉取邮箱 OTP,建议优先使用 `vmail` 或 `yyds`;`mailtm` 当前更适合手动通过 `--otp` 传入验证码。
|
||||
|
||||
@@ -4,6 +4,7 @@ from pydantic import Field
|
||||
|
||||
class Settings(BaseSettings):
|
||||
vmail_api_key: str = Field(default="", env="VMAIL_API_KEY")
|
||||
yyds_api_key: str = Field(default="", env="YYDS_API_KEY")
|
||||
yescaptcha_api_key: str = Field(default="", env="YESCAPTCHA_API_KEY")
|
||||
socks5_proxy: str = Field(default="", env="SOCKS5_PROXY")
|
||||
mail_provider: str = Field(default="vmail", env="MAIL_PROVIDER") # "vmail", "mailtm", or "yyds"
|
||||
|
||||
@@ -5,16 +5,26 @@ from abc import ABC, abstractmethod
|
||||
|
||||
import httpx
|
||||
|
||||
try:
|
||||
from .config import settings
|
||||
except ImportError: # pragma: no cover - allow direct script execution from source tree
|
||||
from config import settings
|
||||
|
||||
# vmail.dev config
|
||||
VMAIL_BASE = "https://vmail.dev/api/v1"
|
||||
VMAIL_API_KEY = "vmail_UCjaCMZghzKaH5KrRlKXyxkrCO7ZNesV"
|
||||
|
||||
# mail.tm config
|
||||
MAILTM_BASE = "https://api.mail.tm"
|
||||
|
||||
# yyds mail config
|
||||
YYDS_BASE = "https://maliapi.215.im"
|
||||
YYDS_API_KEY = "AC-4a23c58b8f84c19a27ef509e"
|
||||
|
||||
|
||||
def _require_api_key(provider: str, env_name: str, value: str) -> str:
|
||||
api_key = value.strip()
|
||||
if api_key:
|
||||
return api_key
|
||||
raise RuntimeError(f"{provider} requires {env_name} to be set in the environment or .env")
|
||||
|
||||
|
||||
class BaseMailClient(ABC):
|
||||
@@ -39,7 +49,7 @@ class VMailClient(BaseMailClient):
|
||||
"""vmail.dev temporary email client."""
|
||||
|
||||
def __init__(self):
|
||||
self.api_key = VMAIL_API_KEY
|
||||
self.api_key = _require_api_key("vmail.dev", "VMAIL_API_KEY", settings.vmail_api_key)
|
||||
self.headers = {"X-API-Key": self.api_key}
|
||||
self.base = VMAIL_BASE
|
||||
|
||||
@@ -249,7 +259,7 @@ class YYDSMailClient(BaseMailClient):
|
||||
"""YYDS Mail temporary email client (maliapi.215.im)."""
|
||||
|
||||
def __init__(self):
|
||||
self.api_key = YYDS_API_KEY
|
||||
self.api_key = _require_api_key("YYDS Mail", "YYDS_API_KEY", settings.yyds_api_key)
|
||||
self.headers = {"X-API-Key": self.api_key}
|
||||
self.base = YYDS_BASE
|
||||
|
||||
|
||||
Reference in New Issue
Block a user