当前位置: 首页 > 知识库问答 >
问题:

用于IMAP身份验证的JavaMail连接到Office 365 XOAUTH2失败

东方嘉佑
2023-03-14

Office 365 online和OAuth2面临连接问题。0我已设置应用程序权限以及IMAP和SMTP连接。基本身份验证似乎可以正常工作。我相信IMAP已启用。我的应用程序被配置为任何组织目录(任何Azure AD目录-Multitenant)中的帐户,并使用授权类型的授权代码。

以及授权的Microsoft Graph范围https://graph.microsoft.com/IMAP.AccessAsUser.All已添加:已添加客户端范围

请求的身份验证代码https://login.microsoftonline.com/{tenantID}/oauth2/v2。0/授权?响应类型=代码

请求访问令牌映像

已成功接收作用域为IMAP的访问令牌。AccessAsUser。全部是SMTP。邮寄

{
    "token_type": "Bearer",
    "scope": "IMAP.AccessAsUser.All SMTP.Send",
    "expires_in": 3599,
    "ext_expires_in": 3599,
    "access_token": "access_token",
    "refresh_token": "refresh_token",
    "id_token": "id_token"
} 

下面是Java代码(使用JavaMail jar 1.6.2)

Properties properties= new Properties();
properties.put("mail.imap.ssl.enable", "true");
properties.put("mail.imap.auth.mechanisms", "XOAUTH2");
//properties.put("mail.imap.sasl.enable", "true"); un-commented still results are same
properties.put("mail.imap.auth.login.disable", "true");
properties.put("mail.imap.auth.plain.disable", "true");
properties.put("mail.debug", "true");
properties.put("mail.debug.auth", "true");

Session session = Session.getInstance(props);
session.setDebug(true);

String userEmail = "emailuser@domain.onmicrosoft.com";
String accessToken = "accessToken";

final Store store = session.getStore("imap");
store.connect("outlook.office365.com","993",userEmail, accessToken);

以下输出:

DEBUG: JavaMail version 1.6.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle]
DEBUG IMAP: mail.imap.appendbuffersize: -1
DEBUG IMAP: mail.imap.minidletime: 10
DEBUG IMAP: closeFoldersOnStoreFailure
DEBUG IMAP: trying to connect to host "outlook.office365.com", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready. [TQBB]
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE 
NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAP: AUTH: PLAIN
DEBUG IMAP: AUTH: XOAUTH2
DEBUG IMAP: protocolConnect login, host=outlook.office365.com, user=emailuser@domain.onmicrosoft.com, 
password=<non-null>
A1 AUTHENTICATE XOAUTH2 dXNlAQE=
A1 NO AUTHENTICATE failed.
Could not connect to the message store
javax.mail.AuthenticationFailedException: AUTHENTICATE failed.
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:731)
at javax.mail.Service.connect(Service.java:366)
at myproject.EmailReceiver.downloadEmails(EmailReceiver.java:79)
at myproject.EmailReceiver.main(EmailReceiver.java:179)

其他帖子无法在Azure中找到范围https://outlook.office365.com/IMAP.AccessAsUser.Allhttps://outlook.office365.com/SMTP.Send。可能它们是遗留作用域。

“那么,还有其他范围吗?”https://graph.microsoft.com/IMAP.AccessAsUser.All“和”https://graph.microsoft.com/SMTP.send“需要通过IMAP连接到Exchange online。或现有代码存在任何问题。”。

问题已解决我的使用范围offline_accesshttps://outlook.office365.com/IMAP.AccessAsUser.Allhttps://outlook.office365.com/SMTP.Send它提供访问邮件的权限,还提供刷新令牌来重新生成访问令牌。

注意:将范围更改为脱机访问https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send解决了这个问题。

共有1个答案

李锦
2023-03-14

我认为你的问题与访问令牌作用域有关。我正在开发一个类似的应用程序,但我正在使用示波器https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send获取访问令牌,如果我尝试使用SMTP,它似乎不起作用。发送和IMAP。辅助系统

我的访问令牌如下所示:{“token_type”:“Bearer”,“scope”:https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send“,”expires_in“:3599,“ext_expires_in“:3599,“access_token:”eyJ0eXAiOi。。。"}

 类似资料:
  • 问题内容: 尝试使用JavaMail中的NTLM连接到Exchange服务器。我可以连接到SMTP,但不能连接到IMAP。我还可以使用相同的主机/用户名/密码通过OS X Mail.app应用程序进行身份验证,帐户类型=“ IMAP”,端口143,ssl = false,authentication = NTLM,域名=“。 连接代码: 输出: 我尝试通过http://www.oracle.com

  • 最近,Exchange Online已经宣布对OAuth2.0的IMAP和SMTP的支持。按照指南,我已经设置了应用程序权限以及IMAP和SMTP连接。应用程序被配置为任何组织目录(任何Azure AD Directory-multitenant)中的

  • 尝试使用从gitlab克隆git帐户时, git克隆git@gitlab.com:用户名/项目。吉特 面对下面的错误, git@gitlab.com:权限被拒绝(公钥)。致命:无法从远程存储库读取。 gitlab是用我的custom.pub公共ssh密钥注册的。windows客户端PC的私有和公共ssh密钥都存储在“C:/用户/用户名/. ssh”中。 如何修复此故障

  • 我收到一个错误“无法建立SSL连接,请参阅内部异常。身份验证失败,请参阅内部异常。”当尝试通过C#HttpWebRequest通过SSL发布请求时(已尝试RestSharp和HttpClient,结果相同)。我还尝试了网络上提到的所有可能的解决方案,如: 他们都不为我工作。另一个问题是,我在另一台计算机上运行相同的项目,它的工作没有任何问题。所以看起来问题的来源是环境,也许. net框架或注册表中

  • Tweepy API请求twitter return me Twitter错误响应:状态代码=401。 这是我的实际代码: 我曾试图用tweepy软件包删除推文,并获得了所有必需的密钥。镊子包装不起作用吗?有人能帮我解决这个问题吗。

  • 问题内容: 我试图连接到http://bluesql.net上的mySQL数据库,但是当我尝试连接时,出现此错误: 我已经研究过了,它与MySQL 4.1之前使用的一些旧密码方案有关。较新的版本可以选择使用旧密码,我已阅读过此密码可能会导致此问题。 我正在运行php 5.3,并与mySQLi(新的mysqli(…))连接。我希望我可以在代码中做一些事情以连接到bluesql.net上的数据库- 显