ClawSkills logoClawSkills

eMail manager lite

支持 IMAP/SMTP 的轻量级电子邮件管理器,具有高级搜索、文件夹管理和附件检测功能。适用于 Zoho、Gmail、Outlook 以及任何 IMAP/SM

介绍

# Email Manager Lite v0.2

一个用于 OpenClaw 的完全独立的电子邮件管理技能。使用标准的 IMAP 和 SMTP 协议,无任何外部依赖。

## ✨ v0.2 新功能

### 🔍 高级搜索与筛选 - 按发件人搜索 (`--from`) - 按主题关键词搜索 (`--subject`) - 按日期范围筛选 (`--since`, `--before`) - 按已读/未读状态筛选 (`--seen`, `--unseen`) - 在邮件正文中搜索 (`--body`,警告:可能较慢)

### 📁 文件夹管理 - 使用 `folders` 命令列出所有 IMAP 文件夹 - 使用 `move` 命令在文件夹之间移动邮件 - 自动验证文件夹是否存在

### 📎 附件信息 - 自动检测附件 - 显示附件详细信息: - 文件名 - MIME 类型 - 文件大小(格式化的 KB/MB) - 显示在 `read` 和 `search` 结果中

## 🔧 安装

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

依赖项已包含在 `package.json` 中: - `nodemailer` - SMTP 邮件发送 - `imap-simple` - IMAP 操作 - `mailparser` - 邮件解析和附件检测

## 🔐 凭证

设置以下环境变量:

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

**建议:** 对于 Gmail、Outlook、Zoho,请使用应用专用密码 而不是主密码。

### 提供商设置

**Zoho Mail(默认):** - 已配置为使用 `smtp.zoho.eu` 和 `imap.zoho.eu` - 生成应用专用密码:https://accounts.zoho.eu/home#security/apppasswords

**Gmail:** - 编辑 `scripts/email.js` 并更改: ```javascript host: 'smtp.gmail.com' // SMTP host: 'imap.gmail.com' // IMAP ``` - 启用两步验证 并创建应用专用密码:https://myaccount.google.com/apppasswords

**Outlook/Hotmail:** - 编辑以使用 `smtp.office365.com` / `outlook.office365.com` - SMTP 端口 587 (TLS)

## 📖 用法

### 发送邮件

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

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

### 阅读最近的邮件

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

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

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

**输出包括:** - UID(用于移动的唯一 ID) - 发件人/收件人地址 - 主题和日期 - 附件计数和详细信息 - 邮件正文预览(前 500 个字符)

### 高级搜索

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

**搜索选项:**

| 选项 | 描述 | 示例 | |--------|-------------|---------| | `--from <email>` | 按发件人筛选 | `--from "[email protected]"` | | `--subject <text>` | 按主题关键词筛选 | `--subject "invoice"` | | `--since <date>` | 该日期之后的邮件 | `--since "Jan 1, 2026"` | | `--before <date>` | 该日期之前的邮件 | `--before "Feb 1, 2026"` | | `--unseen` | 仅未读邮件 | `--unseen` | | `--seen` | 仅已读邮件 | `--seen` | | `--body <text>` | 在正文中搜索(慢!) | `--body "meeting"` | | `--limit <n>` | 最大结果数 | `--limit 10` |

**示例:**

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

### 列出文件夹

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

显示所有 IMAP 文件夹的分层树及其属性。

**示例输出:** ``` 📁 INBOX 📁 Sent 📁 Archive 📁 Drafts 📁 Spam 📁 Trash ```

### 将邮件移动到文件夹

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

**重要:** - 从 `read` 或 `search` 输出中获取 `uid` - 文件夹名称区分大小写 - 脚本会在移动前验证文件夹是否存在

**示例:**

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

**错误处理:** - 如果文件夹不存在,则显示可用文件夹列表 - 在尝试移动之前验证 UID 是否存在

### 帮助

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

显示包含所有命令和示例的完整使用指南。

## 🎯 使用案例

### 每日邮件分类 ```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" ```

### 查找特定邮件 ```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" ```

### 归档旧邮件 ```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" ```

### 检查附件 ```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 ```

## 🔒 安全

- 凭证永远不会被记录或存储在文件中 - 所有连接均使用 TLS/SSL 加密 - 建议使用应用专用密码代替账户密码 - 除 IMAP/SMTP 连接外,没有任何数据离开您的机器

## ⚙️ 配置

默认配置已针对 **Zoho Mail EU** 进行了优化。

要使用其他提供商,请编辑 `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 } }; ```

## 🚀 性能说明

- **正文搜索** (`--body`) 在大型邮箱上可能会很慢 - 请谨慎使用 - **主题/发件人搜索** 速度很快 - 使用 IMAP 服务器端筛选 - **日期筛选** 效率很高 - 使用 `--limit` 限制结果以加快响应速度

## 🐛 故障排除

**“Authentication failed”(认证失败)** - 验证 EMAIL_USER 和 EMAIL_PASS 设置正确 - 使用应用专用密码,而不是账户密码 - 检查提供商设置(2FA、安全性较低的应用等)

**“Folder not found”(未找到文件夹)** - 使用 `folders` 命令查看确切的文件夹名称 - 文件夹名称区分大小写 - 某些提供商使用不同的名称(例如,“Sent Items”与“Sent”)

**“Connection timeout”(连接超时)** - 检查防火墙/网络设置 - 验证 IMAP/SMTP 端口是否可访问 - 尝试在配置中增加 `authTimeout`

**“No emails found”(未找到邮件)** - 检查搜索条件 - 验证收件箱中是否存在邮件(而不是其他文件夹) - 尝试更广泛的搜索(移除某些筛选器)

## 📝 版本历史

### v0.2.0(当前版本) - ✨ 带有多种筛选器的高级搜索 - 📁 文件夹管理(列表、移动) - 📎 附件检测和信息 - 🎨 改进的输出格式 - 📚 全面的文档

### v0.1.0 - 基本的发送/阅读功能 - Zoho Mail 支持 - IMAP/SMTP 基础

## 🤝 兼容性

已测试: - ✅ Zoho Mail (欧盟与美国) - ✅ Gmail - ✅ Outlook/Hotmail - ✅ iCloud Mail - ✅ 自定义 IMAP/SMTP 服务器

## 💡 提示

1. **使用 UID 进行自动化:** 保存搜索结果中的 UID 以通过编程方式移动邮件 2. **组合筛选器:** 多个筛选器会创建 AND 条件以进行精确搜索 3. **文件夹组织:** 先列出文件夹以规划您的组织策略 4. **日期格式:** 使用自然语言日期,如“Jan 1, 2026”或“December 25, 2025” 5. **附件筛选:** 在搜索输出中查找“Attachments: X”以查找包含文件的邮件

## 📄 许可证

ISC - 可在您的 OpenClaw 设置中自由使用。

更多产品