메일 알림 시스템 추가
This commit is contained in:
parent
ddf12a851c
commit
3bf38c50df
22 changed files with 1769 additions and 31 deletions
|
|
@ -219,6 +219,28 @@ class Settings(BaseSettings):
|
|||
validation_alias="USER_UPLOAD_DIR",
|
||||
)
|
||||
|
||||
# ── 운영 메일 알림 ─────────────────────────────────────
|
||||
notification_email_provider: Literal["disabled", "smtp"] = Field(
|
||||
default="disabled",
|
||||
validation_alias="NOTIFICATION_EMAIL_PROVIDER",
|
||||
)
|
||||
notification_email_max_attempts: int = Field(
|
||||
default=3,
|
||||
validation_alias="NOTIFICATION_EMAIL_MAX_ATTEMPTS",
|
||||
)
|
||||
notification_email_retry_seconds: int = Field(
|
||||
default=900,
|
||||
validation_alias="NOTIFICATION_EMAIL_RETRY_SECONDS",
|
||||
)
|
||||
smtp_host: str = Field(default="", validation_alias="SMTP_HOST")
|
||||
smtp_port: int = Field(default=587, validation_alias="SMTP_PORT")
|
||||
smtp_username: str = Field(default="", validation_alias="SMTP_USERNAME")
|
||||
smtp_password: str = Field(default="", validation_alias="SMTP_PASSWORD")
|
||||
smtp_from_email: str = Field(default="", validation_alias="SMTP_FROM_EMAIL")
|
||||
smtp_from_name: str = Field(default="Vignette", validation_alias="SMTP_FROM_NAME")
|
||||
smtp_starttls: bool = Field(default=True, validation_alias="SMTP_STARTTLS")
|
||||
smtp_ssl: bool = Field(default=False, validation_alias="SMTP_SSL")
|
||||
|
||||
# ── CORS (정적 프론트 + SSE 분리경로) ────────────────
|
||||
cors_origins: list[str] = Field(
|
||||
default=[
|
||||
|
|
@ -278,9 +300,16 @@ class Settings(BaseSettings):
|
|||
for origin in self.frontend_origin_map.values()
|
||||
):
|
||||
forbidden.append("FRONTEND_ORIGIN_MAP")
|
||||
if self.notification_email_provider == "smtp":
|
||||
if not self.smtp_host.strip():
|
||||
forbidden.append("SMTP_HOST")
|
||||
if not self.smtp_from_email.strip():
|
||||
forbidden.append("SMTP_FROM_EMAIL")
|
||||
if forbidden:
|
||||
joined = ", ".join(forbidden)
|
||||
raise ValueError(f"{joined} must be production-safe when ENVIRONMENT={self.environment}")
|
||||
if self.smtp_ssl and self.smtp_starttls:
|
||||
raise ValueError("SMTP_SSL and SMTP_STARTTLS cannot both be true")
|
||||
if self.auth_saml_enabled:
|
||||
missing_saml: list[str] = []
|
||||
if not self.saml_sp_entity_id.strip():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue