Files
platform/seed/skills/google-mail-api
2026-02-24 21:47:36 +00:00
..
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00
2026-02-24 21:47:36 +00:00

Google Mail API Skill

Complete documentation for the Gmail API with support for both Python and Node.js/TypeScript.

Files

  • SKILL.md - Python implementation with google-api-python-client
  • SKILL-nodejs.md - Node.js/TypeScript implementation with googleapis
  • README.md - This file

Quick Comparison

Feature Python Node.js/TypeScript
Installation pip install google-api-python-client npm install googleapis google-auth-library
Authentication OAuth 2.0 with token caching OAuth 2.0 with token caching
Type Safety Dynamic typing Full TypeScript support
Performance Slower Faster, async/await native
Use Cases Scripts, automation, legacy Modern web, backends, real-time
Dependencies google-api-python-client, google-auth-oauthlib googleapis, google-auth-library
Maintenance Maintained Actively maintained

Which Should I Use?

Choose Python if:

  • You're already in a Python environment (Jupyter, scripts)
  • You're doing data analysis with pandas
  • You prefer simpler blocking APIs
  • You need to integrate with existing Python tools

Choose Node.js/TypeScript if:

  • You're building a web service or API
  • You want async/await and promises
  • You need type safety (TypeScript)
  • You're already using Node.js
  • You need better performance
  • You want to build real-time features

Core Differences

Authentication

Python:

service = authenticate()  # Returns service object

Node.js/TypeScript:

const auth = await authenticate();  // Returns OAuth2Client
const gmail = google.gmail({ version: "v1", auth });

Making API Calls

Python:

results = service.users().messages().list(userId="me").execute()

Node.js/TypeScript:

const results = await gmail.users.messages.list({ userId: "me" });

Handling Responses

Python:

messages = results.get("messages", [])

Node.js/TypeScript:

const messages = results.data.messages || [];

Common Tasks

All recipes are available in both:

  • SKILL.md (Python versions)
  • SKILL-nodejs.md (Node.js/TypeScript versions)

Available Recipes

  1. List Labels
  2. List Messages in Inbox
  3. Get Full Message
  4. Send a Message
  5. Send Email with Attachment
  6. Create Draft
  7. Apply Label to Message
  8. List Threads
  9. Get Thread Messages in Order
  10. Search Messages
  11. Create Custom Label
  12. Modify Thread Labels
  13. Move Message to Trash
  14. Delete Message Permanently
  15. Batch Modify Messages
  16. Get User Profile

Authentication Setup (Both Languages)

1. Create Google Cloud Project

  • Go to Google Cloud Console
  • Create new project
  • Enable Gmail API
  • Create OAuth 2.0 credentials (Desktop Application)
  • Download credentials file as credentials.json

2. Set Scopes

https://www.googleapis.com/auth/gmail.modify
https://www.googleapis.com/auth/gmail.send
https://www.googleapis.com/auth/gmail.readonly

3. First Run

Both implementations will prompt you to authorize via your browser and save a token for future use.

Helper Classes/Utilities

Node.js: GmailHelper Class

Already provided in SKILL-nodejs.md. Wraps common operations:

const helper = new GmailHelper(auth);
await helper.sendMessage(to, subject, body);
await helper.applyLabel(messageId, labelName);
await helper.listInboxMessages(10);

Python: Create Your Own

Consider wrapping the service in a class for easier reuse:

class GmailHelper:
    def __init__(self, service):
        self.service = service
    
    def send_message(self, to, subject, body):
        # ... implementation

Rate Limiting & Best Practices

Both implementations should respect:

  • Quota: 250 requests per second per user
  • Batch operations: Use batchModify() and batchDelete() for multiple messages
  • Pagination: Use pageToken for large result sets
  • Caching: Cache label IDs and user profiles

Error Handling

Python

from googleapiclient.errors import HttpError

try:
    result = service.users().messages().get(...).execute()
except HttpError as error:
    print(f"Error: {error}")

Node.js/TypeScript

try {
  const result = await gmail.users.messages.get(...);
} catch (error: any) {
  console.error(`Error ${error.response.status}: ${error.message}`);
}

Resources

Tips & Tricks

  1. Caching Labels: Call list() once and cache label IDs to avoid repeated API calls
  2. Batch Operations: Group message operations into batch calls
  3. Full vs Metadata Format: Use format="metadata" when you only need headers
  4. Thread vs Messages: Use threads for conversation view, messages for individual emails
  5. Custom Queries: Learn Gmail search syntax for powerful q parameter usage

Examples

Python: Send Email Script

python examples/send_email.py --to recipient@example.com --subject "Hello"

Node.js: Create TypeScript Utility

npx ts-node src/gmail-utility.ts

Both implementations provide all the tools needed to build production Gmail automation!