Android Oauth Exception with SMTP Transport connection, with Android version 2.3

I get the following error when I try to start an android project after adding a new AUTH XOAUTH2 command. I am using an Android device with os version 2.3, but the same code works fine on Android 4.0

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; } 

Please check the logs.

 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) 
+7
source share
1 answer

The error you get

 eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ== 

decodes the following using a Base64 decoder

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

What this means (as mysteriously as a message) is that the authentication token you are using has expired. You need to cancel it and then get a new one (just ask for the token again).

You revoke the token as follows:

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

I hope this will be helpful :)

+5
source

All Articles