feat(auth): подтверждение email + актуализация SMTP/Ollama конфигов
- Резенд письма верификации (/auth/resend-verification), модалка на фронте с поллингом статуса, страница /verify-email/:token - SMTP переведён на собственный Postfix (mail.jze9mail.ru, STARTTLS, SMTP_TLS_VERIFY) вместо Yandex-заглушки в дефолтах и .env.example - OLLAMA_URL и модель в worker-gpu синхронизированы с новым GPU-хостом (llama3:8b -> qwen2.5:7b, которой раньше не было на сервере) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -24,11 +24,12 @@ class Settings(BaseSettings):
|
||||
RABBITMQ_URL: str = "amqp://guest:guest@rabbitmq:5672/"
|
||||
|
||||
# SMTP
|
||||
SMTP_HOST: str = "smtp.yandex.ru"
|
||||
SMTP_PORT: int = 465
|
||||
SMTP_USER: str = "noreply@jze9.ru"
|
||||
SMTP_HOST: str = "mail.jze9mail.ru"
|
||||
SMTP_PORT: int = 587
|
||||
SMTP_USER: str = "noreply"
|
||||
SMTP_PASSWORD: str = "changeme"
|
||||
SMTP_FROM: str = "noreply@jze9.ru"
|
||||
SMTP_FROM: str = "noreply@jze9mail.ru"
|
||||
SMTP_TLS_VERIFY: bool = True
|
||||
|
||||
# App
|
||||
APP_URL: str = "https://academic.jze9.ru"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import logging
|
||||
import smtplib
|
||||
import ssl
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.text import MIMEText
|
||||
|
||||
@@ -37,9 +38,22 @@ class EmailSender:
|
||||
msg.attach(MIMEText(html_body, "html", "utf-8"))
|
||||
|
||||
try:
|
||||
with smtplib.SMTP_SSL(settings.SMTP_HOST, settings.SMTP_PORT) as smtp:
|
||||
smtp.login(settings.SMTP_USER, settings.SMTP_PASSWORD)
|
||||
smtp.send_message(msg)
|
||||
tls_ctx = ssl.create_default_context()
|
||||
if not settings.SMTP_TLS_VERIFY:
|
||||
tls_ctx.check_hostname = False
|
||||
tls_ctx.verify_mode = ssl.CERT_NONE
|
||||
|
||||
if settings.SMTP_PORT == 465:
|
||||
with smtplib.SMTP_SSL(settings.SMTP_HOST, settings.SMTP_PORT, context=tls_ctx) as smtp:
|
||||
smtp.login(settings.SMTP_USER, settings.SMTP_PASSWORD)
|
||||
smtp.send_message(msg)
|
||||
else:
|
||||
with smtplib.SMTP(settings.SMTP_HOST, settings.SMTP_PORT) as smtp:
|
||||
smtp.ehlo()
|
||||
smtp.starttls(context=tls_ctx)
|
||||
smtp.ehlo()
|
||||
smtp.login(settings.SMTP_USER, settings.SMTP_PASSWORD)
|
||||
smtp.send_message(msg)
|
||||
logger.info(f"Email отправлен: {to_email!r}, тема: {subject!r}")
|
||||
except smtplib.SMTPException as e:
|
||||
logger.error(f"SMTP ошибка при отправке письма на {to_email!r}: {e}")
|
||||
|
||||
Reference in New Issue
Block a user