邮件自动化:双邮箱接入与AI分诊系统
邮件是最古老的互联网通信方式之一,但在AI Agent时代,它依然是不可替代的信息入口。这篇记录我如何实现双邮箱自动读取和智能分诊。
双邮箱架构
我需要管理两个邮箱:
- linou518@hotmail.com — 通过Microsoft Graph API接入
- user@example.com — 通过Gmail API接入
还有一个 techsfree.com 的Google Workspace账号,但因为OAuth受限(Workspace管理员策略),暂时没法自动化,手动处理。
两套API,两种认证方式,两个完全不同的生态。这就是现实。
MS Graph API:个人账户的坑
微软的文档写得很"企业",大量示例都假设你是Azure AD租户。但我用的是个人Microsoft账户(hotmail.com),这里有个关键区别:
个人账户必须用 /consumers/ endpoint,不能用 /common/ 或 /organizations/。
# 错误 ❌
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
正确 ✅
https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize
这个坑浪费了我大半天。错误信息是模糊的"invalid_grant",搜索结果指向各种不相关的解决方案。最后是在Stack Overflow一个不起眼的回答里找到答案。
Device Code Flow:无浏览器环境的救星
我的Agent跑在无头服务器上,没有浏览器。传统的OAuth流程需要弹出浏览器窗口让用户授权,这在服务器上行不通。
Device Code Flow完美解决了这个问题:
1. 程序向微软请求一个device code
2. 微软返回一个URL和一串代码
3. 用户在任何设备的浏览器上打开URL,输入代码
4. 授权完成,程序拿到access token
这个流程对AI Agent特别友好——Agent可以把URL和代码发给我(通过Telegram),我在手机上完成授权,Agent就能开始读邮件了。
Gmail Reader
Gmail这边相对顺利,Google的API文档和Python SDK都更成熟。实现了四个核心功能:
最后一个功能是我最喜欢的。收到验证码邮件后,Agent可以自动提取6位数字,直接填入需要验证的地方。再也不用手动切换到邮箱复制验证码了。
邮件分诊系统:4级自动分类
邮件读取只是第一步,真正有价值的是自动分类。我设计了一个4级分诊系统:
P0 - 紧急:需要立即处理的邮件
P1 - 重要:当天需要处理
P2 - 普通:有空再看
P3 - 低优先级:自动归档
分类逻辑目前是基于规则的(发件人白名单 + 关键词匹配 + 邮件头分析)。后续计划接入LLM做更智能的分类,但规则引擎的好处是快、稳定、可预测。
Token管理的教训
OAuth Token有有效期。Access Token通常1小时过期,Refresh Token的有效期更长但也不是永久的。
最初我把Token存在Agent的session上下文里,结果Agent重启后Token就丢了,又要重新走一遍Device Code Flow。后来改成持久化到文件:
# Token存储路径
~/.config/email-agent/ms_token.json
~/.config/email-agent/gmail_token.json
加上自动刷新逻辑——每次API调用前检查Token是否即将过期,提前刷新。这样除非Refresh Token本身过期(微软是90天不活跃才失效),基本不需要人工干预。
运行效果
现在每天早上,邮件Agent会自动:
1. 检查两个邮箱的未读邮件
2. 运行分诊分类
3. P0邮件即时通知
4. P1邮件生成日报摘要
5. P2/P3静默处理
从两个邮箱每天大约50-80封邮件中,真正需要我关注的通常只有3-5封。节省的不只是时间,更是注意力。
感悟
邮件自动化看似简单,实际涉及OAuth认证、API限制、Token管理、分类逻辑等一系列问题。每个单独看都不难,但组合在一起就需要耐心。
最大的体会是:认证是最消耗时间的部分。实际的邮件读取和分类逻辑,反而是最简单的。如果微软和Google的OAuth文档能写得更清楚一点,能省下多少开发者的时间啊。
*搭建日期:2026年2月
接入邮箱:Hotmail (MS Graph) + Gmail (Gmail API)
状态:生产运行中,每日自动分诊*