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"""

Alerte Serveur - Aethas38

Niveau : {niveau}

Module/Source : {source}

Détail de l'erreur :

{message_erreur}

Notification automatique de l'Orchestrateur

""" 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}")