ClawSkills logoClawSkills

Apple Mail Search

通过 SQLite 在 macOS 上快速搜索 Apple Mail。按主题、发件人、日期、附件搜索邮件 - 结果约 50ms,而使用 AppleScript 需要超过 8 分钟。当被要求搜索时使用。

介绍

# Apple Mail Search

通过 SQLite 即时搜索 Apple Mail.app 邮件。耗时约 50 毫秒,而 AppleScript 需要 8 分钟以上。

## 安装

```bash # Copy mail-search to your PATH cp mail-search /usr/local/bin/ chmod +x /usr/local/bin/mail-search ```

## 用法

```bash mail-search subject "invoice" # Search subjects mail-search sender "@amazon.com" # Search by sender email mail-search from-name "John" # Search by sender name mail-search to "[email protected]" # Search sent mail mail-search unread # List unread emails mail-search attachments # List emails with attachments mail-search attachment-type pdf # Find PDFs mail-search recent 7 # Last 7 days mail-search date-range 2025-01-01 2025-01-31 mail-search open 12345 # Open email by ID mail-search stats # Database statistics ```

## 选项

``` -n, --limit N Max results (default: 20) -j, --json Output as JSON -c, --csv Output as CSV -q, --quiet No headers --db PATH Override database path ```

## 示例

```bash # Find bank statements from last month mail-search subject "statement" -n 50

# Get unread emails as JSON for processing mail-search unread --json | jq '.[] | .subject'

# Find all PDFs from a specific sender mail-search sender "@bankofamerica.com" -n 100 | grep -i statement

# Export recent emails to CSV mail-search recent 30 --csv > recent_emails.csv ```

## 存在原因

| 方法 | 13 万封邮件耗时 | |--------|---------------------| | AppleScript 迭代 | 8+ 分钟 | | Spotlight/mdfind | **自 Big Sur 起损坏** | | SQLite(本工具) | ~50ms |

Apple 在 macOS Big Sur 中移除了 emlx Spotlight 导入器。本工具直接查询 `Envelope Index` SQLite 数据库。

## 技术细节

**数据库:** `~/Library/Mail/V{9,10,11}/MailData/Envelope Index`

**关键表:** - `messages` - 邮件元数据(日期、标志、外键) - `subjects` - 主题行 - `addresses` - 电子邮件地址和显示名称 - `recipients` - 收件人/抄送 (TO/CC) 映射 - `attachments` - 附件文件名

**局限性:** - 只读(无法撰写/发送) - 仅限元数据(正文在 .emlx 文件中) - 仅限 Mail.app(不支持 Outlook 等)

## 高级:原始 SQL

对于自定义查询,请直接使用 sqlite3:

```bash sqlite3 -header -column ~/Library/Mail/V10/MailData/Envelope\ Index " SELECT m.ROWID, s.subject, a.address FROM messages m JOIN subjects s ON m.subject = s.ROWID LEFT JOIN addresses a ON m.sender = a.ROWID WHERE s.subject LIKE '%your query%' ORDER BY m.date_sent DESC LIMIT 20; " ```

## 许可证

MIT

更多产品