File size: 3,696 Bytes
fe4792e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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