File size: 2,145 Bytes
ae80451
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from smolagents import tool  # HF agents framework

def get_gmail_service():
    creds = Credentials(
        token=None,
        refresh_token=os.environ["GMAIL_REFRESH_TOKEN"],
        client_id=os.environ["GMAIL_CLIENT_ID"],
        client_secret=os.environ["GMAIL_CLIENT_SECRET"],
        token_uri="https://oauth2.googleapis.com/token",
    )
    return build("gmail", "v1", credentials=creds)

@tool
def read_latest_emails(max_results: int = 5) -> str:
    """Reads the latest emails from Gmail inbox.
    
    Args:
        max_results: Number of emails to fetch (default 5)
    
    Returns:
        A summary of recent emails
    """
    service = get_gmail_service()
    results = service.users().messages().list(
        userId="me", maxResults=max_results, labelIds=["INBOX"]
    ).execute()
    
    messages = results.get("messages", [])
    summaries = []
    
    for msg in messages:
        detail = service.users().messages().get(
            userId="me", id=msg["id"], format="metadata",
            metadataHeaders=["From", "Subject", "Date"]
        ).execute()
        headers = {h["name"]: h["value"] for h in detail["payload"]["headers"]}
        summaries.append(
            f"From: {headers.get('From')}\n"
            f"Subject: {headers.get('Subject')}\n"
            f"Date: {headers.get('Date')}"
        )
    
    return "\n\n".join(summaries)

@tool
def send_email(to: str, subject: str, body: str) -> str:
    """Sends an email via Gmail.
    
    Args:
        to: Recipient email address
        subject: Email subject
        body: Email body text
    
    Returns:
        Success or error message
    """
    import base64
    from email.mime.text import MIMEText
    
    service = get_gmail_service()
    message = MIMEText(body)
    message["to"] = to
    message["subject"] = subject
    
    raw = base64.urlsafe_b64encode(message.as_bytes()).decode()
    service.users().messages().send(
        userId="me", body={"raw": raw}
    ).execute()
    
    return f"Email sent to {to} successfully!"