Spaces:
Sleeping
Sleeping
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}" | |