From bfd91634bbcdd80c6b5d706bcb12054dc8505f78 Mon Sep 17 00:00:00 2001
From: Admin MPCZ
Date: Thu, 7 May 2026 22:04:15 +0200
Subject: [PATCH] feat(settings/smtp): bouton Test SMTP dans Settings (envoi
mail HTML pro a destinataire)
- Endpoint POST /settings/smtp/test (Form 'recipient', defaut kalid.moutaouakil@gmail.com)
envoie un mail HTML pro confirmant que SMTP fonctionne (header bleu degrade,
metadonnees envoyeur/date/destinataire en card)
- UI Settings > SMTP: champ destinataire test pre-rempli + bouton 'Envoyer test'
AJAX sans reload, status vert/rouge en dessous
- Reuse send_html_mail du mail_service
---
app/routers/settings.py | 55 +++++++++++++++++++++++++++++++++++++
app/templates/settings.html | 40 +++++++++++++++++++++++++++
2 files changed, 95 insertions(+)
diff --git a/app/routers/settings.py b/app/routers/settings.py
index 5f0b902..cab231f 100644
--- a/app/routers/settings.py
+++ b/app/routers/settings.py
@@ -238,6 +238,61 @@ async def settings_save(request: Request, section: str, db=Depends(get_db)):
return templates.TemplateResponse("settings.html", ctx)
+@router.post("/settings/smtp/test")
+async def settings_smtp_test(request: Request, db=Depends(get_db),
+ recipient: str = Form("kalid.moutaouakil@gmail.com")):
+ """Envoie un mail test à `recipient` pour valider la config SMTP."""
+ from fastapi.responses import JSONResponse
+ user = get_current_user(request)
+ if not user:
+ return JSONResponse({"ok": False, "msg": "Non authentifié"}, status_code=401)
+ perms = get_user_perms(db, user)
+ if not can_edit(perms, "settings"):
+ return JSONResponse({"ok": False, "msg": "Permission refusée"}, status_code=403)
+ to = (recipient or "").strip()
+ if not to:
+ return JSONResponse({"ok": False, "msg": "Destinataire vide"}, status_code=400)
+
+ sender = user.get("sub") or user.get("username") or "PatchCenter"
+ from datetime import datetime as _dt
+ now_str = _dt.now().strftime("%d/%m/%Y %H:%M:%S")
+
+ subject = f"[PatchCenter] Test SMTP — {now_str}"
+ html = f"""
+
+|
+ SANEF — SecOps · PatchCenter
+ ✅ Test SMTP réussi
+ |
+|
+ Bonjour,
+ Ce mail confirme que la configuration SMTP de PatchCenter fonctionne correctement.
+
+
+
+ | Envoyé par : |
+ {sender} |
+ | Date d'envoi : |
+ {now_str} |
+ | Destinataire : |
+ {to} |
+
+ |
+
+ Tu peux maintenant utiliser le bouton "Prévenance PCT" sur la page d'import patching.
+ Cordialement, L'équipe SecOps SANEF
+ |
+
+ Mail de test généré par PatchCenter via /settings/smtp/test.
+ |
+
"""
+
+ from ..services.mail_service import send_html_mail
+ res = send_html_mail(db, to=[to], subject=subject, html=html)
+ return JSONResponse(res)
+
+
@router.post("/settings/ldap/test")
async def settings_ldap_test(request: Request, db=Depends(get_db)):
"""Teste la connexion LDAP avec le compte de bind."""
diff --git a/app/templates/settings.html b/app/templates/settings.html
index bd5a1bb..0f050c4 100644
--- a/app/templates/settings.html
+++ b/app/templates/settings.html
@@ -709,6 +709,46 @@
{% if editable.smtp %}{% endif %}
+
+ {% if editable.smtp %}
+
+
Test envoi SMTP
+
+
+
+
+
+
+
+
+
+
+ {% endif %}
{% endif %}