关于 email-imap-full-fetch
Email IMAP Full Fetch 是从 IMAP 邮箱提取单封邮件的技能,可返回解析后的内容和附件元数据。它优先精确匹配 Message-Id,再回退到 UID,并将原始邮件及附件保存到本地。
主要功能
- 01优先按 Message-Id 查找,UID 回退
- 02获取完整原始 MIME 内容
- 03返回邮件头及纯文本和 HTML 正文
- 04保存 .eml 文件和附件
- 05幂等记录与安全文件名处理
适用场景
- 01提取路由阶段指定的邮件以供处理
- 02获取邮件正文和附件元数据
- 03保存邮件和文件并避免重复记录
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tiangong-ai/ agent-skills --skill email-imap-full-fetch安装后在 Claude Code 中输入/email-imap-full-fetch确认已加载。
详细介绍
邮件 IMAP 完整抓取
核心目标
- 通过稳定的邮件引用从 IMAP 抓取一封目标邮件。
- 强制按以下顺序查找:先精确匹配
HEADER Message-Id,再回退到uid。 - 通过
BODY.PEEK[]下载完整原始 MIME。 - 解析并返回邮件头、完整纯文本正文、HTML 正文和附件元数据。
- 将
.eml和附件文件保存到磁盘,并确保文件名安全且索引具备幂等性。
标准流程
- 输入必须包含阶段 1 路由输出中的
message_id_norm(mail_ref.message_id_norm)。 - 默认使用
fetch --message-id "<message_id_norm or raw Message-Id>"。 - 仅当没有可用的 message-id 时,才使用
fetch --uid "<uid>"。 - 邮箱选择应与阶段 1 保持一致(
--mailbox或IMAP_MAILBOX)。 - 读取 JSON 输出,并使用返回的
mail_ref继续下游处理。
命令
按 Message-Id 抓取(首选):
python3 scripts/imap_full_fetch.py fetch --message-id "<[email protected]>"
按 UID 抓取(仅用作回退):
python3 scripts/imap_full_fetch.py fetch --uid "123456"
按需同时使用(先通过 message-id 查找,再回退到 uid):
python3 scripts/imap_full_fetch.py fetch --message-id "<[email protected]>" --uid "123456"
输出约定
- 输出为单个 JSON 对象。
- 必需的顶层字段:
mail_refheaderstext_plaintext_htmlattachmentssaved_eml_path
mail_ref包含:account、mailbox、uid、message_id_raw、message_id_norm、date
attachments[]包含每个文件的元数据和持久化结果:filename、content_type、bytes、disposition、saved_path、skipped_reason
存储与幂等性
saved_eml_path指向通过BODY.PEEK[]保存到本地的.eml文件。- 保存附件时不会在 JSON 中返回附件二进制内容。
- 会清理文件名,移除路径分隔符和不安全字符。
- 重名附件会通过附加内容哈希后缀进行去重。
- 重复请求通过
message_id_norm索引实现幂等,并直接返回已持久化的 JSON 记录。
参数
--message-id:主要查找键。--uid:回退查找键。--mailbox:要查询的邮箱(默认使用IMAP_MAILBOX或INBOX)。--save-eml-dir:.eml文件的目标目录(环境变量IMAP_FULL_SAVE_EML_DIR)。--index-dir:幂等性索引 JSON 文件的目标目录(环境变量IMAP_FULL_INDEX_DIR,默认值为<save-eml-dir>/.index)。--save-attachments-dir:附件的目标目录(环境变量IMAP_FULL_SAVE_ATTACHMENTS_DIR)。--max-attachment-bytes:要保存的附件大小上限(环境变量IMAP_FULL_MAX_ATTACHMENT_BYTES)。--allow-ext:允许的附件扩展名,以逗号分隔(环境变量IMAP_FULL_ALLOW_EXT)。--connect-timeout:IMAP 连接超时秒数(默认值来自IMAP_CONNECT_TIMEOUT)。
必需的环境变量
IMAP_HOSTIMAP_USERNAMEIMAP_PASSWORD
可选的账户默认值:
IMAP_NAMEIMAP_PORTIMAP_SSLIMAP_MAILBOX
脚本
scripts/imap_full_fetch.py
评论
支持 Markdown