imap-email
IMAP Email Reader
Read, search, and manage email via IMAP protocol. Supports ProtonMail Bridge, Gmail IMAP, and any standard IMAP server.
Quick Start
Check for new emails:
node skills/imap-email/scripts/imap.js check
Fetch specific email:
node skills/imap-email/scripts/imap.js fetch <uid>
Mark as read:
node skills/imap-email/scripts/imap.js mark-read <uid>
Search mailbox:
node skills/imap-email/scripts/imap.js search --from "sender@example.com" --unseen
Configuration
Create .env in the skill folder or set environment variables:
IMAP_HOST=127.0.0.1 # Server hostname
IMAP_PORT=1143 # Server port
IMAP_USER=your@email.com
IMAP_PASS=your_password
IMAP_TLS=false # Use TLS/SSL connection
IMAP_REJECT_UNAUTHORIZED=false # Set to false for self-signed certs (optional)
IMAP_MAILBOX=INBOX # Default mailbox
ProtonMail Bridge setup:
- Install and run ProtonMail Bridge
- Use
127.0.0.1:1143for IMAP - Password is generated by Bridge (not your ProtonMail password)
- TLS: Use
false(Bridge uses STARTTLS) REJECT_UNAUTHORIZED: Set tofalse(Bridge uses self-signed cert)
Gmail IMAP setup:
- Host:
imap.gmail.com - Port:
993 - TLS:
true - Enable "Less secure app access" or use App Password
REJECT_UNAUTHORIZED: Omit or set totrue(default)
Commands
check
Check for unread/new emails in mailbox.
node scripts/imap.js 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)
Returns JSON array of messages with:
- uid, from, subject, date, snippet, flags
fetch
Fetch full email content by UID.
node scripts/imap.js fetch <uid> [--mailbox INBOX]
Returns JSON with full body (text + HTML).
search
Search emails with filters.
node scripts/imap.js 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)
Time format examples:
30m= last 30 minutes2h= last 2 hours7d= last 7 days
mark-read / mark-unread
Mark message(s) as read or unread.
node scripts/imap.js mark-read <uid> [uid2 uid3...]
node scripts/imap.js mark-unread <uid> [uid2 uid3...]
list-mailboxes
List all available mailboxes/folders.
node scripts/imap.js list-mailboxes
Cron Integration
Set up periodic email checking with Clawdbot cron:
# Check email every 15 minutes, deliver to iMessage
clawdbot cron add \
--name "email-check" \
--cron "*/15 * * * *" \
--session isolated \
--message "Check for new ProtonMail emails and summarize them" \
--deliver \
--channel imessage \
--to "+15085600825"
Inside the isolated session, the agent can run:
node /Users/mike/clawd/skills/imap-email/scripts/imap.js check --limit 5
Workflow Examples
Morning email digest:
- Run
check --limit 10 --recent 12h - Summarize unread emails from overnight
- Deliver summary to preferred channel
Check recent emails from specific sender:
- Run
search --from "important@company.com" --recent 24h - Fetch full content if needed
- Mark as read after processing
Hourly urgent email check:
- Run
search --recent 1h --unseen - Filter for important keywords
- Extract action items
- Deliver notification if urgent
Weekly digest:
- Run
search --recent 7d --limit 20 - Summarize activity
- Generate weekly report
Dependencies
Install in skill folder:
cd skills/imap-email
npm install imap-simple dotenv
Or install globally:
npm install -g imap-simple dotenv
Security Notes
- Store credentials in
.env(add to.gitignore) - ProtonMail Bridge password is NOT your account password
- Bridge must be running for ProtonMail IMAP access
- Consider using app-specific passwords for Gmail
Troubleshooting
Connection timeout:
- Verify IMAP server is running and accessible
- Check host/port configuration
- Test with:
telnet <host> <port>
Authentication failed:
- Verify username (usually full email address)
- Check password is correct
- For ProtonMail Bridge: use Bridge-generated password, not account password
- For Gmail: use App Password if 2FA is enabled
TLS/SSL errors:
- Match
IMAP_TLSsetting to server requirements (true for SSL, false for STARTTLS) - For self-signed certs (e.g., ProtonMail Bridge): set
IMAP_REJECT_UNAUTHORIZED=false - Check port matches TLS setting (993 for SSL, 143 for STARTTLS)
Empty results:
- Verify mailbox name (case-sensitive)
- Check search criteria
- List mailboxes with
list-mailboxes