2013-03-21 9 views
7

Viene visualizzato errore quando cerco di eseguire il mio progetto Android dopo l'aggiunta di un nuovo comando AUTH XOAUTH2. Sto usando il dispositivo Android con OS versione 2.3 ma lo stesso codice funziona bene su Android 4,0Eccezione Android Oauth con SMTP Transport connect, con Android versione 2.3

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

si prega di controllare i registri

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) 
+0

I m anche ottenere eccezione ... attraverso la scansione trovato errore a issueCommand() il metodo di trasporto. Qualcuno suggerisce quale comando e aspettarsi dovrebbe essere lì per gli account google –

+0

Ciao, qualcuno di voi ha mai funzionato? –

risposta

5

L'errore che si riceve

eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ== 

decodifica al seguente utilizzando un Base64 Decoder

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

Ciò finisce che significa (come criptico come il messaggio è) è che il token di autenticazione che si sta utilizzando è scaduto. È necessario invalidarlo e quindi ottenerne uno nuovo (è sufficiente richiedere nuovamente il token).

È invalida il token in questo modo:

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

Spero che questo sia utile :)

+1

Ho fatto quello che hai postato ma e la mia app ha un nuovo token, tuttavia continuo a ricevere questo messaggio ... – Rohan

+0

Piccolo aggiornamento, dovrebbe essere "com.google" non "con.google" –

Problemi correlati