Spaces:
Sleeping
Sleeping
import smtplib | |
from email.mime.text import MIMEText | |
from email.mime.multipart import MIMEMultipart | |
import os | |
from dotenv import load_dotenv | |
from typing import Optional | |
from utils.logging_utils import log_to_file # remplace "import logging" car maintenat les logging sont définis et importés depuis le fichier dédié: logging_utils.py | |
load_dotenv() | |
# Configuration email | |
EMAIL_HOST = os.getenv("EMAIL_HOST", "smtp.gmail.com") | |
EMAIL_PORT = int(os.getenv("EMAIL_PORT", "587")) | |
EMAIL_HOST_USER = os.getenv("EMAIL_HOST_USER") | |
EMAIL_HOST_USER_PASSWORD = os.getenv("EMAIL_HOST_USER_PASSWORD") | |
DEFAULT_FROM_EMAIL = os.getenv("DEFAULT_FROM_EMAIL") | |
""" | |
Le fichier email_utils.py est responsable de l'envoi de tous les emails dans l'application, notamment : | |
Les emails de vérification lors de l'inscription d'un nouvel utilisateur | |
Les emails de réinitialisation de mot de passe quand un utilisateur clique sur "Mot de passe oublié" | |
Les emails de notification (activité du compte, changements de permission, etc.) | |
Pour tester les modifications : | |
Essayez de créer un nouveau compte (pour tester l'email de vérification) | |
Ou cliquez sur "Mot de passe oublié" sur la page de connexion | |
""" | |
# Configuration du logging | |
#logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
# Tentative de chargement du .env | |
env_path = '.env' | |
if os.path.exists(env_path): | |
load_dotenv(env_path) | |
log_to_file(f"Fichier .env trouvé et chargé") | |
# Afficher les variables pour vérification | |
log_to_file(f"EMAIL_HOST: {os.getenv('EMAIL_HOST')}") | |
log_to_file(f"EMAIL_PORT: {os.getenv('EMAIL_PORT')}") | |
log_to_file(f"EMAIL_HOST_USER: {os.getenv('EMAIL_HOST_USER')}") | |
log_to_file(f"DEFAULT_FROM_EMAIL: {os.getenv('DEFAULT_FROM_EMAIL')}") | |
# Ne pas logger le mot de passe pour des raisons de sécurité | |
else: | |
log_to_file(f"Fichier .env non trouvé à l'emplacement: {os.path.abspath(env_path)}") | |
def create_smtp_connection() -> Optional[smtplib.SMTP]: | |
""" | |
Crée et retourne une connexion SMTP sécurisée. | |
""" | |
try: | |
server = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT) | |
server.ehlo() # Identifier le client au serveur | |
server.starttls() # Activer le chiffrement TLS | |
server.login(EMAIL_HOST_USER, EMAIL_HOST_USER_PASSWORD) | |
return server | |
except Exception as e: | |
log_to_file(f"Erreur lors de la connexion SMTP : {str(e)}") | |
return None | |
def send_email(to_email: str, subject: str, html_content: str) -> bool: | |
""" | |
Envoie un email avec un contenu HTML. | |
""" | |
if not all([EMAIL_HOST_USER, EMAIL_HOST_USER_PASSWORD, DEFAULT_FROM_EMAIL]): | |
log_to_file("Configuration email manquante dans le fichier .env") | |
return False | |
try: | |
# Création du message | |
msg = MIMEMultipart('alternative') | |
msg['Subject'] = subject | |
msg['From'] = DEFAULT_FROM_EMAIL | |
msg['To'] = to_email | |
# Ajout du contenu HTML | |
html_part = MIMEText(html_content, 'html') | |
msg.attach(html_part) | |
# Création de la connexion SMTP et envoi | |
server = create_smtp_connection() | |
if not server: | |
return False | |
try: | |
server.send_message(msg) | |
log_to_file(f"Email envoyé avec succès à {to_email}") | |
return True | |
except Exception as e: | |
log_to_file(f"Erreur lors de l'envoi de l'email : {str(e)}") | |
return False | |
finally: | |
try: | |
server.quit() | |
except: | |
pass | |
except Exception as e: | |
log_to_file(f"Erreur lors de la préparation de l'email : {str(e)}") | |
return False |