Install
openclaw skills install gmail-enhanced-chenEnhanced Gmail integration with advanced features including label management, attachment handling, advanced search, email parsing, and automated email processing workflows.
openclaw skills install gmail-enhanced-chenAdvanced Gmail integration with powerful automation features.
export GMAIL_CREDENTIALS_PATH="/path/to/credentials.json"
export GMAIL_TOKEN_PATH="/path/to/tokens.json"
Or place credentials in default locations:
~/.credentials/gmail-credentials.json~/.credentials/gmail-token.jsonfrom gmail_enhanced import GmailClient
gmail = GmailClient()
# Simple email
gmail.send(
to="recipient@example.com",
subject="Hello",
body="Email content"
)
# With attachment
gmail.send(
to="recipient@example.com",
subject="Report",
body="Please find the report attached",
attachments=["report.pdf"]
)
# Complex queries
results = gmail.search(
query="from:boss@company.com",
label="INBOX",
after="2024/01/01",
has_attachments=True
)
# Search with OR
results = gmail.search_or([
"subject:urgent",
"label:important"
])
# Create label
label = gmail.create_label("Projects/Work/Q1", color="#4A90E2")
# Get label stats
stats = gmail.get_label_stats("INBOX")
# Apply labels
gmail.add_labels(["Label1", "Label2"], message_ids)
# Download attachments from search results
attachments = gmail.search_attachments(
query="subject:invoice",
save_dir="./downloads"
)
# Upload attachment
gmail.send(
to="recipient@example.com",
subject="File",
attachments=["/path/to/file.pdf"]
)
# Create rule
gmail.add_rule(
name="Categorize invoices",
query="subject:invoice has:attachment",
add_labels=["Processed/Invoices"]
)
# Run rules
gmail.process_rules()
| Method | Description |
|---|---|
send(to, subject, body, attachments, cc, bcc) | Send email |
search(query, max_results, label) | Search emails |
get_message(msg_id, format) | Get email details |
delete_message(msg_id) | Move to trash |
archive_message(msg_id) | Archive email |
| Method | Description |
|---|---|
create_label(name, color) | Create label |
rename_label(old_name, new_name) | Rename label |
delete_label(name) | Delete label |
get_labels() | List all labels |
get_label_stats(label) | Get label statistics |
| Method | Description |
|---|---|
download_attachment(msg_id, attachment_id, save_path) | Download attachment |
search_attachments(query, save_dir) | Search and download |
get_attachment_info(msg_id) | List attachments |
| Method | Description |
|---|---|
add_rule(name, query, actions) | Create processing rule |
process_rules() | Run all rules |
create_template(name, subject, body) | Create email template |
send_template(template_name, to, variables) | Send using template |
| Method | Description |
|---|---|
parse_email(msg_id) | Extract structured data |
extract_invoice(msg_id) | Parse invoice data |
extract_contacts(msg_id) | Extract email addresses |
Basic:
from:user@example.com
to:user@example.com
subject:keyword
"exact phrase"
Filters:
after:2024/01/01
before:2024/12/31
older_than:7d
newer_than:2h
Flags:
has:attachment
has:drive
is:unread
is:starred
is:important
Labels:
label:INBOX
label:Work
Combinations:
from:boss AND subject:urgent
(from:alice OR from:bob) AND is:unread
Common errors:
invalid_credentials: Re-authenticaterate_limit: Wait and retrynot_found: Message ID invalidpermission_denied: Check scopeshttps://www.googleapis.com/auth/gmail.readonly
https://www.googleapis.com/auth/gmail.send
https://www.googleapis.com/auth/gmail.labels
https://www.googleapis.com/auth/gmail.modify