Email_Sender / email_sender.py
Marylene's picture
FIX
73a7679
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}"