java mail通过oauth认证后无法登陆outlook邮箱,提示A1 NO AUTHENTICATE failed.

匿名
2024-04-30T03:33:29+00:00

已经完成应用程序注册,并配置api权限和客户端密码

javamail 然后获取oauth的token后,在登陆邮箱时提示错误:A1 NO AUTHENTICATE failed.

登陆邮箱代码如下:

String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

    Properties props= new Properties(); 

    props.put("mail.imaps.ssl.enable", "true"); 

    props.put("mail.imaps.sasl.enable", "true"); 

    props.put("mail.imaps.port", port); 

    props.put("mail.imaps.auth.mechanisms", "XOAUTH2"); 

    props.put("mail.imaps.sasl.mechanisms", "XOAUTH2"); 

    props.put("mail.imap.starttls.enable", mail\_ssl\_enable); 

    props.put("mail.imap.ssl.enable",mail\_ssl\_enable); 

    props.put("mail.imap.auth", "true"); 

    props.put("mail.imap.auth.mechanisms", "XOAUTH2"); 

    props.setProperty("mail.imaps.socketFactory.class", SSL\_FACTORY); 

    props.setProperty("mail.imaps.socketFactory.fallback", "false"); 

    props.setProperty("mail.imaps.socketFactory.port", port); 

    props.setProperty("mail.imaps.starttls.enable", "true"); 

    props.put("mail.debug", "true"); 

    props.put("mail.debug.auth", "true"); 

    if(username.toLowerCase().contains("hotmail") || username.toLowerCase().contains("outlook")) { 

        password=OutlookOAuth2.getToken(); 

    } 

    HashMap IAM = new HashMap(); 

    IAM.put("name",username); 

    IAM.put("version","1.0.0"); 

    IAM.put("vendor","myclient"); 

    IAM.put("support-email",username); 

    Session session = Session.getDefaultInstance(props, null); 

    session.setDebug(true); 

    IMAPStore store =(IMAPStore) session.getStore(protocol); 

    store.connect(host, username, password);

对应登陆邮箱日志如下:

2024-04-30 11:29:19.593[1714447759593] | INFO | main - token ok

DEBUG: JavaMail version 1.6.2

DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map

DEBUG: setDebug: JavaMail version 1.6.2

DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle]

DEBUG IMAP: mail.imap.fetchsize: 16384

DEBUG IMAP: mail.imap.ignorebodystructuresize: false

DEBUG IMAP: mail.imap.statuscachetimeout: 1000

DEBUG IMAP: mail.imap.appendbuffersize: -1

DEBUG IMAP: mail.imap.minidletime: 10

DEBUG IMAP: enable STARTTLS

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. [UwBJADIAUABSADAANABDAEEAMAAwADEAMQAuAGEAcABjAHAAcgBkADAANAAuAHAAcgBvAGQALgBvAHUAdABsAG8AbwBrAC4AYwBvAG0A]

A0 CAPABILITY

* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS MOVE 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=******@domain.com, password=<non-null>

A1 AUTHENTICATE XOAUTH2 dXNlcj15dW5vbmdtYWlsQGhvdG1haWwuY29tAWF1dGg9QmVhcmVyIGV5SjBlWEFpT2lKS1YxUWlMQ0p1YjI1alpTSTZJbHBpVkZCUmFVUldlVlZ5YVZSblpEazRSakpQTlVNM09WUjFOM0poWDNVeWRURm9OSGhPVkVwTmNFa2lMQ0poYkdjaU9pSlNVekkxTmlJc0luZzFkQ0k2SWt3eFMyWkxSa2xmYW01WVluZFhZekl5ZUZwNGR6RnpWVWhJTUNJc0ltdHBaQ0k2SWt3eFMyWkxSa2xmYW01WVluZFhZekl5ZUZwNGR6RnpWVWhJTUNKOS5leUpoZFdRaU9pSm9kSFJ3Y3pvdkwzQnpMbTkxZEd4dmIyc3VZMjl0SWl3aWFYTnpJam9pYUhSMGNITTZMeTl6ZEhNdWQybHVaRzkzY3k1dVpYUXZOMlEyTWprelpqa3RNR1kzTWkwME1qRmtMVGhtWlRjdFpEbGlabU00Wm1ZMFpEY3pMeUlzSW1saGRDSTZNVGN4TkRRME56UTFPU3dpYm1KbUlqb3hOekUwTkRRM05EVTVMQ0psZUhBaU9qRTNNVFEwTlRFek5Ua3NJbUZwYnlJNklrVXlUbWRaUkdwTVpta3hTelF2Y2xKQk4wbDJOWHBOUjB0NVlrMUNkMEU5SWl3aVlYQndYMlJwYzNCc1lYbHVZVzFsSWpvaWFXMWhjRElpTENKaGNIQnBaQ0k2SW1Kak16RTROemN4TFRZMk1XRXROREJsWWkwNU5URm1MVEZpTmpFeE1EVmxaRFU1WmlJc0ltRndjR2xrWVdOeUlqb2lNU0lzSW1sa2NDSTZJbWgwZEhCek9pOHZjM1J6TG5kcGJtUnZkM011Ym1WMEx6ZGtOakk1TTJZNUxUQm1Oekl0TkRJeFpDMDRabVUzTFdRNVltWmpPR1ptTkdRM015OGlMQ0p2YVdRaU9pSXhNR0UxTnpka05TMDFNbUZsTFRRd1pEVXRPVGxsTUMwME1USXlZemMwTnpZeVl6VWlMQ0p5YUNJNklqQXVRV05aUVMxYVRtbG1XRWxRU0ZWTFVEVTViVjk1VURsT1kzZEpRVUZCUVVGQlVFVlFlbWRCUVVGQlFVRkJRVVJIUVVGQkxpSXNJbk5wWkNJNkltWTNaamcxTWpJNExXRmtaVGd0TkRJNU1DMWhOakkwTFRsaE1UUTFaR1ExTlRNeU1DSXNJbk4xWWlJNklqRXdZVFUzTjJRMUxUVXlZV1V0TkRCa05TMDVPV1V3TFRReE1qSmpOelEzTmpKak5TSXNJblJwWkNJNklqZGtOakk1TTJZNUxUQm1Oekl0TkRJeFpDMDRabVUzTFdRNVltWmpPR1ptTkdRM015SXNJblYwYVNJNklsZHdhR3RtYzJSaUxUQlBhMGxYWTJoRVRWRTFRa0VpTENKMlpYSWlPaUl4TGpBaUxDSjNhV1J6SWpwYklqQTVPVGRoTVdRd0xUQmtNV1F0TkdGallpMWlOREE0TFdRMVkyRTNNekV5TVdVNU1DSmRmUS5XWE4tZzg5X2JFRDJiTFg1a3U4VnFuYVppV3Q3Qkp5OEtsODFvOE5VMGJsczdmdUh2cnNZTVBUbTA0dzR6U3NUaHRESXV6a2VNZ0pYVURMTWlpbGQyOVZHSE04LXJzczRvR2VCSjg4Tlhoc0JrY3hSM2N2alYwejBFYTFHaUNVeWJfRUcxd0RmV1FuWlJVWnAwejdVQlU3NEY2X1Q2OWFVZ1oxYnltOHpHaE9NdVZEZHNCRjQ4aVI2Q0dCdWU5ZzM3QkZNVzhkT3ZqZ2tDTXRwNGFfMjlpbDlFN3JwNEFBQTBGbzFwMFBIeURmMmhaUDctSm1LUXFFYWN0NFZGSlFmQ1ZzaUN5Q0ZOWkNzUnJCNnJhV2EzMm1qa3FlV3ZMTGVVN3J0VHFHWDdWb2pMZjlKVG93TE9RX2R0aURiWGZHX3ZybWVOWjJsdzlqcEpmVHhvaGJVOGcBAQ==

A1 NO AUTHENTICATE failed.

2024-04-30 11:29:23.672[1714447763672] | ERROR | main - 处理产生异常,fullErrMessage: AUTHENTICATE failed.

javax.mail.AuthenticationFailedException: AUTHENTICATE failed.

at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:732) 

at javax.mail.Service.connect(Service.java:366) 

at javax.mail.Service.connect(Service.java:246) 

请各位专家帮给个指导,该如何通过javamail正常登陆outlook读取邮件,谢谢。

Outlook | Web | Outlook 在网上的商用 | 登录

锁定的问题。 此问题已从 Microsoft 支持社区迁移。 你可投票决定它是否有用,但不能添加评论或回复,也不能关注问题。

0 个注释 无注释

2 个答案

排序依据: 最新
  1. 匿名
    2024-04-30T12:02:44+00:00

    此响应已自动翻译。因此,可能存在语法错误或奇异的措辞。

    亲爱的 昆汀利,

    日安!! 

    感谢您与 Microsoft 社区联系。 很遗憾听到您遇到 Javamail 问题,登录邮箱时提示错误:A1 NO AUTHENTICATE 失败。

    Microsoft已弃用 XOAUTH2 ,并建议改用 新式身份验证 。

    1. 新式身份验证:Microsoft已弃用XOAUTH2身份验证机制,并建议改用新式身份验证。 新式身份验证使用 OAuth 2.0 来提供更好的安全性和用户体验1。以下是您可以继续操作的方法: A.A. 注册应用程序: - 转到 Azure 门户 并注册应用程序。- 获取应用的客户端 ID 和客户端密码 。 湾。 访问令牌: - 使用 库通过客户端凭据流获取 访问令牌。- 确保请求 “https://outlook.office365.com/.default” 范围。 @azure/msal-node   三. 创建XOAUTH2令牌: - 使用获取的访问令牌创建XOAUTH2令牌。- 示例: .const auth2 = Buffer.from('user=' + mailId + '^Aauth=Bearer ' + token + '^A^A').toString('base64') D.D.(英语:D.D.) 使用 IMAP 进行身份验证: - 使用XOAUTH2令牌向 IMAP 进行身份验证,就像当前一样。 你们。 启用新式身份验证: - 确保 为 Office 365 租户启用新式身份验证 。- 在 Exchange Online PowerShell 中运行以下命令: .Set-OrganizationConfig -OAuth2ClientProfileEnabled $true
    2. 检查权限:
    3. 验证重定向 URI:
      • 如果使用的 是身份验证代码流,请确保已设置 重定向 URL。

    参考: A1 使用 JavaMail 和 OAuth2 认证时 NO AUTHENTICATE 失败。- Microsoft 问答

    我希望这会有所帮助!如果您有任何其他问题或疑虑,请告诉我。感谢您的时间与合作。

    真诚地

    费罗兹·马哈茂德 |Microsoft 社区版主

    此答案是否有帮助?

    0 个注释 无注释
  2. 匿名
    2024-04-30T05:14:04+00:00

    亲爱的 quentinlee

    感谢您在社区发帖。

    我们已收到您的询问,并可能会收到社区版主的相应回复。

    我们感谢您此时的耐心与合作。 谢谢。

    真挚地,

    Feroz Mahmud | Microsoft Community Moderator

    此答案是否有帮助?

    0 个注释 无注释