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