import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from config import settings import logging logger = logging.getLogger(__name__) class AuthEmailService: @staticmethod def _send_email(to: str, subject: str, html_body: str) -> bool: try: msg = MIMEMultipart() msg["From"] = settings.smtp_from msg["To"] = to msg["Subject"] = subject msg.attach(MIMEText(html_body, "html")) with smtplib.SMTP( settings.smtp_host, settings.smtp_port, timeout=30 ) as server: if settings.smtp_use_tls: server.starttls() if settings.smtp_user and settings.smtp_password: server.login(settings.smtp_user, settings.smtp_password) server.send_message(msg) logger.info(f" Email envoyé: {subject} → {to}") return True except Exception as e: logger.error(f" Erreur envoi email: {e}") return False @staticmethod def send_verification_email(email: str, token: str, base_url: str) -> bool: verification_link = f"{base_url}/auth/verify-email?token={token}" html_body = f"""

🎉 Bienvenue sur Sage Dataven

Vérifiez votre adresse email

Merci de vous être inscrit ! Pour activer votre compte, veuillez cliquer sur le bouton ci-dessous :

Vérifier mon email

Ou copiez ce lien dans votre navigateur :

{verification_link}

Ce lien expire dans 24 heures

Si vous n'avez pas créé de compte, ignorez cet email.

""" return AuthEmailService._send_email( email, " Vérifiez votre adresse email - Sage Dataven", html_body ) @staticmethod def send_password_reset_email(email: str, token: str, base_url: str) -> bool: reset_link = f"{base_url}/reset?token={token}" html_body = f"""

Réinitialisation de mot de passe

Demande de réinitialisation

Vous avez demandé à réinitialiser votre mot de passe. Cliquez sur le bouton ci-dessous pour créer un nouveau mot de passe :

Réinitialiser mon mot de passe

Ou copiez ce lien dans votre navigateur :

{reset_link}

Ce lien expire dans 1 heure

Si vous n'avez pas demandé cette réinitialisation, ignorez cet email. Votre mot de passe actuel reste inchangé.

""" return AuthEmailService._send_email( email, " Réinitialisation de votre mot de passe - Sage Dataven", html_body ) @staticmethod def send_password_changed_notification(email: str) -> bool: html_body = """

Mot de passe modifié

Votre mot de passe a été changé avec succès

Ce message confirme que le mot de passe de votre compte Sage Dataven a été modifié.

Si vous n'êtes pas à l'origine de ce changement, contactez immédiatement notre support.

""" return AuthEmailService._send_email( email, " Votre mot de passe a été modifié - Sage Dataven", html_body )