【问题标题】:JavaMail OAuth AuthenticationFailed ExceptionJavaMail OAuth AuthenticationFailed 异常
【发布时间】:2018-03-07 04:33:52
【问题描述】:

我正在尝试通过 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;
}

但我明白了,

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

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

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

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

【问题讨论】:

    标签: oauth-2.0 jakarta-mail google-oauth


    【解决方案1】:

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

    这是我用来生成 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 替换为您的值。

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 2022-10-20
      相关资源
      最近更新 更多