import base64 import os from email.mime.text import MIMEText from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from googleapiclient.discovery import build # Client ID / secret à stocker dans les secrets HF (cf. variables d’environnement du Space) CLIENT_ID = os.getenv("GMAIL_CLIENT_ID") CLIENT_SECRET = os.getenv("GMAIL_CLIENT_SECRET") def authenticate_gmail(sender_email, refresh_token): creds_data = { "token": "", "refresh_token": refresh_token, "token_uri": "https://oauth2.googleapis.com/token", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "scopes": ["https://www.googleapis.com/auth/gmail.send"] } creds = Credentials.from_authorized_user_info(info=creds_data) if not creds.valid and creds.expired and creds.refresh_token: creds.refresh(Request()) service = build("gmail", "v1", credentials=creds) return service def send_email(sender_email, to_email, subject, body, refresh_token): try: service = authenticate_gmail(sender_email, refresh_token) message = MIMEText(body) message["to"] = to_email message["from"] = sender_email message["subject"] = subject raw_message = base64.urlsafe_b64encode(message.as_bytes()).decode() send_body = {"raw": raw_message} sent = service.users().messages().send(userId="me", body=send_body).execute() return True, f"✅ Email envoyé à {to_email} (ID: {sent['id']})" except Exception as e: return False, f"❌ Erreur d'envoi : {e}"