🧪 Skills

OpenClaw Email Manager for Postfic and Dovecot

--- 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

v1.0.0
❤️ 0
⬇️ 172
👁 1
Share

Description


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

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs