JavaMail OAuth AuthenticationFailed异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaMail OAuth AuthenticationFailed异常相关的知识,希望对你有一定的参考价值。

我正在尝试通过javamail连接到gmail服务器并尝试通过OAuth进行身份验证。

这是执行此操作的代码。

public static void connect() {

    Properties props = System.getProperties();
    props.setProperty("mail.store.protocol", "imaps");
    props.put("mail.imaps.ssl.enable", "true"); //required for Gmail
    props.put("mail.imaps.auth.mechanisms", "XOAUTH2");

    Session session = Session.getInstance(props);
    Store store = session.getStore();
    store.connect("imap.gmail.com",  993, "abcimap@gmail.com", "ya29.Glx2BW9zm7wSsr9WV66KhC4kZa7dbrOA9P6HT3EMwmiLbmkdjbHZM5oHi8VfHhxM-VNDntRxQBZ_GzMM2rMa1cAxnQ3GiNaR_M9SRfT9sCIXe0l4Rz_mNM8a40aqZw");


    Folder folder = store.getFolder("Inbox");
    IMAPFolder imapFolder = (IMAPFolder)folder;
}

但我知道,

线程“main”中的异常javax.mail.AuthenticationFailedException:[AUTHENTICATIONFAILED] com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:715)javax.mail.Service.connect上的凭据(失败)无效(服务。 Java的:366)

这里有一个相关的问题:Problems with JavaMail, GMail and OAUTH2 (not Android)

要求设定范围。但我不确定在哪里设置它。无论是在java代码还是在它之外。

你能帮帮我解决这个问题吗?

答案

在创建访问令牌时设置范围。

这是我用来生成OAuth2令牌的shell脚本,以及说明:

#!/bin/sh

# Go to this URL in a browser:
# https://accounts.google.com/o/oauth2/auth?scope=https://mail.google.com/&redir
ect_uri=http://localhost&response_type=code&client_id=793...42.apps.googleusercontent.com
# it will display a confirmation page.  once confirmed it will redirect
# to something like this, which will fail in the browser:
# http://localhost/?code=4/0g...
# copy the code from the failed URL and use the code below

curl 
        --data-urlencode client_id=793...42
.apps.googleusercontent.com 
        --data-urlencode client_secret=<my-secret> 
        --data-urlencode 'code=4/0g...' 
        --data-urlencode redirect_uri=http://localhost 
        --data-urlencode grant_type=authorization_code 
        https://www.googleapis.com/oauth2/v3/token

显然,你需要用你的值替换client_id和secret。

以上是关于JavaMail OAuth AuthenticationFailed异常的主要内容,如果未能解决你的问题,请参考以下文章

IdentityServer4授权模式应用场景

原因:没有为 org.springframework.security.authentication.UsernamePasswordAuthenticationToken 找到 Authentica

JavaMail:利用JavaMail发送复杂邮件

JavaMail 读取消息

JavaMail| JavaMail配置属性

JavaMail发送简单邮件