8

新しい AUTH XOAUTH2 コマンドを追加した後に Android プロジェクトを実行しようとすると、次のエラーが発生します。

    public SMTPTransport connectToSmtp(String host, int port, String userEmail,String oauthToken, boolean debug) throws Exception 
{

    Properties props = new Properties();
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.starttls.required", "true");
    props.put("mail.smtp.sasl.enable", "false");
    session = Session.getInstance(props);
    session.setDebug(debug);


    final URLName unusedUrlName = null;
    SMTPTransport transport = new SMTPTransport(session, unusedUrlName);
    // If the password is non-null, SMTP tries to do AUTH LOGIN.
    final String emptyPassword = null;
    transport.connect(host, port, userEmail, emptyPassword);

    byte[] response = String.format("user=%s\1auth=Bearer %s\1\1", userEmail,oauthToken).getBytes();
    response = BASE64EncoderStream.encode(response);

    transport.issueCommand("AUTH XOAUTH2 " + new String(response),235);

    return transport;
}

ログを確認してください

03-21 10:05:08.679: W/System.err(987): javax.mail.MessagingException: 334 eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==
03-21 10:05:08.679: W/System.err(987):  at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1481)
03-21 10:05:08.679: W/System.err(987):  at com.swapmeen.test.GMailOauthSender.connectToSmtp(GMailOauthSender.java:48)
03-21 10:05:08.679: W/System.err(987):  at com.swapmeen.test.GMailOauthSender.sendMail(GMailOauthSender.java:57)
03-21 10:05:08.679: W/System.err(987):  at com.swapmeen.test.MainActivity$1.run(MainActivity.java:64)
4

1 に答える 1

5

あなたが受け取っているエラー

eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==

Base64 Decoder を使用して次のようにデコードします

{"status":"400","schemes":"Bearer","scope":"https://mail.google.com/"}

これが最終的に意味することは (メッセージと同じくらい不可解ですが)、使用している認証トークンの有効期限が切れていることです。それを無効にしてから、新しいものを取得する必要があります (単にトークンを再度要求するだけです)。

次のようにトークンを無効にします。

mAccountManager.invalidateAuthToken("com.google", mAuthenticationToken);

これがお役に立てば幸いです:)

于 2013-11-19T19:02:07.793 に答える