Read, send, label, and manage Gmail emails for {{USER}}
Core email operations: read inbox, send emails, manage labels, create drafts, archive messages.
cd /opt/PROJECT && /opt/PROJECT/venv/bin/python -c "
import sys; sys.path.insert(0, '/opt/PROJECT'); sys.path.insert(0, '/opt/PROJECT/SKILLS')
from dotenv import load_dotenv; load_dotenv('/opt/PROJECT/.env')
from SKILLS.gmail import gmail_service as gmail
# Read recent emails
msgs = gmail.get_messages(query='is:unread', max_results=10)
for m in msgs: print(gmail.format_message(m))
# Send an email
gmail.send_email('[email protected]', 'Subject', 'Body text')
# Get unread count
count = gmail.get_unread_count()
# Read a specific message body
body = gmail.get_message_body(message_id)
# Create a draft (optionally as a reply)
gmail.create_draft('[email protected]', 'Subject', 'Body', reply_to_message_id='msg_id', thread_id='thread_id')
# Label management
labels = gmail.list_labels()
label_id = gmail.get_or_create_label('MyLabel')
gmail.add_label(message_id, label_id)
# Archive and mark read
gmail.archive_message(message_id)
gmail.mark_as_read(message_id)
# Batch operations
gmail.batch_modify(message_ids, add_labels=['label_id'], remove_labels=['INBOX'])
"
get_messages(query, max_results) — Search/list emails (returns full message objects)list_message_ids(query, max_results) — Get just message IDs (lighter)get_message_body(message_id) — Get full body text of a messagesend_email(to, subject, body, html=False) — Send an emailcreate_draft(to, subject, body, reply_to_message_id, thread_id) — Create a draftmark_as_read(message_id) — Mark message as readarchive_message(message_id) / archive_messages(message_ids) — Archivebatch_modify(message_ids, add_labels, remove_labels) — Bulk label changeslist_labels() / get_or_create_label(name) — Label managementadd_label(message_id, label_id) / remove_label(message_id, label_id) — Per-message labelsget_unread_count() — Count of unread messagesformat_message(msg) / format_messages_list(messages) — Pretty formatting