关于 email-imap-fetch
email-imap-fetch 是监听 IMAP 邮箱并将邮件摘要转发到 OpenClaw webhook 的技能,适用于邮件路由工作流。它输出结构化 JSONL,仅传递摘要和引用信息,不发送完整正文或附件内容。
主要功能
- 01IMAP IDLE 或轮询模式
- 02支持多个邮箱账户
- 03获取未读邮件
- 04转发到 OpenClaw webhook
- 05JSONL 状态与邮件事件
- 06仅提供摘要和附件元数据
适用场景
- 01将新邮件路由到 OpenClaw 工作流
- 02从多个账户获取未读邮件
- 03通过守护进程管理器运行常驻监听
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tiangong-ai/ agent-skills --skill email-imap-fetch安装后在 Claude Code 中输入/email-imap-fetch确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlassets/config.example.envreferences/env.mdscripts/imap_idle_fetch.py详细介绍
Email IMAP Fetch
核心目标
- 使用 IMAP IDLE 等待新邮件。
- 每次唤醒后获取未读邮件。
- 支持通过环境变量配置多个邮箱账户。
- 严格通过环境变量模式(
idle或poll)控制 IDLE 支持,不进行运行时探测。 - 将获取的每封邮件转发到 OpenClaw Webhook。
- 输出机器可读的 JSON 行,供下游步骤使用。
- 严格将此技能限制在第 1 阶段的路由模式:仅发送摘要片段和结构化引用,不发送完整的原始邮件正文,也不发送附件二进制内容。
工作流
- 配置账户环境变量和 OpenClaw Webhook 环境变量(参见
references/env.md和assets/config.example.env)。 - 验证配置:
python3 scripts/imap_idle_fetch.py check-config
- 为每个账户运行一个 IDLE 周期(冒烟测试):
python3 scripts/imap_idle_fetch.py listen --cycles 1 --idle-seconds 120 --max-messages 10
- 持续运行(默认常驻模式):
python3 scripts/imap_idle_fetch.py listen
运行时模型
- 技能文件会安装在本地,但监听器不会自动启动。
- 在
idle模式下,只有监听器进程和 IMAP 连接保持运行时,IMAP IDLE 才会接收推送事件。 - 在
poll模式下,监听器会休眠指定的轮询间隔,然后获取未读邮件。 - 如果进程退出,就会错过推送事件;下次运行仍可使用
UNSEEN获取现有未读邮件。 - 默认运行时为常驻模式(默认
IMAP_CYCLES=0)。 - 默认 IDLE 模式为
poll(适用于不支持 IDLE 的服务器,更安全)。 - 在生产环境中,始终运行的部署必须由
systemd、launchd、supervisor或同等的守护进程管理器运行。 - 不要将监听器作为绑定到交互式 exec 会话的前台进程运行;会话一旦退出,监听器也会停止。
输出约定
- 输出格式为 JSONL(每行一个 JSON 对象)。
- 生命周期事件使用
type=status。 - 获取的邮件使用
type=message,包含:account、mailbox、seq、uidsubject、from、to、datemessage_id_raw、message_id_norm(以及兼容字段message_id)snippet(仅包含纯文本预览)attachment_count、attachment_manifest(仅包含摘要,不含附件内容)- 机器可读的
mail_ref对象(account、mailbox、uid、message_id_raw、message_id_norm、date)
- Webhook 消息包含两个固定的机器可读区块,用于确定性地提取分发信息:
<<<MAIL_REF_JSON>>> ... <<<END_MAIL_REF_JSON>>><<<ATTACHMENT_MANIFEST_JSON>>> ... <<<END_ATTACHMENT_MANIFEST_JSON>>>
- 周期状态输出中的
wait_mode为idle或poll。 wait_events记录当前等待策略的详细信息。- OpenClaw Webhook POST 成功时输出
event=webhook_delivered状态事件。 - 账户级故障使用
type=error。 - OpenClaw Webhook POST 失败时输出
event=webhook_failed错误事件。
参数
--cycles:每个账户的 IDLE 周期数(0表示无限)。--idle-seconds:每次 IDLE 调用的最长等待时间。--poll-seconds:轮询模式启用时使用的间隔。--idle-mode:idle或poll。--max-messages:每个周期获取的未读邮件数上限。--mark-seen/--no-mark-seen:控制是否更新未读状态。--snippet-chars:预览长度上限。--connect-timeout:连接超时秒数。--retry-seconds:失败后的重试延迟。
环境变量默认值:
IMAP_CYCLESIMAP_IDLE_MODEIMAP_IDLE_SECONDSIMAP_POLL_SECONDSIMAP_MAX_MESSAGESIMAP_MARK_SEENIMAP_SNIPPET_CHARSIMAP_CONNECT_TIMEOUTIMAP_RETRY_SECONDS
OpenClaw Webhook 转发:
OPENCLAW_WEBHOOKS_ENABLEDOPENCLAW_WEBHOOKS_TOKENOPENCLAW_WEBHOOKS_BASE_URLOPENCLAW_WEBHOOKS_MODE(agent或wake)OPENCLAW_WEBHOOKS_ENDPOINT(可选的端点覆盖项)OPENCLAW_WEBHOOKS_PATHOPENCLAW_WEBHOOKS_WAKE_MODEOPENCLAW_WEBHOOKS_DELIVEROPENCLAW_WEBHOOKS_TIMEOUTOPENCLAW_WEBHOOKS_NAMEOPENCLAW_WEBHOOKS_AGENT_IDOPENCLAW_WEBHOOKS_CHANNELOPENCLAW_WEBHOOKS_TOOPENCLAW_WEBHOOKS_MODELOPENCLAW_WEBHOOKS_THINKINGOPENCLAW_WEBHOOKS_AGENT_TIMEOUT_SECONDSOPENCLAW_WEBHOOKS_SESSION_KEY_PREFIX
错误处理
- 无效的环境变量配置会以代码
2退出。 - 在
idle模式下,不支持 IDLE 时会返回明确的错误,并建议设置IMAP_IDLE_MODE=poll。 - 运行时故障会以
type=error的形式输出。 - 账户处理过程中出现错误时,命令会以非零状态码退出。
参考
references/env.md
资源
assets/config.example.env
脚本
scripts/imap_idle_fetch.py
评论
支持 Markdown