email-imap-full-fetch について
Email IMAP Full Fetchは、IMAPメールボックスから指定メールを取得し、解析済みの内容と添付ファイルのメタデータを返すスキルです。Message-Idでの完全一致を優先し、UIDにフォールバックして、元メールと添付ファイルをローカルに保存します。
主な機能
- 01Message-Id検索とUIDフォールバック
- 02完全なraw 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から安定したメッセージ参照情報を使って対象のメールを1件取得します。
- 検索順序を徹底します。まず
HEADER Message-Idで完全一致を検索し、次にuidをフォールバックとして使います。 BODY.PEEK[]を使ってMIMEデータ全体をダウンロードします。- ヘッダー、本文全体、HTML本文、添付ファイルのメタデータを解析して返します。
- ファイル名の安全性とインデックスの冪等性を確保しながら、
.emlファイルと添付ファイルをディスクに保存します。
標準フロー
- 入力には、ステージ1のルーティング出力(
mail_ref.message_id_norm)から取得したmessage_id_normを含める必要があります。 - デフォルトの方法として、
fetch --message-id "<message_id_norm or raw Message-Id>"を使います。 - 使用可能なメッセージ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 対応