Public Access
66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
import os
|
|
import smtplib
|
|
from email.mime.text import MIMEText
|
|
from email.mime.multipart import MIMEMultipart
|
|
|
|
DEBUG_MAIL_ACTIVE = True
|
|
|
|
def envoyer_alerte_debug(niveau, source, message_erreur):
|
|
"""
|
|
Envoie un e-mail à l'administrateur.
|
|
Gère le chiffrement (Port 587) et le relai interne sans mot de passe (Port 25).
|
|
"""
|
|
if not DEBUG_MAIL_ACTIVE:
|
|
return
|
|
|
|
email_admin = os.getenv("ADMIN_EMAIL", "votre-email@domaine.com")
|
|
smtp_serveur = os.getenv("SMTP_SERVER", "192.168.1.20")
|
|
smtp_port = int(os.getenv("SMTP_PORT", 587))
|
|
smtp_user = os.getenv("SMTP_USER", "")
|
|
smtp_pass = os.getenv("SMTP_PASS", "")
|
|
|
|
if not smtp_serveur:
|
|
print(f"[{niveau}] [DEBUG_MAILER] Serveur SMTP absent. Alerte annulée.")
|
|
return
|
|
|
|
sujet = f"[ALERTE {niveau}] Aethas38_Multi_IA - Erreur dans {source}"
|
|
corps_html = f"""
|
|
<html>
|
|
<body>
|
|
<h2 style="color: {'red' if niveau == 'CRITICAL' else 'orange'};">Alerte Serveur - Aethas38</h2>
|
|
<p><strong>Niveau :</strong> {niveau}</p>
|
|
<p><strong>Module/Source :</strong> {source}</p>
|
|
<p><strong>Détail de l'erreur :</strong></p>
|
|
<div style="background-color: #f4f4f4; padding: 10px; border-left: 4px solid red; font-family: monospace;">
|
|
{message_erreur}
|
|
</div>
|
|
<br>
|
|
<p><em>Notification automatique de l'Orchestrateur</em></p>
|
|
</body>
|
|
</html>
|
|
"""
|
|
|
|
msg = MIMEMultipart()
|
|
# Si pas d'utilisateur défini, on utilise une adresse générique pour le relai interne
|
|
msg['From'] = smtp_user if smtp_user else "orchestrateur@aethas38.duckdns.org"
|
|
msg['To'] = email_admin
|
|
msg['Subject'] = sujet
|
|
msg.attach(MIMEText(corps_html, 'html'))
|
|
|
|
try:
|
|
server = smtplib.SMTP(smtp_serveur, smtp_port)
|
|
|
|
# Logique de routage intelligent selon le port
|
|
if smtp_port == 587:
|
|
server.starttls()
|
|
if smtp_user and smtp_pass:
|
|
server.login(smtp_user, smtp_pass)
|
|
elif smtp_port == 25:
|
|
# Sur le port 25 en réseau local, Mailu s'attend souvent à un simple relai sans LOGIN
|
|
pass
|
|
|
|
server.send_message(msg)
|
|
server.quit()
|
|
print(f"[{niveau}] Alerte e-mail envoyée avec succès à l'admin.")
|
|
except Exception as e:
|
|
print(f"ÉCHEC CRITIQUE : Impossible d'envoyer l'alerte e-mail : {e}") |