关于 pp-outlook-email
pp-outlook-email 是供 Agent 处理 Microsoft 365 邮箱的 CLI 技能。本地存储支持跨文件夹收件箱整理、跟进检测和摘要,并可执行邮件操作及访问 Microsoft Graph。
主要功能
- 01查找等待回复的已发送邮件
- 02按发件人汇总收件箱活动
- 03筛出未读、已标记和待处理邮件
- 04生成邮箱活动摘要
- 05管理、移动和发送邮件
适用场景
- 01查看上次会话后收到的邮件
- 02查找待跟进和等待处理的对话
- 03规划对高频发件人的批量归档
- 04清理邮箱前检查较大且较旧的附件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mvanhorn/ printing-press-library --skill pp-outlook-email安装后在 Claude Code 中输入/pp-outlook-email确认已加载。
详细介绍
Outlook 邮件 — Printing Press CLI
前置条件:安装 CLI
此技能由 outlook-email-pp-cli 二进制文件驱动。**调用此技能中的任何命令前,必须确认 CLI 已安装。**如果尚未安装,请先安装:
- 通过 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到
$HOME/.local/bin;在 Windows 上,默认安装到%LOCALAPPDATA%\Programs\PrintingPress\bin:npx -y @mvanhorn/printing-press-library install outlook-email --cli-only - 验证:
outlook-email-pp-cli --version - 确保报告的安装目录位于将调用此技能的 Agent/运行时的
$PATH中。
如果 npx 安装失败(没有 Node、离线等),请改用 Go 直接安装(需要 Go 1.26.6 或更高版本):
go install github.com/mvanhorn/printing-press-library/library/productivity/outlook-email/cmd/outlook-email-pp-cli@latest
如果安装后 --version 报告“command not found”,说明运行时无法在 $PATH 中找到二进制文件目录。验证成功前,请勿继续执行技能命令。
何时使用此 CLI
当 Agent 需要大规模整理个人 Microsoft 365 收件箱、找出待跟进事项,或在没有 Copilot 许可证的情况下撰写邮件时,请使用此 CLI。与通用 HTTP 方式相比,这是更合适的选择,因为离线存储支持跨文件夹、跨时间查询(followup、senders、waiting、digest),而这些查询需要持久化状态。
独特功能
其他任何用于此 API 的工具都不具备这些功能。
会累积的本地状态
-
followup— 列出你在 N 天前发送、但收件人从未回复的邮件——处理那些被你遗忘的待办事项。销售、产品管理和招聘工作流成败的关键在于跟进时机。当 Agent 需要找出停滞的邮件往来时,就用它。
outlook-email-pp-cli followup --days 7 --agent -
senders— 按发件人统计一段时间内的收件箱:数量、未读数、最近收件时间、主要文件夹——看看谁的邮件淹没了你的收件箱。可将其结果作为批量归档的输入,或用于制定收件箱规则。整理爆满收件箱的 Agent 可以从这里开始。
outlook-email-pp-cli senders --window 30d --min 5 --agent --select sender,count,unread,last_received -
since— 显示自某个时间戳以来收到的邮件,按重点/其他、发件人和文件夹分组。非常适合查看“我专心工作时错过了什么”。Agent 加入会话后应运行的第一条命令,用于快速跟进进度。开销低、结构清晰,适合 Agent 使用。
outlook-email-pp-cli since 2h --agent -
flagged— 列出已标记邮件的未完成截止日期、逾期天数和邮件存续时间。这是 Outlook 从不汇总的收件箱清零待办清单。这是 Agent 的待办清单。搭配回复/转发工具,真正处理完这些事项。
outlook-email-pp-cli flagged --overdue --agent -
stale-unread— 按文件夹分组,列出超过 N 天的未读邮件。找出藏在子文件夹中的未读积压。这与
senders(邮件量)不同——它回答的是“未读邮件积压在哪里”,帮助 Agent 将文件夹分配给批量标记为已读操作。outlook-email-pp-cli stale-unread --days 14 --agent -
waiting— 列出最后一封邮件并非由你发送,且未读或未回复已达 N 天的对话。这是“有人在等你回复”的待办清单。与 followup 相对应。每天开始时搭配使用两者,查看每个未完结对话中你和对方各自的待办。
outlook-email-pp-cli waiting --days 3 --agent -
conversations— 按邮件数量、参与者和未读邮件数量对对话排序。找出最消耗你注意力的邮件往来。帮助 Agent 决定接下来要总结或静音哪个对话。
outlook-email-pp-cli conversations --top 20 --window 30d --agent -
quiet— 列出你过去经常收到邮件、但已沉寂 N 天的发件人。可用于检测关系疏远。销售/产品管理使用场景:找出过去常有互动、如今却不再联系的客户或供应商。
outlook-email-pp-cli quiet --baseline 90d --silent 30d --agent -
digest— 一次性生成每日摘要:收件/发件/未读/已标记数量、主要发件人、主要对话、重点/其他比例。可通过 cron 或技能循环运行,生成类似 Slack 的每日摘要,无需调用 10 多次 Graph。
outlook-email-pp-cli digest --date 2026-05-12 --agent -
attachments-stale— 列出超过 N 天且大小超过阈值的附件,并可按大小排序。这是拯救邮箱配额的方案。邮箱配额即将用尽时,Agent 需要优先找出最旧且最大的附件;此命令会列出这些附件。
outlook-email-pp-cli attachments-stale --days 90 --min-mb 1 --agent --select sender,received_at,size_mb,name -
dedup— 根据 conversation_id、internet_message_id 或规范化后的(主题、发件人、收件人)查找可能重复的对话或邮件。在批量归档前找出重复的 newsletter 和跨文件夹副本。
outlook-email-pp-cli dedup --by subject-sender --agent
原生 Agent 支撑工具
-
bulk-archive— 读取发件人列表或查询,打印移动计划,并可选择执行。默认安全,不会带来意外。搭配
senders或quiet完成端到端的收件箱整理;Agent 可先审核计划,再选择使用 --execute 执行。outlook-email-pp-cli bulk-archive --from-senders senders.txt --to-folder Archive --execute
命令参考
attachments — 特定邮件上的附件
outlook-email-pp-cli attachments get— 获取单个附件(fileAttachment 的元数据 + base64 contentBytes)outlook-email-pp-cli attachments list— 列出邮件上的附件(默认仅包含元数据)
categories — 应用于邮件和日历的颜色类别主列表
outlook-email-pp-cli categories create— 创建新的颜色类别outlook-email-pp-cli categories delete— 删除颜色类别outlook-email-pp-cli categories get— 按 ID 获取类别outlook-email-pp-cli categories list— 列出颜色类别主列表
folders — 邮件文件夹及其层级结构
outlook-email-pp-cli folders children— 列出父文件夹下的子文件夹outlook-email-pp-cli folders create— 创建顶层邮件文件夹outlook-email-pp-cli folders create-child— 在父文件夹下创建子文件夹outlook-email-pp-cli folders delete— 删除邮件文件夹(将内容移至“已删除邮件”)outlook-email-pp-cli folders delta— 增量同步邮件文件夹层级结构outlook-email-pp-cli folders get— 按 ID 或众所周知的名称获取邮件文件夹outlook-email-pp-cli folders list— 列出顶层邮件文件夹outlook-email-pp-cli folders messages— 列出特定文件夹中的邮件outlook-email-pp-cli folders update— 重命名邮件文件夹
inference — “重点”和“其他”收件箱分类的覆盖设置
outlook-email-pp-cli inference create-override— 将发件人固定到“重点”或“其他”outlook-email-pp-cli inference delete-override— 移除发件人固定设置outlook-email-pp-cli inference list-overrides— 列出固定到“重点”或“其他”的发件人
mailbox-settings — 邮箱级设置:时区、语言、签名、自动答复
outlook-email-pp-cli mailbox-settings get— 获取所有邮箱设置outlook-email-pp-cli mailbox-settings update— 更新邮箱设置(自动答复、时区、工作时间、语言)
messages — 默认邮箱中的 Outlook 邮件
outlook-email-pp-cli messages copy— 将邮件复制到另一个邮件文件夹outlook-email-pp-cli messages create-draft— 创建草稿邮件(保存但不发送)outlook-email-pp-cli messages delete— 删除邮件(默认移至“已删除邮件”)outlook-email-pp-cli messages delta— 拉取自上次增量令牌以来的邮件增量更改outlook-email-pp-cli messages forward— 将邮件转发给新收件人outlook-email-pp-cli messages get— 按 ID 获取邮件outlook-email-pp-cli messages list— 列出所有文件夹中的邮件outlook-email-pp-cli messages move— 将邮件移至另一个邮件文件夹outlook-email-pp-cli messages reply— 回复邮件(使用原发件人)outlook-email-pp-cli messages reply-all— 回复邮件的所有收件人outlook-email-pp-cli messages send-draft— 发送先前保存的草稿邮件outlook-email-pp-cli messages update— 更新邮件字段(isRead、categories、flag、importance、subject、body)
rules — 自动处理收到邮件的收件箱规则
outlook-email-pp-cli rules create— 创建收件箱规则outlook-email-pp-cli rules delete— 删除收件箱规则outlook-email-pp-cli rules get— 获取单条收件箱规则outlook-email-pp-cli rules list— 列出收件箱规则outlook-email-pp-cli rules update— 更新收件箱规则
send_mail — 一次性发送全新邮件(跳过草稿文件夹)
outlook-email-pp-cli send_mail— 撰写并发送邮件,无需先保存为草稿
查找合适的命令
知道自己想做什么,但不知道该用哪个命令时,可以直接询问 CLI:
outlook-email-pp-cli which "<capability in your own words>"
which 会根据自然语言描述的功能查询,从此 CLI 精选的功能索引中找出最匹配的命令。退出代码 0 表示至少找到一个匹配项;退出代码 2 表示没有足够可靠的匹配结果——请改用 --help 或缩小查询范围。
用法示例
早间速览
outlook-email-pp-cli sync && outlook-email-pp-cli since 12h --agent --select sender,subject,inference_classification,received_at
增量同步邮箱,然后只列出夜间收到的邮件,并按组整理,方便 Agent 进行总结。
跟进邮件扫描
outlook-email-pp-cli followup --days 7 --agent --select recipient,subject,sent_at,days_quiet
列出你一周多以前发出、但尚未收到回复的邮件——这些都是你需要跟进并了结的事项。
邮件量最高的发件人
outlook-email-pp-cli senders --window 30d --min 10 --agent
列出过去 30 天内发件量最高的发件人。将输出传给 bulk-archive,以规划清理。
仅使用选定字段回复
outlook-email-pp-cli messages get AAMkAGI2... --agent --select subject,from,body_preview,received_at
将深层嵌套的邮件负载缩减为 Agent 撰写回复前实际需要的四个字段。
规划收件箱清理
outlook-email-pp-cli bulk-archive --from-senders senders.txt --to-folder Archive --agent
从 senders.txt 读取发件人列表(每行一个地址),在本地存储中查找匹配的邮件,并打印移动计划。传入 --execute 可实际逐个调用 POST /me/messages/{id}/move。
身份验证设置
通过 https://login.microsoftonline.com/common 使用 OAuth 2.0 设备代码流。个人 MSA(Outlook.com、Hotmail、Live)和工作或学校帐户均可使用。默认客户端 ID 是 Microsoft Graph PowerShell 应用,因此无需 Azure 租户。也可通过 --client-id 使用自己的 Azure AD 应用。刷新令牌保存在 ~/.config/outlook-email-pp-cli/config.toml;运行 auth refresh 手动刷新,或让命令自动轮换令牌。
运行 outlook-email-pp-cli doctor 验证设置。
Agent 模式
在任何命令中添加 --agent。它会展开为:--json --compact --no-input --no-color --yes。
-
可通过管道传递 — JSON 输出到 stdout,错误输出到 stderr
-
可筛选 —
--select可保留部分字段。点分路径可深入嵌套结构;数组会逐项遍历。对于冗长 API,缩小上下文尤其重要:outlook-email-pp-cli attachments list mock-value --agent --select id,name,status -
可预览 —
--dry-run显示请求,但不会发送 -
适合离线使用 — 在本地 SQLite 存储可用时,同步和搜索命令可以使用该存储
-
非交互式 — 从不发起提示,所有输入都通过标志传入
-
显式重试 — 仅当已存在的创建操作应视为成功时才使用
--idempotent;仅当缺失的删除目标应视为成功时才使用--ignore-missing
响应封装
从本地存储或 API 读取数据的命令,会将输出包装在一个来源信息封装中:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
解析 .results 获取数据,并查看 .meta.source 判断数据来自实时 API 还是本地存储。只有当 stdout 连接到终端时,才会将便于人阅读的 N results (live) 摘要输出到 stderr;通过管道接收数据或由 Agent 消费时,stdout 只包含纯 JSON。
Agent 反馈
当你(或 Agent)发现此 CLI 有不妥之处时,请记录下来:
outlook-email-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
outlook-email-pp-cli feedback --stdin < notes.txt
outlook-email-pp-cli feedback list --json --limit 10
条目会保存在本地 ~/.outlook-email-pp-cli/feedback.jsonl。除非设置了 OUTLOOK_EMAIL_FEEDBACK_ENDPOINT,并且传入了 --send 或设置了 OUTLOOK_EMAIL_FEEDBACK_AUTO_SEND=true,否则绝不会发送 POST 请求。默认情况下,反馈仅保存在本地。
请写下让你感到意外的地方,而不是提交 Bug 报告。简短、具体、一行即可:这些记录会不断累积,发挥更大作用。
输出投递
每个命令都接受 --deliver <sink>。输出除了写入 stdout 外,也可以写入指定的接收端(或改为仅写入接收端),这样 Agent 无需手动通过管道传递,也能路由命令结果。支持三种接收端:
| 接收端 | 效果 |
|---|---|
stdout | 默认;仅写入 stdout |
file:<path> | 以原子方式将输出写入 <path>(临时文件 + 重命名) |
webhook:<url> | 将输出正文 POST 到该 URL(使用 --compact 时,内容类型为 application/json 或 application/x-ndjson) |
遇到未知协议时,命令会拒绝执行,并返回结构化错误,指出支持的协议列表。Webhook 请求失败时会返回非零状态码,并在 stderr 中记录 URL 和 HTTP 状态码。
命名配置
配置是保存的一组标志值,可在多次调用中重复使用。如果定时 Agent 每次运行时都会使用相同配置调用同一命令,就可以使用它——这是 HeyGen 的“Beacon”模式。
outlook-email-pp-cli profile save briefing --json
outlook-email-pp-cli --profile briefing attachments list mock-value
outlook-email-pp-cli profile list --json
outlook-email-pp-cli profile show briefing
outlook-email-pp-cli profile delete briefing --yes
显式标志始终优先于配置值;配置值优先于默认值。agent-context 会在 available_profiles 下列出所有可用配置,以便通过自省发现配置的 Agent 在运行时找到它们。
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 成功 |
| 2 | 用法错误(参数错误) |
| 3 | 未找到资源 |
| 4 | 需要身份验证 |
| 5 | API 错误(上游问题) |
| 7 | 已触发速率限制(等待后重试) |
| 10 | 配置错误 |
参数解析
解析 $ARGUMENTS:
- 为空、
help或--help→ 显示outlook-email-pp-cli --help输出 - 以
install开头 → 以mcp结尾 → 安装 MCP;否则 → 参见上方的先决条件 - 其他任何内容 → 直接使用(作为 CLI 命令执行,并附带
--agent)
MCP 服务安装
从此 CLI 发布的公共库条目或预构建版本安装 MCP 二进制文件,然后进行注册:
claude mcp add outlook-email-pp-mcp -- outlook-email-pp-mcp
验证:claude mcp list
直接使用
- 检查是否已安装:
which outlook-email-pp-cli如果未找到,则提供安装选项(参见此技能顶部的先决条件)。 - 将用户查询与上方“独特功能”和“命令参考”中的最佳命令匹配。
- 使用
--agent标志执行:outlook-email-pp-cli <command> [subcommand] [args] --agent - 如果有歧义,则查看子命令帮助:
outlook-email-pp-cli <command> --help。