用途
IMAP Email Reader 用于通过 IMAP 协议读取、搜索和管理电子邮件,支持 ProtonMail Bridge、Gmail IMAP 以及任何标准 IMAP 服务器。
主要能力
- 检查邮箱中的未读/新邮件
- 按 UID 获取完整邮件内容(含文本与 HTML 正文)
- 按发件人、主题、时间范围、已读/未读等条件搜索邮件
- 将邮件标记为已读或未读
- 列出所有可用邮箱/文件夹
使用方式
快速开始
检查新邮件:
node skills/imap-email/scripts/imap.js check
获取指定邮件:
node skills/imap-email/scripts/imap.js fetch <uid>
标记为已读:
node skills/imap-email/scripts/imap.js mark-read <uid>
搜索邮箱:
node skills/imap-email/scripts/imap.js search --from "sender@example.com" --unseen
配置
在技能文件夹中创建 .env 或设置环境变量:
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 配置
- 安装并运行 ProtonMail Bridge
- IMAP 使用 127.0.0.1:1143
- 密码由 Bridge 生成(不是 ProtonMail 账户密码)
- TLS: 使用 false(Bridge 使用 STARTTLS)
- REJECT_UNAUTHORIZED: 设置为 false(Bridge 使用自签名证书)
Gmail IMAP 配置
- Host: imap.gmail.com
- Port: 993
- TLS: true
- 启用 "Less secure app access" 或使用应用专用密码
- REJECT_UNAUTHORIZED: 省略或设为 true(默认)
命令说明
check:检查邮箱中的未读/新邮件。
node scripts/imap.js check [--limit 10] [--mailbox INBOX] [--recent 2h]
选项:--limit <n> 最大结果数(默认 10);--mailbox <name> 要检查的邮箱(默认 INBOX);--recent <time> 仅显示最近 X 时间的邮件(如 30m、2h、7d)。返回 JSON 数组,包含 uid、from、subject、date、snippet、flags。
fetch:按 UID 获取完整邮件内容。
node scripts/imap.js fetch <uid> [--mailbox INBOX]
返回含完整正文(text + HTML)的 JSON。
search:带过滤条件搜索邮件。
node scripts/imap.js search [options]
选项:--unseen 仅未读;--seen 仅已读;--from <email> 发件人包含;--subject <text> 主题包含;--recent <time> 最近 X 时间;--since <date> 某日期之后(YYYY-MM-DD);--before <date> 某日期之前(YYYY-MM-DD);--limit <n> 最大结果数(默认 20);--mailbox <name> 要搜索的邮箱(默认 INBOX)。时间格式示例:30m 表示最近 30 分钟,2h 表示最近 2 小时,7d 表示最近 7 天。
mark-read / mark-unread:将一封或多封邮件标记为已读或未读。
node scripts/imap.js mark-read <uid> [uid2 uid3...]
node scripts/imap.js mark-unread <uid> [uid2 uid3...]
list-mailboxes:列出所有可用邮箱/文件夹。
node scripts/imap.js list-mailboxes
与 Cron 集成
可通过 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"
在隔离会话中,agent 可运行:
node /Users/mike/clawd/skills/imap-email/scripts/imap.js check --limit 5
适用场景
- 早晨邮件摘要:运行 check --limit 10 --recent 12h,汇总整夜未读邮件并发送到指定渠道
- 检查特定发件人的近期邮件:运行 search --from "important@company.com" --recent 24h,必要时获取完整内容,处理完后标记已读
- 每小时紧急邮件检查:运行 search --recent 1h --unseen,筛选重要关键词,提取行动项,紧急时发送通知
- 每周摘要:运行 search --recent 7d --limit 20,汇总活动并生成周报
依赖安装
在技能文件夹中安装:
cd skills/imap-email
npm install imap-simple dotenv
或全局安装:
npm install -g imap-simple dotenv
安全说明
- 凭据存储在 .env 中(加入 .gitignore)
- ProtonMail Bridge 密码不是账户密码
- ProtonMail IMAP 访问需要 Bridge 保持运行
- Gmail 建议使用应用专用密码
限制与故障排查
连接超时:确认 IMAP 服务器正在运行且可访问,检查 host/port 配置,可用 telnet <host> <port> 测试。
认证失败:确认用户名(通常是完整邮箱地址),检查密码是否正确;ProtonMail Bridge 使用 Bridge 生成的密码而非账户密码;Gmail 在启用两步验证时使用应用专用密码。
TLS/SSL 错误:IMAP_TLS 设置需匹配服务器要求(SSL 用 true,STARTTLS 用 false);自签名证书(如 ProtonMail Bridge)需设置 IMAP_REJECT_UNAUTHORIZED=false;检查端口与 TLS 设置匹配(SSL 用 993,STARTTLS 用 143)。
结果为空:确认邮箱名称(区分大小写),检查搜索条件,可用 list-mailboxes 列出邮箱。