用 OpenClaw 自动分类 Outlook 邮件:从零搭建 AI 邮件管家

AI摘要

介绍利用OpenClaw与Microsoft Graph API搭建的自动邮件分类方案,以解决收件箱邮件混杂、管理繁琐的问题。方案通过Azure AD应用注册获取API权限,使用OAuth授权获取访问令牌,并编写脚本依据发件人域名匹配规则自动将未读邮件归类至对应文件夹,再通过定时任务执行分类并推送通知,从而实现邮件的高效自动化整理。

你的 Outlook 收件箱是不是也像一个无底洞?每天几十封邮件,有用的和没用的混在一起,翻半天找不到想要的那封。今天分享一个用 OpenClaw + Microsoft Graph API 搭建的自动邮件分类方案,让 AI 帮你把收件箱整理得井井有条。

为什么需要自动邮件分类?

先看看这些场景你是不是很熟悉:

📧 典型痛点

  • Apple 的账单、Google 的安全提醒、Microsoft 的订阅通知混在一起
  • 重要邮件(安全告警、密码重置)淹没在一堆促销邮件里
  • 想按公司/项目分类,但手动拖文件夹太累
  • 出差几天回来,收件箱几百封未读

理想状态是:邮件一进来就自动归类到对应文件夹,紧急邮件单独标记,你只需要看分类后的结果。

方案架构

整个方案由三部分组成:

1. Microsoft Graph API — 读取和操作 Outlook 邮件的接口
2. 分类脚本 — 按规则匹配发件人域名,决定邮件归类
3. OpenClaw 定时任务 — 每隔几小时自动执行,结果推送到飞书

整体流程:定时触发 → 调用 Graph API 拉取未读邮件 → 按规则匹配分类 → 移动到对应文件夹 → 推送通知。

第一步:Azure AD 应用注册

要访问 Outlook 邮件,需要在 Azure 门户注册一个应用。

1.1 创建应用

打开 Azure 门户 → Azure Active Directory → 应用注册 → 新注册。

⚠️ 关键点:账户类型一定要选「任何组织目录中的帐户和个人 Microsoft 帐户」。如果选了「仅我的组织」,个人 Outlook 账号就无法使用。

1.2 配置 API 权限

在应用的「API 权限」页面,添加以下 委托权限(不是应用程序权限):

  • Mail.Read — 读取邮件
  • Mail.ReadWrite — 读取和移动邮件(分类必须)

添加后记得点击「授予管理员同意」。

1.3 创建客户端密码

在「证书和密码」页面创建一个新的客户端密码。记下 client_idclient_secrettenant_id,后面脚本会用到。

⚠️ 安全提醒:这些凭据不要硬编码在脚本里,用环境变量或配置文件管理。

第二步:OAuth 授权获取 Token

Graph API 使用 OAuth 2.0 授权码流程。第一次需要手动授权,之后用 Refresh Token 自动续期。

授权流程

Step 1:在浏览器打开授权 URL(替换你的 client_id)

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=http://localhost:3000&scope=Mail.Read Mail.ReadWrite&response_mode=query

Step 2:登录 Outlook 账号并同意授权,浏览器会跳转到 localhost:3000?code=xxx,复制这个 code。

Step 3:用 code 换取 Access Token 和 Refresh Token

curl -X POST https://login.microsoftonline.com/common/oauth2/v2.0/token \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "code=AUTH_CODE" \
  -d "redirect_uri=http://localhost:3000" \
  -d "grant_type=authorization_code"

返回的 JSON 里有 access_token(有效期约 1 小时)和 refresh_token(有效期 90 天以上)。

💡 提示:Refresh Token 长期不活跃(约 90 天无使用)会过期,需要重新授权。定时任务保持活跃即可避免。

第三步:编写分类脚本

核心逻辑:拉取未读邮件 → 解析发件人域名 → 匹配分类规则 → 移动到目标文件夹。

3.1 分类规则设计

按发件人邮箱域名匹配公司名称:

const classificationRules = [
  { pattern: /apple\.com|icloud\.com/i, folder: "Apple" },
  { pattern: /google\.com|gmail\.com/i, folder: "Google" },
  { pattern: /microsoft\.com|outlook\.com/i, folder: "Microsoft" },
  { pattern: /nvidia\.com/i, folder: "NVIDIA" },
  { pattern: /synology\.com/i, folder: "Synology" },
  { pattern: /paypal\.com/i, folder: "PayPal" },
  // 继续添加更多规则...
];

3.2 紧急邮件识别

除了按公司分类,还需要识别紧急邮件。检查邮件主题是否包含关键词:

const urgentKeywords = /security|密码|password|urgent|重要|verification/i;

if (urgentKeywords.test(subject)) {
  targetFolder = "Inbox-紧急";
}

3.3 移动邮件

用 Graph API 的 move 端点把邮件移动到目标文件夹:

// 移动邮件
await fetch(
  `https://graph.microsoft.com/v1.0/me/messages/${messageId}/move`,
  {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${accessToken}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ destinationId: folderId }),
  }
);

3.4 自动创建文件夹

如果目标文件夹不存在,先创建:

async function ensureFolder(accessToken, folderName) {
  // 先查询是否已存在
  const res = await fetch(
    `https://graph.microsoft.com/v1.0/me/mailFolders?$filter=displayName eq '${folderName}'`,
    { headers: { "Authorization": `Bearer ${accessToken}` } }
  );
  const data = await res.json();
  if (data.value.length > 0) return data.value[0].id;

  // 不存在则创建
  const createRes = await fetch(
    "https://graph.microsoft.com/v1.0/me/mailFolders",
    {
      method: "POST",
      headers: {
        "Authorization": `Bearer ${accessToken}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ displayName: folderName }),
    }
  );
  return (await createRes.json()).id;
}

第四步:配置定时任务

用 OpenClaw 的 cron 功能定时执行分类脚本。建议每 4 小时检查一次。

每次执行完成后,把分类结果(处理了多少封、各文件夹分布)推送到飞书,方便随时了解邮件状态。

Token 自动刷新

脚本每次执行前检查 Access Token 是否过期,如果过期则用 Refresh Token 换取新的:

async function refreshToken(refreshToken) {
  const res = await fetch(
    "https://login.microsoftonline.com/common/oauth2/v2.0/token",
    {
      method: "POST",
      headers: { "Content-Type": "application/x-www-form-urlencoded" },
      body: new URLSearchParams({
        client_id: process.env.AZURE_CLIENT_ID,
        client_secret: process.env.AZURE_CLIENT_SECRET,
        refresh_token: refreshToken,
        grant_type: "refresh_token",
      }),
    }
  );
  return res.json();
}

实际效果

部署后的效果数据:

  • 一次性整理了 500+ 封历史邮件
  • 自动创建了 40+ 个按公司分类的文件夹
  • 收件箱瞬间清空,只剩下「其他」类的几封
  • 紧急邮件(安全告警、密码相关)单独归类,不会错过

✅ 最爽的体验:早上打开邮箱,发现新邮件已经被分类好了,不用自己动手。

常见问题

Q1: 应用注册后个人账号无法访问?

检查 Azure AD 应用的「支持的账户类型」。必须选择「任何组织目录中的帐户和个人 Microsoft 帐户」,选「仅我的组织」会导致个人账号被拒。

Q2: API 返回 403 错误?

确认使用的是 委托权限(Delegated),不是应用程序权限(Application)。个人 Outlook 账号需要委托权限。

Q3: Refresh Token 会过期吗?

有效期通常 90 天以上,但如果长期不活跃(无 API 调用)会被吊销。定时任务保持每 4 小时运行一次,就不会过期。

Q4: 如何添加新的分类规则?

在分类规则数组里加一条正则匹配即可。比如要新增 Amazon 的分类:

{ pattern: /amazon\.com/i, folder: "Amazon" }

总结

通过 Microsoft Graph API + OpenClaw 的组合,可以实现:

  • ✅ 自动读取和分类 Outlook 邮件
  • ✅ 按发件人公司智能归类到文件夹
  • ✅ 紧急邮件单独标记不遗漏
  • ✅ 定时执行,无需人工干预
  • ✅ 执行结果推送到飞书通知

整个方案不需要额外付费,只需要一个 Azure AD 免费账号和 OpenClaw 即可。如果你也被 Outlook 邮件管理困扰,不妨试试这个方案。

📎 延伸阅读Microsoft Graph Mail API 官方文档

Saiita

我还没有学会写个人说明!

相关推荐

OpenClaw v2026.4.5 发布:内置视频/音乐生成工具、多语言控制面板与 ComfyUI 集成

OpenClaw v2026.4.5是一次重大更新,核心是新增内置视频与音乐生成工具,并集成ComfyUI工作流。控制面板新增12种多语言支持,同时引入了多个新AI提供商与模型。更新包含破坏性变更,移除了旧配置别名,建议升级后运行`openclaw doctor --fix`进行迁移。此外,本次更新还带来了大量稳定性修复、性能优化及移动端功能改进。

OpenClaw v2026.3.31 发布:后台任务系统重构、QQ Bot 通道与全面安全增强

OpenClaw v2026.3.31版本是一次包含破坏性变更的重大更新。核心内容包括后台任务系统重构为统一控制面板、新增QQ Bot通道支持,并全面增强Matrix生态。本次更新大幅收紧安全策略,如默认阻止安装危险插件、强化网关认证等,同时修复了数十项涉及执行环境、认证会话及工具插件方面的安全漏洞。

OpenClaw 配置 GLM-5.1:智谱最新大模型接入教程

智谱AI推出编程能力显著提升的旗舰模型GLM-5.1,支持204800上下文窗口和131072输出Token。文章详细介绍了如何在OpenClaw中通过编辑配置文件手动添加并切换至GLM-5.1模型,包括修改模型定义、设置默认模型及重启网关等步骤。该模型也已支持在Claude Code等主流Coding Agent中使用。

OpenClaw 2026.3.28 发布:xAI 集成增强与插件系统升级

OpenClaw 2026.3.28版本发布,核心更新包括:增强xAI/Grok集成并内置搜索工具;新增MiniMax图像生成支持;引入插件审批机制提升安全性;为Discord等平台添加会话绑定功能。同时修复了Anthropic代理崩溃、WhatsApp回声循环等多个关键稳定性问题,是一次重要的功能与稳定性升级。

暂无评论