apple-mail について
apple-mailは、AppleScriptとSQLiteを使ってMail.appを操作するコマンドラインスキルです。メールの検索や管理に対応し、データベースをコピーして高速にメタデータを検索できるため、Mail.appの起動中も利用できます。
主な機能
- 01メールの一覧表示と検索
- 02メールの読み取り・送信・返信
- 03メール削除と既読状態の変更
- 04メールアカウントの更新
- 05SQLiteによる高速メタデータ検索
- 06メッセージIDによる一括操作
活用シーン
- 01検索語やメールボックスでのメール検索
- 02指定したメールの読み取りや返信
- 03添付ファイル付きメールの送信
- 04メールの一括既読化や削除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sundial-org/ awesome-openclaw-skills --skill apple-mailインストール後、Claude Code で/apple-mailを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/mail-accounts.shmail-delete.shmail-fast-search.shmail-list.shmail-mailboxes.shmail-mark-read.shmail-mark-unread.shmail-read-emlx.pymail-read.shmail-refresh.shmail-reply.shmail-search.shmail-send.sh詳細
Apple Mail
AppleScript と SQLite を使用して Mail.app を操作します。スクリプトは次の場所から実行します:cd {baseDir}
コマンド
| コマンド | 使用方法 |
|---|---|
| 更新 | scripts/mail-refresh.sh [account] [wait_seconds] |
| 最近のメールを一覧表示 | scripts/mail-list.sh [mailbox] [account] [limit] |
| 検索 | scripts/mail-search.sh "query" [mailbox] [limit] |
| 高速検索 | scripts/mail-fast-search.sh "query" [limit] |
| メールを読む | scripts/mail-read.sh <message-id> [message-id...] |
| 削除 | scripts/mail-delete.sh <message-id> [message-id...] |
| 既読にする | scripts/mail-mark-read.sh <message-id> [message-id...] |
| 未読にする | scripts/mail-mark-unread.sh <message-id> [message-id...] |
| 送信 | scripts/mail-send.sh "[email protected]" "Subject" "Body" [from-account] [attachment] ¹ |
| 返信 | scripts/mail-reply.sh <message-id> "body" [reply-all] |
| アカウントを一覧表示 | scripts/mail-accounts.sh |
| メールボックスを一覧表示 | scripts/mail-mailboxes.sh [account] |
メールの更新
Mail.app に新着メッセージを確認させます:
scripts/mail-refresh.sh # All accounts, wait up to 10s
scripts/mail-refresh.sh Google # Specific account only
scripts/mail-refresh.sh "" 5 # All accounts, max 5 seconds
scripts/mail-refresh.sh Google 0 # Google account, no wait
スマートな同期検出:
- スクリプトはデータベース内のメッセージ数を監視します
- 同期が完了すると早期に終了します(2 秒間変更がない場合)
- 新着メッセージ数を報告します:
Sync complete in 2s (+3 messages)
注意:
- Mail.app が起動している必要があります(起動していない場合、スクリプトはエラーになります)
mail-list.shは自動更新しません。最新データが必要な場合は、先にmail-refresh.shを実行してください
出力形式
一覧表示/検索の結果:ID | ReadStatus | Date | Sender | Subject
●= 未読、空欄 = 既読
Gmail のメールボックス
⚠️ Gmail の特殊フォルダーには [Gmail]/ の接頭辞が必要です:
| 表示名 | 使用する名前 |
|---|---|
Spam | [Gmail]/Spam |
Sent Mail | [Gmail]/Sent Mail |
All Mail | [Gmail]/All Mail |
Trash | [Gmail]/Trash |
カスタムラベルには接頭辞は不要です。
高速検索(SQLite)
✨ Mail.app の起動中でも安全に実行できます — 最初にデータベースを一時ファイルにコピーします。
scripts/mail-fast-search.sh "query" [limit] # ~50ms vs minutes
以前は Mail.app を終了する必要がありました。現在は、検索前にデータベースを一時ファイルにコピーするため、いつでも実行できます。
パフォーマンスに関する注意
操作ごとの速度:
| 操作 | 速度 | 備考 |
|---|---|---|
mail-fast-search.sh | 約 50ms | SQLite クエリー。最速 |
mail-accounts.sh | 1 秒未満 | シンプルな AppleScript |
mail-list.sh | 1~3 秒 | AppleScript、メールボックスに直接アクセス |
mail-send.sh | 1~2 秒 | メッセージを作成して送信 |
mail-read.sh | 約 2 秒 | 位置を最適化した検索 |
mail-delete.sh | 約 0.5 秒 | 位置を最適化した検索 |
mail-mark-*.sh | 約 1.5 秒 | 位置を最適化した検索 |
最適化手法: SQLite でアカウント UUID とメッセージのおおよその位置を取得します。AppleScript は先頭から順に処理する代わりに、その位置へ直接移動します。
一括操作に対応しています:
mail-read.sh 123 456 789- 複数のメールを読みます(それぞれの間に区切りを挿入)mail-delete.sh 123 456 789- 複数のメールを削除しますmail-mark-read.sh 123 456- 複数のメールを既読にしますmail-mark-unread.sh 123 456- 複数のメールを未読にします
⚠️ 自動更新はありません: スクリプトはキャッシュされたデータを読み込みます。最新のメールが必要な場合は、先に mail-refresh.sh を実行してください。
メールの管理
メールを削除する:
scripts/mail-delete.sh 12345 # Delete one
scripts/mail-delete.sh 12345 12346 12347 # Delete multiple
既読/未読にする:
scripts/mail-mark-read.sh 12345 12346 # Mark as read
scripts/mail-mark-unread.sh 12345 # Mark as unread
一括操作の例:
# Find spam emails
scripts/mail-fast-search.sh "spam" 50 > spam.txt
# Extract IDs and delete them
grep "^[0-9]" spam.txt | cut -d'|' -f1 | xargs scripts/mail-delete.sh
メール本文を読む
scripts/mail-read.sh 12345 # Single email
scripts/mail-read.sh 12345 12346 12347 # Multiple emails (separated output)
位置を最適化した検索を使用します(1 メッセージあたり約 2 秒)。複数のメールは ======== で区切られ、最後に概要が表示されます。
エラー
| エラー | 原因 |
|---|---|
Mail.app is not running | スクリプトを実行する前に Mail.app を開いてください |
Account not found | アカウントが無効です — mail-accounts.sh で確認してください |
Message not found | ID が無効または削除されています — mail-list.sh から最新の ID を取得してください |
Can't get mailbox | 名前が無効です — mail-mailboxes.sh で確認してください |
Mail database not found | SQLite DB が見つかりません — ~/Library/Mail/V{9,10,11}/MailData/ を確認してください |
技術的な詳細
データベース: ~/Library/Mail/V{9,10,11}/MailData/Envelope Index
メッセージの検索方法(最適化済み):
- SQLite にクエリを実行し、アカウント UUID、メールボックスのパス、おおよその位置を取得します
- AppleScript で特定のアカウントに直接アクセスします(反復処理は行いません)
- おおよその位置から検索を開始します(前後 5 件のメッセージをバッファーとして確保)
- 位置のヒントで見つからない場合に限り、メールボックス全体を検索します
安全性:
- 高速検索では、クエリを実行する前にデータベースを一時ファイルにコピーします
- Mail.app の実行中でも安全に使用できます
- 削除/既読マーク操作ではライブデータベースにクエリを実行しますが、アクセスは最小限です
注意事項
- メッセージ ID は内部的なものです。一覧表示/検索から最新の ID を取得してください
- 送信前に宛先を確認してください
- AppleScript による検索は低速ですが網羅的です。SQLite はメタデータの検索が高速です
- 削除/既読マーク操作は一括処理に対応しています(複数の ID を渡してください)
- 最新のメールを一覧表示する必要がある場合は、必ず事前に更新してください
¹ 既知の制限事項: Mail.app は送信メールの先頭に空行を追加します。これは AppleScript/Mail.app の動作であり、回避できません。