mcpField
P
pp-outlook-email

pp-outlook-email

github.com/mvanhorn生产力2.1k92 次安装今天更新
代码仓库

关于 pp-outlook-email

pp-outlook-email 是供 Agent 处理 Microsoft 365 邮箱的 CLI 技能。本地存储支持跨文件夹收件箱整理、跟进检测和摘要,并可执行邮件操作及访问 Microsoft Graph。

主要功能

  1. 01查找等待回复的已发送邮件
  2. 02按发件人汇总收件箱活动
  3. 03筛出未读、已标记和待处理邮件
  4. 04生成邮箱活动摘要
  5. 05管理、移动和发送邮件

适用场景

  1. 01查看上次会话后收到的邮件
  2. 02查找待跟进和等待处理的对话
  3. 03规划对高频发件人的批量归档
  4. 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 已安装。**如果尚未安装,请先安装:

  1. 通过 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到 $HOME/.local/bin;在 Windows 上,默认安装到 %LOCALAPPDATA%\Programs\PrintingPress\bin:
    npx -y @mvanhorn/printing-press-library install outlook-email --cli-only
    
  2. 验证:outlook-email-pp-cli --version
  3. 确保报告的安装目录位于将调用此技能的 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需要身份验证
5API 错误(上游问题)
7已触发速率限制(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

  1. 为空、help 或 --help → 显示 outlook-email-pp-cli --help 输出
  2. 以 install 开头 → 以 mcp 结尾 → 安装 MCP;否则 → 参见上方的先决条件
  3. 其他任何内容 → 直接使用(作为 CLI 命令执行,并附带 --agent)

MCP 服务安装

从此 CLI 发布的公共库条目或预构建版本安装 MCP 二进制文件,然后进行注册:

claude mcp add outlook-email-pp-mcp -- outlook-email-pp-mcp

验证:claude mcp list

直接使用

  1. 检查是否已安装:which outlook-email-pp-cli 如果未找到,则提供安装选项(参见此技能顶部的先决条件)。
  2. 将用户查询与上方“独特功能”和“命令参考”中的最佳命令匹配。
  3. 使用 --agent 标志执行:
    outlook-email-pp-cli <command> [subcommand] [args] --agent
    
  4. 如果有歧义,则查看子命令帮助:outlook-email-pp-cli <command> --help。

评论

支持 Markdown