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. 05快速 SQLite 元数据搜索
  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.sh<1s简单的 AppleScript
mail-list.sh1-3sAppleScript,直接访问邮箱
mail-send.sh1-2s创建并发送邮件
mail-read.sh~2s经过位置优化的查找
mail-delete.sh~0.5s经过位置优化的查找
mail-mark-*.sh~1.5s经过位置优化的查找

优化技术: 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)

使用经过位置优化的查找(每封邮件约 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 found找不到 SQLite 数据库——请检查 ~/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,请通过列表或搜索获取最新 ID
  • 发送前请确认收件人
  • AppleScript 搜索速度较慢,但结果全面;SQLite 获取元数据的速度较快
  • 删除、标记操作支持批量处理(传入多个 ID)
  • 如果需要获取最新邮件,列出邮件前请务必刷新

¹ 已知限制: Mail.app 会在已发送邮件开头添加一个空行。这是 AppleScript/Mail.app 的行为,无法绕过。

评论

支持 Markdown