diff --git a/History/2026-08-26.md b/History/2026-08-26.md index 0ce6c2c..e35d3c2 100644 --- a/History/2026-08-26.md +++ b/History/2026-08-26.md @@ -122,3 +122,15 @@ Found. Redirecting to /v2/login WHITELIST_URL=https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app WHITELIST_TIMEOUT=10 ``` + +## SMTP-алерты + +После включения IMAP в настройках Яндекс Почты SMTP-аутентификация успешно прошла для адресов аккаунта через `smtp.yandex.ru:465` с SSL. + +В KUMA добавлен `POST /alert`: он получает ответ whitelist и отправляет его по SMTP на `SMTP_TO`. Пароль SMTP хранится только в `.env`. + +Добавлена переменная: + +```text +SMTP_TO=tazet@narod.ru +``` diff --git a/src/app.py b/src/app.py index 55f4d39..5aa21a6 100644 --- a/src/app.py +++ b/src/app.py @@ -1,5 +1,8 @@ #!/usr/bin/env python3 import os +import smtplib +import ssl +from email.message import EmailMessage from flask import Flask, jsonify import requests @@ -44,6 +47,22 @@ def check_whitelist(): } +def send_alert(subject, body): + message = EmailMessage() + message["Subject"] = subject + message["From"] = os.environ["SMTP_FROM"] + message["To"] = os.environ["SMTP_TO"] + message.set_content(body) + with smtplib.SMTP_SSL( + os.getenv("SMTP_HOST", "smtp.yandex.ru"), + int(os.getenv("SMTP_PORT", "465")), + context=ssl.create_default_context(), + timeout=10, + ) as smtp: + smtp.login(os.environ["SMTP_USER"], os.environ["SMTP_PASSWORD"]) + smtp.send_message(message) + + @app.get("/") def index(): return jsonify({ @@ -69,6 +88,16 @@ def check(): return jsonify({"ok": False, "url": WHITELIST_URL, "error": str(exc)}), 502 +@app.post("/alert") +def alert(): + payload = requests.get(WHITELIST_URL, timeout=10).text + try: + send_alert("KUMA whitelist alert", payload) + return jsonify({"ok": True, "sent": True}) + except (KeyError, OSError, smtplib.SMTPException) as exc: + return jsonify({"ok": False, "sent": False, "error": str(exc)}), 502 + + @app.get("/mariadb") def mariadb(): return jsonify(mariadb_configuration())