Outlook Skill: Reading and Writing Emails and Calendars with Microsoft Graph in Agent

前言

让 agent 帮忙处理邮件和日历,常见两条路:自己写 IMAP/SMTP 客户端,或者接一个 MCP server。前者要处理各家邮箱的认证细节,后者多了一层服务要维护。下面介绍的 Outlook Skill 走第三条路:它把 Microsoft Graph API 的常用操作封装成一组 shell 脚本,配一个通用 SKILL.md 描述,agent 通过命令行调用,认证用标准 OAuth2。

这个 skill 适合已经在用 OpenClaw 生态、想给 agent 加上 Outlook 能力的人。如果你的场景只需要读邮件,它偏重;如果需要读写日历,v1.3.0 之后才完整支持。

这是什么

一句话定位:通过 Microsoft Graph API 读写 Outlook/Hotmail 邮件和日历的 Agent Skill,基于 SKILL.md 通用格式,能力以 scripts/ 下的 bash 脚本提供。

来源归属:SKILL.md 的 author 字段是 jotamed;该 skill 收录在 sundial-org/awesome-openclaw-skills 仓库(OpenClaw 生态精选合集,共 913 个 skill),SkillHub 上由发布者 RealQ 上架,来源标记为 enterprise,分类 office-efficiency。

版本有个不一致要说明:SkillHub 页面元数据写 1.0.0,SKILL.md frontmatter 写 1.3.0。功能描述以 SKILL.md 为准。

解决什么问题:用户问”最近有什么邮件”“明天有什么安排”“帮我回这封邮件”这类问题时,agent 需要能真实访问用户的 Outlook 邮箱和日历。这个 skill 把 Graph API 的授权、token 刷新、邮件和日历的 CRUD 都脚本化,agent 不需要自己拼 OAuth 流程。

核心功能

只列 SKILL.md 里明确写到的能力。

邮件:

1、读取:收件箱列表、未读列表、按关键词搜索、按发件人过滤、读正文、列附件。
2、管理:标记已读/未读、标记重要、取消标记、删除(移入回收站)、归档、移动到文件夹。
3、发送:发新邮件、回复已有邮件。
4、其他:列出文件夹、收件箱统计(总数、未读数)。

日历:

1、查看:即将到来的事件、今天、本周、事件详情、所有日历列表、查询某时间段是否空闲。
2、创建:带标题/起止时间/地点的普通事件,以及快速创建 1 小时事件。
3、管理:更新事件字段(标题、地点、起止时间)、删除事件。

Token 管理:

1、refresh:刷新过期 token(访问 token约 1 小时过期)。
2、test:测试连接。
3、get:打印当前访问 token。

安装与启用

这个 skill 收录在 awesome-openclaw-skills 仓库里,按该仓库 README 的安装方式:

npx sundial-hub add outlook

安装名取自仓库 skills/outlook 目录,与 README 表格里其他 skill 的命名规则一致。

装好后没有现成的配置文件可用,必须做一次 OAuth 授权。skill 提供自动脚本,前置依赖是 Azure CLI 和 jq:

./scripts/outlook-setup.sh

自动脚本会依次完成:用设备码流程登录 Azure、自动创建 App Registration、配置 API 权限、引导你授权、把凭证存到 ~/.outlook-mcp/。

如果自动脚本失败,参照 references/setup.md 手动走 Azure Portal:创建 App Registration(重定向 URI 填 http://localhost)、记下 Client ID 和 Client Secret、在 API Permissions 里加 Mail.ReadWrite、Mail.Send、Calendars.ReadWrite、User.Read,然后浏览器授权拿 code,用 curl 换 token。

配置字段落在两个文件:

~/.outlook-mcp/config.json      # client_id、client_secret
~/.outlook-mcp/credentials.json # access_token、refresh_token

两个文件都建议 chmod 600 收好。SkillHub 页面给这个 skill 打了 requires_api_key=true 标签,对应的就是这套 OAuth 凭证,不是一行环境变量的事。

授权涉及的权限范围:

Mail.ReadWrite        # 读写邮件
Mail.Send             # 发送邮件
Calendars.ReadWrite   # 读写日历
offline_access        # 刷新 token,保持登录
User.Read             # 基本用户信息

典型用法

以下命令都来自 SKILL.md,路径以 scripts/ 为当前目录。

读收件箱最近 3 封:

./scripts/outlook-mail.sh inbox 3

输出是 JSON 数组,每封邮件带 n(序号)、subject、from、date、read、id。

读某封邮件正文:

./scripts/outlook-mail.sh read "icYY6QAIUE26PgAAAA=="

返回 subject、from、to、date、body,HTML 正文会自动转纯文本。

看收件箱统计:

./scripts/outlook-mail.sh stats

返回形如 {"folder": "Inbox", "total": 14098, "unread": 2955}。

发一封邮件:

./scripts/outlook-mail.sh send someone@example.com "标题" "正文"

查今天的日程:

./scripts/outlook-calendar.sh today

创建事件,时间格式是 YYYY-MM-DDTHH:MM:

./scripts/outlook-calendar.sh create "和客户吃饭" "2026-01-26T13:00" "2026-01-26T14:00" "餐厅"

token 过期报认证错误时:

./scripts/outlook-token.sh refresh

适用场景与注意

适合:

1、个人微软账户(outlook.com、hotmail.com、live.com)开箱可用。
2、公司 Microsoft 365 账户也能用,但组织可能要求管理员同意,先找 IT 确认。
3、想让 agent 在日常对话里顺手查邮件、排日程,而不是单独起一个邮件客户端进程。

注意:

1、这不是填个 API key 就能用的东西。必须有一个 Azure App Registration,把 client_id / client_secret 写进 config.json,Secret 只在创建时显示一次,丢了要重建。
2、访问 token约 1 小时过期,长任务里遇到认证错误就先跑 outlook-token.sh refresh。
3、邮件 id 字段是完整 Message ID 的最后 20 个字符。read、mark-read 这类命令只在最近 100 封邮件里找这个 ID,更早的邮件先用 search 定位。
4、日历 update 一次只改一个字段,格式是 update <id> <field> <value>。
5、凭证文件里有长期有效的 refresh token,注意别进版本库、别给无关用户读权限。

结尾

这个 skill 的价值在于把 Graph API 的 OAuth 授权和邮件、日历的常用操作压成了一组命令行脚本,agent 侧不需要自己实现 Graph 调用。功能覆盖邮件的读、搜、改、发和日历的增删改查,v1.3.0 加入日历支持后才算完整。代价是首次配置要动 Azure Portal,不是开箱即用。

官方地址:https://api.skillhub.cn/org-eyw2ohcx/sundial-org-awesome-openclaw-skills-outlook

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye