前言¶
让 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