Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Read and send email via IMAP/SMTP. Check for new/unread messages, fetch content, search mailboxes, mark as read/unread, and send emails with attachments. Works with any IMAP/SMTP server including Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, and vip.188.com.
Read and send email via IMAP/SMTP. Check for new/unread messages, fetch content, search mailboxes, mark as read/unread, and send emails with attachments. Works with any IMAP/SMTP server including Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, and vip.188.com.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Read, search, and manage email via IMAP protocol. Send email via SMTP. Supports Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, vip.188.com, and any standard IMAP/SMTP server.
Run the setup script to configure your email account: bash setup.sh Configuration is stored at ~/.config/imap-smtp-email/.env (survives skill updates). If no config is found there, the skill falls back to a .env file in the skill directory (for backward compatibility).
# Default account (no prefix) IMAP_HOST=imap.gmail.com IMAP_PORT=993 IMAP_USER=your@email.com IMAP_PASS=your_password IMAP_TLS=true IMAP_REJECT_UNAUTHORIZED=true IMAP_MAILBOX=INBOX SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_SECURE=false SMTP_USER=your@email.com SMTP_PASS=your_password SMTP_FROM=your@email.com SMTP_REJECT_UNAUTHORIZED=true # File access whitelist (security) ALLOWED_READ_DIRS=~/Downloads,~/Documents ALLOWED_WRITE_DIRS=~/Downloads
You can configure additional email accounts in the same config file. Each account uses a name prefix (uppercase) on all variables.
Run the setup script and choose "Add a new account": bash setup.sh Or manually add prefixed variables to ~/.config/imap-smtp-email/.env: # Work account (WORK_ prefix) WORK_IMAP_HOST=imap.company.com WORK_IMAP_PORT=993 WORK_IMAP_USER=me@company.com WORK_IMAP_PASS=password WORK_IMAP_TLS=true WORK_IMAP_REJECT_UNAUTHORIZED=true WORK_IMAP_MAILBOX=INBOX WORK_SMTP_HOST=smtp.company.com WORK_SMTP_PORT=587 WORK_SMTP_SECURE=false WORK_SMTP_USER=me@company.com WORK_SMTP_PASS=password WORK_SMTP_FROM=me@company.com WORK_SMTP_REJECT_UNAUTHORIZED=true
Add --account <name> before the command: node scripts/imap.js --account work check node scripts/smtp.js --account work send --to foo@bar.com --subject Hi --body Hello Without --account, the default (unprefixed) account is used.
Letters and digits only (e.g., work, 163, personal2) Case-insensitive: work and WORK refer to the same account The prefix in .env is always uppercase (e.g., WORK_IMAP_HOST) ALLOWED_READ_DIRS and ALLOWED_WRITE_DIRS are shared across all accounts (always unprefixed)
ProviderIMAP HostIMAP PortSMTP HostSMTP Port163.comimap.163.com993smtp.163.com465vip.163.comimap.vip.163.com993smtp.vip.163.com465126.comimap.126.com993smtp.126.com465vip.126.comimap.vip.126.com993smtp.vip.126.com465188.comimap.188.com993smtp.188.com465vip.188.comimap.vip.188.com993smtp.vip.188.com465yeah.netimap.yeah.net993smtp.yeah.net465Gmailimap.gmail.com993smtp.gmail.com587Outlookoutlook.office365.com993smtp.office365.com587QQ Mailimap.qq.com993smtp.qq.com587 Important for Gmail: Gmail does not accept your regular account password You must generate an App Password: https://myaccount.google.com/apppasswords Use the generated 16-character App Password as IMAP_PASS / SMTP_PASS Requires Google Account with 2-Step Verification enabled Important for 163.com: Use authorization code (ๆๆ็ ), not account password Enable IMAP/SMTP in web settings first
Check for new/unread emails. node scripts/imap.js [--account <name>] check [--limit 10] [--mailbox INBOX] [--recent 2h] Options: --limit <n>: Max results (default: 10) --mailbox <name>: Mailbox to check (default: INBOX) --recent <time>: Only show emails from last X time (e.g., 30m, 2h, 7d)
Fetch full email content by UID. node scripts/imap.js [--account <name>] fetch <uid> [--mailbox INBOX]
Download all attachments from an email, or a specific attachment. node scripts/imap.js [--account <name>] download <uid> [--mailbox INBOX] [--dir <path>] [--file <filename>] Options: --mailbox <name>: Mailbox (default: INBOX) --dir <path>: Output directory (default: current directory) --file <filename>: Download only the specified attachment (default: download all)
Search emails with filters. node scripts/imap.js [--account <name>] search [options] Options: --unseen Only unread messages --seen Only read messages --from <email> From address contains --subject <text> Subject contains --recent <time> From last X time (e.g., 30m, 2h, 7d) --since <date> After date (YYYY-MM-DD) --before <date> Before date (YYYY-MM-DD) --limit <n> Max results (default: 20) --mailbox <name> Mailbox to search (default: INBOX)
Mark message(s) as read or unread. node scripts/imap.js [--account <name>] mark-read <uid> [uid2 uid3...] node scripts/imap.js [--account <name>] mark-unread <uid> [uid2 uid3...]
List all available mailboxes/folders. node scripts/imap.js [--account <name>] list-mailboxes
List all configured email accounts. node scripts/imap.js list-accounts node scripts/smtp.js list-accounts Shows account name, email address, server addresses, and configuration status.
Send email via SMTP. node scripts/smtp.js [--account <name>] send --to <email> --subject <text> [options] Required: --to <email>: Recipient (comma-separated for multiple) --subject <text>: Email subject, or --subject-file <file> Optional: --body <text>: Plain text body --html: Send body as HTML --body-file <file>: Read body from file --html-file <file>: Read HTML from file --cc <email>: CC recipients --bcc <email>: BCC recipients --attach <file>: Attachments (comma-separated) --from <email>: Override default sender Examples: # Simple text email node scripts/smtp.js send --to recipient@example.com --subject "Hello" --body "World" # HTML email node scripts/smtp.js send --to recipient@example.com --subject "Newsletter" --html --body "<h1>Welcome</h1>" # Email with attachment node scripts/smtp.js send --to recipient@example.com --subject "Report" --body "Please find attached" --attach report.pdf # Multiple recipients node scripts/smtp.js send --to "a@example.com,b@example.com" --cc "c@example.com" --subject "Update" --body "Team update"
Test SMTP connection by sending a test email to yourself. node scripts/smtp.js [--account <name>] test
npm install
Configuration is stored at ~/.config/imap-smtp-email/.env with 600 permissions (owner read/write only) Gmail: regular password is rejected โ generate an App Password at https://myaccount.google.com/apppasswords For 163.com: use authorization code (ๆๆ็ ), not account password
Connection timeout: Verify server is running and accessible Check host/port configuration Authentication failed: Verify username (usually full email address) Check password is correct For 163.com: use authorization code, not account password For Gmail: regular password won't work โ generate an App Password at https://myaccount.google.com/apppasswords TLS/SSL errors: Match IMAP_TLS/SMTP_SECURE setting to server requirements For self-signed certs: set IMAP_REJECT_UNAUTHORIZED=false or SMTP_REJECT_UNAUTHORIZED=false
Workflow acceleration for inboxes, docs, calendars, planning, and execution loops.
Largest current source with strong distribution and engagement signals.