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}" | |