Office 365 OAuth:使用client_credentials通过IMAP访问邮箱失败排查
Scope配置错误:你使用的
https://outlook.office365.com/.default是应用权限(客户端凭据流)专属的scope,而IMAP.AccessAsUser.All是委托权限,个人邮箱不支持应用权限模式。正确的scope应使用委托权限格式,比如https://outlook.office.com/IMAP.AccessAsUser.All offline_access(v2.0端点支持简化为IMAP.AccessAsUser.All offline_access)。端点混淆:你的变量
oAuthAuthorizationURL赋值的是令牌端点(/token),如果走授权码流程,授权端点应为https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize,令牌端点仅用于用授权码交换access token,需严格区分两个端点的用途。令牌获取流程错误:个人Microsoft账户邮箱不支持无用户交互的客户端凭据流,必须采用授权码流程(需要用户登录授权你的应用)。若直接用客户端ID/密钥获取令牌,该令牌缺少用户上下文,无法通过IMAP认证。
Jakarta Mail关键配置缺失:需确保添加以下IMAP属性,强制使用XOAUTH2认证:
props.put("mail.imap.auth.mechanisms", "XOAUTH2"); props.put("mail.imap.sasl.enable", "true"); props.put("mail.imap.sasl.mechanisms", "XOAUTH2"); props.put("mail.imap.auth.login.disable", "true"); props.put("mail.imap.auth.plain.disable", "true");冗余权限无需配置:POP.AccessAsUser.All、Mail.ReadWrite等权限对IMAP访问无必要,保留IMAP.AccessAsUser.All、offline_access、openid、User.Read即可。
内容的提问来源于stack exchange,提问作者Andy Brunner

