Outlook OAuth2令牌报错怎么办?invalid_grant、IMAP认证失败与Graph 401排查(2026)

Outlook OAuth2令牌报错怎么办?invalid_grant、IMAP认证失败与Graph 401排查(2026)

a316558560
2026-09-26 / 0 评论 / 0 阅读 / 正在检测是否收录...

直接回答: Outlook / Hotmail 的 OAuth2 令牌邮箱用不了,90% 的问题出在以下四处之一:① 卡密四段拆错(邮箱、密码、client_id、refresh_token 错位或带了空格/换行);② 用 refresh_token 换 access_token 时 client_id、scope 或令牌端点不匹配(常见报错 invalid_grant、AADSTS 开头的错误码);③ IMAP 登录时用错了认证方式或服务器(应使用 XOAUTH2 + outlook.office365.com:993);④ 拿 IMAP 用途的 access_token 去调 Graph(或反过来),导致 401/403。 本文按「先拆卡密 → 再换令牌 → 最后连协议」的顺序逐项排查,适用于本店 Outlook OAuth2|IMAP/GRAPH 双协议 与 Hotmail OAuth2|IMAP/GRAPH 双协议 两款商品,也适用于你自己授权的其他微软个人邮箱。仅讨论正当的收信与自有系统集成场景。

一、先搞清楚:你手里的四段分别是什么

本店两款令牌商品的卡密格式是:

邮箱----密码----client_id----令牌
  • 邮箱:outlook.com 或 hotmail.com 地址,也是 IMAP / XOAUTH2 里的用户名;
  • 密码:邮箱网页登录密码,OAuth2 流程通常用不到,但要保存好;
  • client_id:授权时使用的应用 ID(GUID 格式,形如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),换令牌时必须用同一个 client_id;
  • 令牌:即长效 refresh_token,不是可以直接登录 IMAP 的 access_token。它的作用是去微软令牌端点换取有效期约 1 小时的 access_token。

商品页还写明:默认权限为 IMAP,支持心蓝等软件;如遇 Graph 不适配,请添加参数权限 scope:User.Read Mail.Read offline_access。 这句话是后面排查 Graph 报错的关键。概念不熟的话,先读 Hotmail/Outlook令牌邮箱是什么 和 微软邮箱IMAP和GRAPH怎么选怎么填。

二、排查总顺序(建议照着走,别跳步)

  1. 拆卡密:确认四段完整、无多余空格和换行;
  2. 单独测试换令牌:用 refresh_token 请求一次 access_token,看返回是成功还是错误码;
  3. 换令牌成功后再测协议:IMAP 用 XOAUTH2 登录;Graph 调 /me/messages;
  4. 最后才怀疑软件或账号本身。

绝大多数「令牌失效」其实卡在第 1、2 步。

三、第 1 步:卡密拆分常见错误

现象原因处理
所有请求都报 invalid_request / 参数缺失用 - 单横线或空格拆分,把 client_id 里的横线也拆开了分隔符是四个连续横线 ----,按它拆成 4 段
invalid_grant,但令牌看起来没问题令牌末尾带了换行符 \r\n 或空格对每一段做 trim;Windows 记事本复制尤其注意
client_id 报找不到应用把邮箱密码当成 client_id 填了(段顺序错位)严格按「邮箱、密码、client_id、令牌」顺序
批量导入部分成功部分失败某几行格式不完整或被文本编辑器自动换行逐行校验段数是否都为 4

心蓝等软件的导入格式细节见 心蓝怎么导入Hotmail OAuth2令牌邮箱。

四、第 2 步:refresh_token 换 access_token 报错

微软个人账号(Outlook/Hotmail)常用的令牌端点是:

POST https://login.microsoftonline.com/consumers/oauth2/v2.0/token
(部分工具使用 /common/ 端点,两者对个人账号一般都可用)

grant_type=refresh_token
client_id=<卡密第3段>
refresh_token=<卡密第4段>
scope=<见下文>

scope 怎么填:

  • 走 IMAP:https://outlook.office.com/IMAP.AccessAsUser.All offline_access
  • 走 Graph:https://graph.microsoft.com/Mail.Read offline_access,或商品页提示的 User.Read Mail.Read offline_access(Graph 的简写形式)

常见返回错误与含义:

错误常见含义处理思路
invalid_grant + AADSTS70000refresh_token 无效、已被撤销,或与 client_id 不匹配核对 client_id 是否为同一行卡密;确认令牌没被截断
invalid_grant + AADSTS70008refresh_token 因长期未使用而过期属于令牌已失效,需重新授权;保持定期刷新可避免
AADSTS700016找不到该 client_id 对应的应用client_id 填错或段位错位
AADSTS70011 / invalid_scopescope 格式错误或该应用不支持该权限检查拼写与空格分隔;IMAP 与 Graph 不要混写
AADSTS50076 / 50079 等需要额外验证(MFA)或账号安全策略变化令牌流程无法绕过,需在网页端正常登录处理
AADSTS50034 / 账号不存在邮箱已被删除或输入错误核对邮箱地址
网络超时 / SSL 错误本地网络或代理问题先排除网络,再判断令牌

两个非常容易忽略的点:

  1. 令牌轮换:换令牌成功时,响应里通常会带一个新的 refresh_token。正确做法是保存新值、下次用新值。一直用旧值,在某些情况下会逐渐失效。
  2. 密码修改会让令牌失效:如果你登录网页改了邮箱密码或触发了安全验证,原 refresh_token 很可能被撤销。确实需要改密时,要做好重新授权的准备。

一个最小化的自检示例(Python,仅用于测试你自己的令牌是否有效,不要把令牌写进公开代码仓库):

import requests
r = requests.post(
    "https://login.microsoftonline.com/consumers/oauth2/v2.0/token",
    data={
        "grant_type": "refresh_token",
        "client_id": CLIENT_ID,
        "refresh_token": REFRESH_TOKEN,
        "scope": "https://outlook.office.com/IMAP.AccessAsUser.All offline_access",
    },
    timeout=30,
)
print(r.status_code, r.json().get("error"), r.json().get("error_description", "")[:200])

返回 200 且包含 access_token 即说明令牌本身正常,问题在后续协议环节。

五、第 3 步:IMAP 报 AUTHENTICATE failed

换令牌成功但 IMAP 仍然登录失败,按下表检查:

检查项正确值
服务器outlook.office365.com
端口 / 加密993 / SSL/TLS
认证方式XOAUTH2(不是普通 LOGIN 密码登录)
用户名卡密第 1 段邮箱地址
令牌刚换到的 access_token(不是 refresh_token)
令牌 scope必须是 outlook.office.com/IMAP.AccessAsUser.All

XOAUTH2 认证串的格式是:user=邮箱\x01auth=Bearer access_token\x01\x01,再做 Base64。常见失败原因:

  • 把 refresh_token 直接当密码/令牌塞给 IMAP —— 最常见;
  • 拿 Graph scope 换来的 access_token 登录 IMAP —— 受众(audience)不同,必然失败;
  • access_token 过期:有效期约 1 小时,长时间运行的程序要在过期前重新刷新;
  • 用了普通密码登录:微软个人邮箱已逐步停止基本认证,密码直连 IMAP 基本不可用,这也是令牌邮箱存在的原因。

六、第 4 步:Graph 返回 401 / 403

商品默认权限是 IMAP。如果你要用 Graph API 读取邮件:

  1. 换令牌时 scope 改为 Graph 权限(商品页提示:User.Read Mail.Read offline_access);
  2. 请求 GET https://graph.microsoft.com/v1.0/me/messages?$top=5,请求头带 Authorization: Bearer <Graph access_token>。
状态码 / 错误常见原因处理
401 InvalidAuthenticationToken用 IMAP scope 换来的 access_token 调 Graph(受众是 outlook.office.com,不是 graph.microsoft.com)用 Graph scope 重新换一次 access_token
401 令牌过期access_token 超过约 1 小时用 refresh_token 重新刷新
403 ErrorAccessDenied / Authorization_RequestDeniedscope 里缺少 Mail.Read 等权限按商品页提示补全 User.Read Mail.Read offline_access 后重新换令牌
换令牌时 invalid_scope该 client_id 未被授予 Graph 权限此时只能继续走 IMAP;Graph 不是所有令牌都保证可用,以商品页说明为准

记住一条规则:一个 access_token 只对一个资源有效。 IMAP 和 Graph 要分别用各自的 scope 换各自的 access_token,refresh_token 可以是同一个。两种协议怎么选,详见 archives/70。

七、Outlook 和 Hotmail 的令牌排查有区别吗?

基本没有。两者都是微软个人账号,令牌端点、scope、IMAP 服务器(outlook.office365.com)完全一致,区别只在邮箱域名。唯一要注意的是:如果业务方或脚本限定了域名,买错域是改不了的,区别说明见 Hotmail令牌号和Outlook令牌号有什么区别。

写作时(2026-09-26 21:40 北京时间)两款商品参考信息如下,价格与库存以商品页实时显示为准:

商品参考价写作时库存说明
Outlook微软邮箱-令牌长效/已授权oauth2/IMAP/GRAPH双协议¥0.10有货(约 50 余枚)outlook.com 域,自动发货
hotmail微软邮箱-令牌长效/已授权oauth2/IMAP/GRAPH双协议¥0.10有货(约 60 余枚)hotmail.com 域,自动发货

购买流程与选域决策见 Hotmail OAuth2怎么买?Outlook令牌与心蓝导入选购;付款后取卡见 自动发卡购买后卡密在哪里看。

八、预防令牌失效的日常习惯

  1. 到手即测:收到卡密后立刻用第四节的方法测一次换令牌,并用 IMAP 列一次收件箱,有问题趁早按商品页规则反馈;
  2. 保存轮换后的新 refresh_token,不要永远用发货时的旧值;
  3. 定期刷新:长期不用的令牌可能因不活跃过期(AADSTS70008),建议定期(例如每几周)刷新一次;
  4. 不要随意网页登录改密或改安全信息,这类操作可能撤销现有令牌;
  5. 令牌等同密码:不写入公开仓库、不发群聊、不贴在工单截图里;
  6. 先单枚验证再批量:确认协议和软件适配后再批量加购。

九、常见问题(FAQ)

Q1:refresh_token 能直接登录 IMAP 吗?
不能。refresh_token 只能用来换 access_token,IMAP 的 XOAUTH2 里填的必须是 access_token。

Q2:换令牌成功,心蓝里却显示失败?
先确认软件版本支持 OAuth2 / XOAUTH2,导入格式与段顺序正确,再看软件是否需要选择 IMAP 或 Graph 模式。步骤见 archives/105。

Q3:用 /common/ 端点和 /consumers/ 端点有区别吗?
对 Outlook/Hotmail 个人账号来说一般都能用;如果一个报错,可以换另一个对比测试,但错误码通常才是关键。

Q4:出现 AADSTS70008 还能救吗?
这表示 refresh_token 因不活跃已经过期,用这个令牌无法再换取 access_token,需要重新授权。因此到手后要及时使用、定期刷新。

Q5:密码那一段有什么用?
OAuth2 流程通常用不到密码,但它是邮箱的网页登录凭据,建议加密保存备用;不要随意用它登录网页改设置,以免令牌被撤销。

Q6:可以用这些令牌邮箱做批量发信吗?
本文只讨论正当的收信、通知接收与自有系统集成。请遵守微软服务条款与当地法律,不要用于垃圾邮件、未授权访问他人邮箱等用途。

十、一页速查

卡在哪一步先看什么
拆卡密---- 分隔、四段、无空格换行
换令牌client_id 同行、scope 对应协议、看 AADSTS 错误码
IMAPoutlook.office365.com:993、XOAUTH2、填 access_token
GraphGraph scope 重新换令牌、补 Mail.Read
概念入门archives/63
新手总清单第一次买成品账号要准备什么?避坑清单
0

评论 (0)

取消