mcpField
A
apple-mail

apple-mail

github.com/sundial-org生産性670355 回インストール34 週間前に更新
リポジトリ

apple-mail について

apple-mailは、AppleScriptとSQLiteを使ってMail.appを操作するコマンドラインスキルです。メールの検索や管理に対応し、データベースをコピーして高速にメタデータを検索できるため、Mail.appの起動中も利用できます。

主な機能

  1. 01メールの一覧表示と検索
  2. 02メールの読み取り・送信・返信
  3. 03メール削除と既読状態の変更
  4. 04メールアカウントの更新
  5. 05SQLiteによる高速メタデータ検索
  6. 06メッセージIDによる一括操作

活用シーン

  1. 01検索語やメールボックスでのメール検索
  2. 02指定したメールの読み取りや返信
  3. 03添付ファイル付きメールの送信
  4. 04メールの一括既読化や削除

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sundial-org/awesome-openclaw-skills --skill apple-mail

インストール後、Claude Code で/apple-mailを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
mail-accounts.sh
mail-delete.sh
mail-fast-search.sh
mail-list.sh
mail-mailboxes.sh
mail-mark-read.sh
mail-mark-unread.sh
mail-read-emlx.py
mail-read.sh
mail-refresh.sh
mail-reply.sh
mail-search.sh
mail-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約 50msSQLite クエリー。最速
mail-accounts.sh1 秒未満シンプルな AppleScript
mail-list.sh1~3 秒AppleScript、メールボックスに直接アクセス
mail-send.sh1~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 foundID が無効または削除されています — mail-list.sh から最新の ID を取得してください
Can't get mailbox名前が無効です — mail-mailboxes.sh で確認してください
Mail database not foundSQLite DB が見つかりません — ~/Library/Mail/V{9,10,11}/MailData/ を確認してください

技術的な詳細

データベース: ~/Library/Mail/V{9,10,11}/MailData/Envelope Index

メッセージの検索方法(最適化済み):

  1. SQLite にクエリを実行し、アカウント UUID、メールボックスのパス、おおよその位置を取得します
  2. AppleScript で特定のアカウントに直接アクセスします(反復処理は行いません)
  3. おおよその位置から検索を開始します(前後 5 件のメッセージをバッファーとして確保)
  4. 位置のヒントで見つからない場合に限り、メールボックス全体を検索します

安全性:

  • 高速検索では、クエリを実行する前にデータベースを一時ファイルにコピーします
  • Mail.app の実行中でも安全に使用できます
  • 削除/既読マーク操作ではライブデータベースにクエリを実行しますが、アクセスは最小限です

注意事項

  • メッセージ ID は内部的なものです。一覧表示/検索から最新の ID を取得してください
  • 送信前に宛先を確認してください
  • AppleScript による検索は低速ですが網羅的です。SQLite はメタデータの検索が高速です
  • 削除/既読マーク操作は一括処理に対応しています(複数の ID を渡してください)
  • 最新のメールを一覧表示する必要がある場合は、必ず事前に更新してください

¹ 既知の制限事項: Mail.app は送信メールの先頭に空行を追加します。これは AppleScript/Mail.app の動作であり、回避できません。

コメント