imap-client は何をしますか?
myl を使ってターミナルからIMAP経由でメールボックスを読み取ります。myl は小さなPython CLIクライアントです。codd-tech がメンテナンス・配布しています。 OpenClaw およびその他のAgentSkills互換ランタイム(Claude Code、汎用)に組み込むように設計されています。
myl は読み取り専用で、意図的に最小限に設計されています。メッセージの一覧表示、検索、取得、添付ファイルのダウンロードが可能です。メールの送信、フォルダ管理、状態変更(オプションで既読マークを付ける以外)は行いません。
このスキルに認証情報が渡される仕組み
これは最も重要なセクションです。コマンドラインにパスワードを入力しないでください。 認証情報は環境変数としてランタイムからエージェント実行毎に注入されます。このスキルはそれらを読み取り、{baseDir}/scripts/imap.sh のラッパーを介して適切な myl フラグを組み立てます。
ラッパーが期待する変数:
| 変数 | 必須 | 目的 |
|---|---|---|
IMAP_USER | はい | ログイン(通常は完全なメールアドレス) |
IMAP_PASSWORD | はい | アプリ固有パスワード(references/authentication.md 参照) |
IMAP_PROVIDER | いいえ | auto(デフォルト)、gmail、yandex、mailru、manual のいずれか |
IMAP_SERVER | manual の場合のみ | IMAPホスト |
IMAP_PORT | いいえ | デフォルトは993 |
IMAP_STARTTLS | いいえ | 1 で --starttls を追加(ポート143の場合のみ使用) |
一度設定すれば、毎回のセッションで使用できます。 方法はランタイムに依存します — references/authentication.md では、OpenClaw の skills.entries.imap-client.env、汎用シェルの export、~/.config/imap-client/credentials フォールバックファイルの3つをカバーしています。独自の方式を考案せず、これら3つのいずれかを使用してください。
ラッパーが IMAP_USER または IMAP_PASSWORD の欠落を検出した場合、セットアップ手順を表示して、サーバーに接続せずに終了します。それが合図です。処理を中断し、ユーザーに認証情報の設定を案内してから再試行してください。
ワークフローの概要
mylがインストールされていることを確認します。 OpenClaw はこのスキルをrequires.bins: ["myl"]でゲートしているため、mylがなければロードしません。OpenClaw 以外のランタイムでは、bash {baseDir}/scripts/check_myl.shを実行します。不足している場合はreferences/installation.mdを参照してください。- 認証情報が設定されていることを確認します。
bash {baseDir}/scripts/imap.sh --count 1 >/dev/nullを一度実行します。成功すれば、環境変数が正しく設定され、接続が機能しています。失敗した場合は、references/authentication.mdを参照してユーザーを案内します。 - ラッパーを通じて要求された操作を実行します。 一覧表示、検索、IDによる取得、HTMLの取得、raw
.emlの保存、添付ファイルの取得など。 - 結果を要約します。 ユーザーが明示的に要求しない限り、メール本文全体をチャットにダンプしないでください。
このスキル内のすべての myl の例は {baseDir}/scripts/imap.sh を経由し、ラッパーが環境変数を適切な myl フラグに展開します。--google と --auto、--server/--port の違いを覚える必要はありません。ラッパーが IMAP_PROVIDER に基づいて選択します。
いつ何を読むか
| タスクで… | 読むもの |
|---|---|
myl の検出やインストール、OpenClaw の requires.bins ゲーティング | references/installation.md |
| 認証情報の設定、接続モードの選択、Gmail / Yandex / Mail.ru / iCloud / Fastmail のアプリパスワード | references/authentication.md |
| 特定のCLIフラグ、一覧表示、検索、取得、添付ファイル、プロバイダ固有のフォルダ名 | references/operations.md |
| 複数ステップのレシピ(例:「先月のAcmeからの請求書を見つけてPDFを保存」) | references/recipes.md |
| SSLエラー、「command not found」、自動検出の失敗、「AUTHENTICATIONFAILED」、ラッパーから環境変数が見えない | references/troubleshooting.md |
原則
1. 認証情報が生成するコマンドに現れてはならない
認証情報はランタイムによって注入される環境変数であるため、ラッパーが内部的に処理します。myl -p hunter2 や myl -p "$IMAP_PASSWORD" のようなコマンドを生成してはいけません。どちらも漏洩します。前者はシェル履歴に残り、後者は myl 実行中に /proc/<pid>/cmdline でパスワードが露出します。ラッパーを使用すれば、パスワードはラッパー自身のプロセススコープ内に保持されます:
bash {baseDir}/scripts/imap.sh --count 5
ラッパーは、サポートされている場合は標準入力経由で、そうでない場合は内部的に構築したフラグ経由で myl に認証情報を渡します。これは直接の myl 使用と同じトレードオフですが、パスワードリテラルがあなたが書いた、ログに記録した、ユーザーに表示したコマンドに一切現れないという利点があります。
2. デフォルトで結果セットを小さくする
ユーザーの意図が探索的(「新しいメールはある?」)な場合は、--count 5 または --count 10 を渡します。明示的な要求があった場合のみ、より大きなウィンドウを取得します。これにより出力が読みやすくなり、ユーザーが見ることを意図していなかった機密コンテンツがダンプされるのを防ぎます。
3. 誤って既読マークを付けない
--mark-seen はサーバー上の状態を変更します。ユーザーが明示的にメッセージを既読にするよう要求した場合にのみ渡してください。このフラグなしでの一覧表示や読み取りは非破壊的です。
4. 長い本文はファイルに保存し、チャットでは要約する
ユーザーが長いメッセージやHTMLメールを取得した場合は、生の出力をファイル(例:/tmp/email-<id>.eml または .html)に保存し、2〜4文の要約とファイルパスをユーザーに提供します。500行のHTML本文を会話に貼り付けないでください。
5. 検索構文はサーバーサイドのIMAPであり、GmailのWeb UIではない
--search "important" はIMAPの SEARCH コマンドを発行します。Gmailの from:、has:attachment、label: 演算子は理解しません。複雑なフィルタリングが必要な場合は、--count で適切なウィンドウを取得し、結果をローカルでフィルタリングしてください。IMAPの SEARCH がサポートする内容については references/operations.md を参照してください。
6. パスワードをエコー、要約、または永続化してはならない
実行した内容を要約する際は、認証情報を IMAP_PASSWORD または「OpenClaw設定からのパスワード」と呼び、実際の値を決して表示してはいけません。ユーザーが誤ってチャットにパスワードを貼り付けた場合は、漏洩したものとして扱います。ユーザーにパスワードをローテーションし、設定を更新するよう伝えてください。いかなる成果物にも書き込まないでください。
クイック決定木
ユーザーがCLIからメール関連の何かを要求した
│
├─ `myl` がインストールされ、PATHが通っているか? ── いいえ ──► references/installation.md
│ │
│ はい
│ ▼
├─ ラッパーのスモークテストは成功するか?
│ bash {baseDir}/scripts/imap.sh --count 1 >/dev/null
│ │ いいえ ──► references/authentication.md
│ はい
│ ▼
├─ ユーザーは何を望んでいるか?
│ ├─ ブラウズ / 一覧表示 ──► imap.sh --count N [--folder F]
│ ├─ 検索 ──► imap.sh --search "TERM" [--count N]
│ ├─ 1つのメッセージを読む ──► imap.sh "$MAILID"
│ ├─ HTML版を読む ──► imap.sh --html "$MAILID" → ファイルに保存
│ ├─ raw .eml を保存 ──► imap.sh --raw "$MAILID" > file.eml
│ ├─ 添付ファイルを取得 ──► imap.sh "$MAILID" "$ATT_NAME" > file
│ └─ 複数ステップ ──► references/recipes.md
│
└─ エラー? ─────────────────────► references/troubleshooting.md
出力スタイル
ラッパーを実行した後、次の形式で結果を提示します:
- 実行内容の1行ステータス(例:「INBOXの最新10メッセージを一覧表示しました」)
- メッセージのメタデータ(日付、送信元、件名、ID)のコンパクトなテーブルまたは箇条書きリスト
- 大きな出力を保存したファイルパス
- 推奨される次のアクション(例:「#4582を開きますか、それとも添付ファイルを保存しますか?」)
スキャンしやすく保ってください。