Outlook Skill:用 Microsoft Graph 在 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

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

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

小夜