OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  apple-mail:针对 macOS 的 Apple Mail 邮件应用集成工具

apple-mail:针对 macOS 的 Apple Mail 邮件应用集成工具

 
  loadbalancer ·  2026-02-26 04:40:03 · 2 次点击  · 0 条评论  

名称: apple-mail
描述: 适用于 macOS 的 Apple Mail.app 集成。快速直接访问(无需枚举),可读取收件箱、搜索邮件、发送邮件、回复和管理消息。
元数据: {"clawdbot":{"emoji":"📧","os":["darwin"],"requires":{"bins":["sqlite3"]}}}


Apple Mail

通过 AppleScript 和 SQLite 与 Mail.app 交互。从以下目录运行脚本:cd {baseDir}

命令

命令 用法
刷新 scripts/mail-refresh.sh [账户] [等待秒数]
列出最近邮件 scripts/mail-list.sh [邮箱] [账户] [数量限制]
搜索 scripts/mail-search.sh "查询" [邮箱] [数量限制]
快速搜索 scripts/mail-fast-search.sh "查询" [数量限制]
读取邮件 scripts/mail-read.sh <邮件ID> [邮件ID...]
删除 scripts/mail-delete.sh <邮件ID> [邮件ID...]
标记为已读 scripts/mail-mark-read.sh <邮件ID> [邮件ID...]
标记为未读 scripts/mail-mark-unread.sh <邮件ID> [邮件ID...]
发送 scripts/mail-send.sh "收件人@邮箱.com" "主题" "正文" [发件账户] [附件] ¹
回复 scripts/mail-reply.sh <邮件ID> "正文" [回复所有人]
列出账户 scripts/mail-accounts.sh
列出邮箱 scripts/mail-mailboxes.sh [账户]

刷新邮件

强制 Mail.app 检查新消息:

scripts/mail-refresh.sh                    # 所有账户,最多等待 10 秒
scripts/mail-refresh.sh Google             # 仅特定账户
scripts/mail-refresh.sh "" 5               # 所有账户,最多 5 秒
scripts/mail-refresh.sh Google 0           # Google 账户,不等待

智能同步检测:
- 脚本监控数据库消息计数
- 当同步完成(2 秒内无变化)时提前返回
- 报告新消息数量:Sync complete in 2s (+3 messages)

注意:
- Mail.app 必须正在运行(否则脚本会报错)
- mail-list.sh 不会自动刷新——如果需要最新数据,请先调用 mail-refresh.sh

输出格式

列表/搜索返回格式:ID | 阅读状态 | 日期 | 发件人 | 主题
- = 未读,空白 = 已读

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 "查询" [数量限制]  # ~50ms vs 数分钟

以前需要退出 Mail.app。现在通过先复制数据库到临时文件再进行查询,可随时使用。

性能说明

各操作速度:
| 操作 | 速度 | 说明 |
|-----------|-------|-------|
| mail-fast-search.sh | ~50ms | SQLite 查询,最快 |
| mail-accounts.sh | <1s | 简单的 AppleScript |
| mail-list.sh | 1-3s | AppleScript,直接访问邮箱 |
| mail-send.sh | 1-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                    # 删除一封
scripts/mail-delete.sh 12345 12346 12347        # 删除多封

标记为已读/未读:

scripts/mail-mark-read.sh 12345 12346           # 标记为已读
scripts/mail-mark-unread.sh 12345               # 标记为未读

批量操作示例:

# 查找垃圾邮件
scripts/mail-fast-search.sh "spam" 50 > spam.txt

# 提取 ID 并删除它们
grep "^[0-9]" spam.txt | cut -d'|' -f1 | xargs scripts/mail-delete.sh

读取邮件正文

scripts/mail-read.sh 12345              # 单封邮件
scripts/mail-read.sh 12345 12346 12347  # 多封邮件(输出分隔)

使用位置优化查找(每封约 2 秒)。多封邮件之间用 ======== 分隔,末尾有摘要。

错误

错误 原因
Mail.app is not running 运行脚本前请先打开 Mail.app
Account not found 无效账户 —— 检查 mail-accounts.sh
Message not found 无效/已删除的 ID —— 从 mail-list.sh 获取新的列表
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
  • 发送前确认收件人
  • AppleScript 搜索较慢但全面;SQLite 对元数据搜索很快
  • 删除/标记操作支持批量操作(传递多个 ID)
  • 如果需要绝对最新的邮件,请在列出前务必刷新

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

2 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor