🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

OpenClaw Email Manager for Postfic and Dovecot

by @soderholmm

Complete email management for Postfix/Dovecot

Versionv1.0.0
Downloads1,375
Installs15
TERMINAL
clawhub install email-manager

πŸ“– About This Skill


name: email-manager description: Complete email management for Postfix/Dovecot version: 1.0.0 author: Mattias SΓΆderholm triggers: - email - mail - draft - inbox - send email - folder - flag - star - important - spam - junk - trash - delete - move - search - read - compose - reply - archive - mark as spam - not spam - empty trash - empty spam requires: bins: - python3

Email Manager Skill

This skill provides complete email management using your Postfix/Dovecot infrastructure.

πŸ“‹ Configuration

Edit config.json in the skill directory:

{
  "email_address": "your-email@domain.com",
  "email_password": "your-password",
  "imap_server": "mail.yourdomain.com",
  "smtp_server": "mail.yourdomain.com"
}

πŸ“¨ Available Operations

List folders

python3 scripts/imap_utils.py list-folders
python3 scripts/imap_utils.py list-folders --output json

Example output:

πŸ“ Available folders:
  β€’ Drafts πŸ“ DRAFTS
  β€’ Sent πŸ“€ SENT
  β€’ Trash πŸ—‘οΈ TRASH
  β€’ Junk πŸ“§ SPAM
  β€’ INBOX πŸ“₯ INBOX
  β€’ Archive
  β€’ Projects/ClientA

List emails

python3 scripts/imap_utils.py list --folder INBOX --limit 10
python3 scripts/imap_utils.py list --flagged-only --output json

Read email

python3 scripts/imap_utils.py read --message-id 1234
python3 scripts/imap_utils.py read --message-id 1234 --output json

Save draft

python3 scripts/imap_utils.py save-draft \
  --to "user@example.com" \
  --subject "Draft subject" \
  --body "Draft content"

List drafts

python3 scripts/imap_utils.py list-drafts
python3 scripts/imap_utils.py list-drafts --output json

Update draft

python3 scripts/imap_utils.py update-draft \
  --draft-id 1234 \
  --subject "Updated subject" \
  --body "Updated content"

Send email

python3 scripts/smtp_utils.py send \
  --to "user@example.com" \
  --subject "Test" \
  --body "Hello"

Send draft

python3 scripts/smtp_utils.py send-draft --draft-id 1234

Flag/star email

python3 scripts/imap_utils.py flag --message-id 1234 --add
python3 scripts/imap_utils.py flag --message-id 1234 --remove
python3 scripts/imap_utils.py list --flagged-only

Move email

python3 scripts/imap_utils.py move \
  --message-id 1234 \
  --from-folder INBOX \
  --to-folder Projects

Create folder

python3 scripts/imap_utils.py create-folder --name "NewFolder"

Delete email

python3 scripts/imap_utils.py delete --message-id 1234

Empty trash

python3 scripts/imap_utils.py empty-trash

Search emails

python3 scripts/imap_utils.py search --query "FROM user@example.com"
python3 scripts/imap_utils.py search --query "subject:meeting" --output json

Spam operations

# List spam
python3 scripts/imap_utils.py list-spam
python3 scripts/imap_utils.py list-spam --output json

Mark as spam

python3 scripts/imap_utils.py mark-spam --message-id 1234 python3 scripts/imap_utils.py mark-spam --message-id 1234 --from-folder INBOX

Mark as not spam

python3 scripts/imap_utils.py mark-ham --message-id 1234 python3 scripts/imap_utils.py mark-ham --message-id 1234 --from-folder Junk

Empty spam folder

python3 scripts/imap_utils.py empty-spam

πŸ” Folder Auto-Detection

The skill automatically detects folder names for:

  • Inbox: INBOX, Inbox
  • Drafts: Drafts, INBOX.Drafts, Draft
  • Sent: Sent, Sent Messages, INBOX.Sent
  • Trash: Trash, Deleted, INBOX.Trash
  • Junk/Spam: Junk, Spam, INBOX.Junk, INBOX.Spam, Bulk
  • Archive: Archive, Archives, INBOX.Archive
  • πŸ“ Folder Name Handling

    The skill cleans up folder names for display by removing IMAP flags like \HasNoChildren and quotes. For raw folder data with flags:

    python3 scripts/imap_utils.py list-folders --output json
    

    Example JSON output:

    [
      {
        "name": "Drafts",
        "delimiter": "/",
        "flags": ["\\HasNoChildren", "\\Drafts"]
      }
    ]
    

    πŸ€– AI Usage Examples

    Always use --output json when parsing results:

    # List drafts and find specific one
    drafts=$(python3 scripts/imap_utils.py list-drafts --output json)
    

    Parse JSON to find draft by subject

    Send the draft

    python3 scripts/smtp_utils.py send-draft --draft-id $ID

    Check spam count

    spam=$(python3 scripts/imap_utils.py list-spam --output json)

    Get folder metadata

    folders=$(python3 scripts/imap_utils.py list-folders --output json)

    βœ… Testing

    Test your configuration:

    python3 scripts/imap_utils.py list-folders
    python3 scripts/imap_utils.py list --limit 5
    python3 scripts/imap_utils.py list-spam
    

    All operations are non-interactive and suitable for automation.

    πŸš€ Setup Instructions

    # 1. Create skill directory
    mkdir -p ~/OpenClaw-Workspace/skills/email-manager/scripts
    cd ~/OpenClaw-Workspace/skills/email-manager

    2. Create config.json

    cat > config.json << 'EOF' { "email_address": "your-email@yourdomain.com", "email_password": "your-password", "imap_server": "mail.yourdomain.com", "imap_port": 993, "smtp_server": "mail.yourdomain.com", "smtp_port": 465, "folders": { "drafts": "Drafts", "sent": "Sent", "trash": "Trash", "junk": "Junk" } } EOF

    3. Make scripts executable

    chmod +x scripts/*.py

    4. Test it!

    python3 scripts/imap_utils.py list-folders

    πŸ“ Common Spam Folder Names

    Different Dovecot configurations use different spam folder names:

  • Junk (most common)
  • Spam
  • INBOX.Junk
  • INBOX.Spam
  • Bulk
  • Junk E-mail
  • Set it explicitly in config.json if auto-detection doesn't work:

    {
        "folders": {
            "junk": "INBOX.Junk"
        }
    }
    

    🎯 Key Benefits

  • βœ… Zero dependencies - Uses only Python standard library
  • βœ… No virtualenv needed - Works with system Python
  • βœ… JSON config - Easy to edit, no parsing libraries needed
  • βœ… Non-interactive - Perfect for AI automation
  • βœ… Full feature set - Drafts, send, folders, flags, move, delete, spam
  • βœ… Debian/Ubuntu compatible - No "externally-managed-environment" errors