前言
今年8月份,微软邮箱突然不能用imap收信了。反应到Zennoposter就是红字提示错误,我还试过专属应用密码等一系列方式,发现都登不上。
当时我网店的存货为了检测写过一个python程序用imap检测邮箱可用性,那天开始突然所有邮箱都不可用了。检查发现只有pop3协议还能收,谁知没收几天突然pop3也不行了。
微软邮箱可谓是做项目神器,价格低廉,用的人多。比起高贵的gmail,微软价格便宜,登录方便,极少风控(风控随便输手机号就能解)。比起更便宜的mail.ru/ramble/proton等,微软用户多,尤其是一线国家用户多,项目很少针对微软邮箱风控。
当时我觉得很可惜,准备用其他曲线救国的方法,解析一下网页版的数据。实际脚本写出来才发现,就登录那一步至少十几种不同的逻辑随机出现,到可以取邮件那里前摇时间过长,而且非常浪费流量。
oauth2
一番搜索后发现原来是微软改了登录认证协议,不能再使用账号密码,需要使用oauth2协议登录。
oauth2的登录协议我也搞不清楚具体是怎么回事,流程差不多是先要账号密码登录拿refresh token,再用授权码拿access token,然后这个access token就可以用来收信了。
具体细节在这里:使用 OAuth 对 IMAP、POP 或 SMTP 连接进行身份验证 | Microsoft Learn
然而登录这一步,就必须要输入备用邮箱,否则7天后会锁定,而且就算拿到token,还要定时刷新,否则就要重新登录。
实现方法
具体实现方法如下:
-
Azure注册一个APP,申请mail.read权限
-
获取授权URL
-
手动登录,授权
-
取得授权码,生成refresh token,有效期90天
-
用refresh token生成access token,有效期1小时
-
使用access token登录IMAP
对于Zennoposter来说,还有个坏消息。oauth2登录imap时要求在请求头带上token,现阶段ZP完全做不到这一点,按照ZP开发团队的尿性未来大概率也不会有。
所以为了方便自己使用我开发了一套程序,ZP的脚本用于完成订阅和授权,python用于取信并返回JSON格式。
实测效果还不错。但是因为登录过程中会添加辅助邮箱,不是每个人都能接受,我就不更到网店里了。有需求可以私下联系。