ClawSkills logoClawSkills

eMail manager lite

Lightweight email manager with IMAP/SMTP support, advanced search, folder management, and attachment detection. Works with Zoho, Gmail, Outlook, and any IMAP/SM

Introduction

# Email Manager Lite v0.2

A fully self-contained email management skill for OpenClaw. Uses standard IMAP and SMTP protocols with zero external dependencies.

## ✨ What's New in v0.2

### šŸ” Advanced Search & Filters - Search by sender (`--from`) - Search by subject keywords (`--subject`) - Filter by date range (`--since`, `--before`) - Filter by read/unread status (`--seen`, `--unseen`) - Search in email body (`--body`, warning: can be slow)

### šŸ“ Folder Management - List all IMAP folders with `folders` command - Move emails between folders with `move` command - Automatic validation of folder existence

### šŸ“Ž Attachment Information - Automatic detection of attachments - Display attachment details: - Filename - MIME type - File size (formatted KB/MB) - Shown in both `read` and `search` results

## šŸ”§ Installation

```bash cd skills/portable-email-manager npm install ```

Dependencies are bundled in `package.json`: - `nodemailer` - SMTP email sending - `imap-simple` - IMAP operations - `mailparser` - Email parsing and attachment detection

## šŸ” Credentials

Set these environment variables:

```bash export EMAIL_USER="[email protected]" export EMAIL_PASS="your-app-password" ```

**Recommended:** Use App Passwords for Gmail, Outlook, Zoho instead of main password.

### Provider Setup

**Zoho Mail (default):** - Already configured for `smtp.zoho.eu` and `imap.zoho.eu` - Generate App Password: https://accounts.zoho.eu/home#security/apppasswords

**Gmail:** - Edit `scripts/email.js` and change: ```javascript host: 'smtp.gmail.com' // SMTP host: 'imap.gmail.com' // IMAP ``` - Enable 2FA and create App Password: https://myaccount.google.com/apppasswords

**Outlook/Hotmail:** - Edit to use `smtp.office365.com` / `outlook.office365.com` - Port 587 for SMTP (TLS)

## šŸ“– Usage

### Send Email

```bash ./scripts/email.js send "[email protected]" "Subject" "Email body text" ```

**Example:** ```bash ./scripts/email.js send "[email protected]" "Weekly Report" "Attached is this week's summary." ```

### Read Recent Emails

```bash ./scripts/email.js read [limit] ```

**Examples:** ```bash # Read last 5 emails (default) ./scripts/email.js read

# Read last 20 emails ./scripts/email.js read 20 ```

**Output includes:** - UID (unique ID for moving) - From/To addresses - Subject and date - Attachment count and details - Email body preview (first 500 chars)

### Advanced Search

```bash ./scripts/email.js search [options] ```

**Search Options:**

| Option | Description | Example | |--------|-------------|---------| | `--from <email>` | Filter by sender | `--from "[email protected]"` | | `--subject <text>` | Filter by subject keywords | `--subject "invoice"` | | `--since <date>` | Emails after date | `--since "Jan 1, 2026"` | | `--before <date>` | Emails before date | `--before "Feb 1, 2026"` | | `--unseen` | Only unread emails | `--unseen` | | `--seen` | Only read emails | `--seen` | | `--body <text>` | Search in body (slow!) | `--body "meeting"` | | `--limit <n>` | Max results | `--limit 10` |

**Examples:**

```bash # Find unread emails from specific sender ./scripts/email.js search --from "[email protected]" --unseen

# Search by subject ./scripts/email.js search --subject "invoice" --limit 5

# Date range search ./scripts/email.js search --since "Jan 15, 2026" --before "Feb 1, 2026"

# Search in body (use sparingly - can be slow) ./scripts/email.js search --body "quarterly review"

# Combine multiple filters ./scripts/email.js search --from "[email protected]" --subject "urgent" --unseen --limit 3 ```

### List Folders

```bash ./scripts/email.js folders ```

Shows hierarchical tree of all IMAP folders with attributes.

**Example output:** ``` šŸ“ INBOX šŸ“ Sent šŸ“ Archive šŸ“ Drafts šŸ“ Spam šŸ“ Trash ```

### Move Email to Folder

```bash ./scripts/email.js move <uid> <folder-name> ```

**Important:** - Get the `uid` from `read` or `search` output - Folder name is case-sensitive - Script validates folder exists before moving

**Examples:**

```bash # First, find the email and note its UID ./scripts/email.js search --from "[email protected]" # Output shows: UID: 12345

# Move to Archive folder ./scripts/email.js move 12345 "Archive"

# Move to custom folder ./scripts/email.js move 67890 "Projects/Work" ```

**Error handling:** - If folder doesn't exist, shows list of available folders - Validates UID exists before attempting move

### Help

```bash ./scripts/email.js help ```

Shows complete usage guide with all commands and examples.

## šŸŽÆ Use Cases

### Daily Email Triage ```bash # Check unread emails ./scripts/email.js search --unseen --limit 10

# Move newsletters to folder ./scripts/email.js search --from "[email protected]" --limit 1 ./scripts/email.js move <uid> "Newsletters" ```

### Find Specific Email ```bash # Search by sender and subject ./scripts/email.js search --from "[email protected]" --subject "proposal"

# Search by date ./scripts/email.js search --since "Jan 20, 2026" --subject "meeting notes" ```

### Archive Old Emails ```bash # Find old read emails ./scripts/email.js search --before "Dec 1, 2025" --seen --limit 50

# Move each to Archive (use UID from output) ./scripts/email.js move <uid> "Archive" ```

### Check for Attachments ```bash # Read recent emails and see attachment info ./scripts/email.js read 10

# Search output automatically shows: # - Number of attachments # - Filename, type, and size for each ```

## šŸ”’ Security

- Credentials never logged or stored in files - TLS/SSL encryption for all connections - App Passwords recommended over account passwords - No data leaves your machine except IMAP/SMTP connections

## āš™ļø Configuration

Default configuration is optimized for **Zoho Mail EU**.

To use another provider, edit `scripts/email.js`:

```javascript // SMTP Configuration const smtpConfig = { host: 'smtp.your-provider.com', port: 465, // or 587 for TLS secure: true, // true for SSL (465), false for TLS (587) auth: { user: EMAIL_USER, pass: EMAIL_PASS } };

// IMAP Configuration const imapConfig = { imap: { user: EMAIL_USER, password: EMAIL_PASS, host: 'imap.your-provider.com', port: 993, tls: true, authTimeout: 20000 } }; ```

## šŸš€ Performance Notes

- **Body search** (`--body`) can be slow on large mailboxes - use sparingly - **Subject/From search** is fast - uses IMAP server-side filtering - **Date filters** are efficient - Limit results with `--limit` for faster responses

## šŸ› Troubleshooting

**"Authentication failed"** - Verify EMAIL_USER and EMAIL_PASS are set correctly - Use App Password, not account password - Check provider settings (2FA, less secure apps, etc.)

**"Folder not found"** - Use `folders` command to see exact folder names - Folder names are case-sensitive - Some providers use different names (e.g., "Sent Items" vs "Sent")

**"Connection timeout"** - Check firewall/network settings - Verify IMAP/SMTP ports are accessible - Try increasing `authTimeout` in config

**"No emails found"** - Check search criteria - Verify emails exist in INBOX (not other folders) - Try broader search (remove some filters)

## šŸ“ Version History

### v0.2.0 (Current) - ✨ Advanced search with multiple filters - šŸ“ Folder management (list, move) - šŸ“Ž Attachment detection and info - šŸŽØ Improved output formatting - šŸ“š Comprehensive documentation

### v0.1.0 - Basic send/read functionality - Zoho Mail support - IMAP/SMTP foundation

## šŸ¤ Compatibility

Tested with: - āœ… Zoho Mail (EU & US) - āœ… Gmail - āœ… Outlook/Hotmail - āœ… iCloud Mail - āœ… Custom IMAP/SMTP servers

## šŸ’” Tips

1. **Use UIDs for automation:** Save UIDs from search results to move emails programmatically 2. **Combine filters:** Multiple filters create AND conditions for precise searches 3. **Folder organization:** List folders first to plan your organization strategy 4. **Date format:** Use natural language dates like "Jan 1, 2026" or "December 25, 2025" 5. **Attachment filtering:** Look for "Attachments: X" in search output to find emails with files

## šŸ“„ License

ISC - Use freely in your OpenClaw setup.

More Products