2015-08-06 5 views
1

Я использую код от this link для доступа к серверу imap gmail, потому что я не смог найти порт javamail для Android с поддержкой OAUTH (javamail 1.5.2 или новее).Внедрение образца кода для аутентификации в Gmail с помощью OAuth2

Однако проблема с этим кодом:

public static IMAPStore connectToImap(String host, int port, String userEmail, String oauthToken, boolean debug) throws Exception { 
    Properties props = new Properties(); 
    props.put("mail.imaps.sasl.enable", "true"); 
    props.put("mail.imaps.sasl.mechanisms", "XOAUTH2"); 
    props.put(OAuth2SaslClientFactory.OAUTH_TOKEN_PROP, oauthToken); 
    Session session = Session.getInstance(props); 
    session.setDebug(debug); 

    final URLName unusedUrlName = null; 
    IMAPSSLStore store = new IMAPSSLStore(session, unusedUrlName); 
    final String emptyPassword = ""; 
    store.connect(host, port, userEmail, emptyPassword); 
    return store; 
} 

является то, что новый объект магазина создается каждый раз, когда маркер аутентификации изменяется (истекает). И тогда я должен создать новую папку и читать мои сообщения снова ...

Мой вопрос:

Можно ли изменить токен аутентификации без создания нового объекта Store? Я хотел бы быть в состоянии осуществить что-то вроде

store.connect("imap.gmail.com", username, oauth2_access_token) 

(например, из JavaMail 1.5.2), чтобы воссоединиться, без необходимости воссоздания Store объекта.

спасибо!

+0

Является ли истечение токена аутентификации, вызывающего отключение активного соединения? Если вам нужно создать новое соединение с тем же хранилищем, вы должны установить свойство в новое значение и создать новое соединение, не создавая новый объект Store. –

+0

Это именно то, что я хочу. Для повторного подключения с использованием того же объекта Store и нового токена аутентификации. Но как это сделать (токен авторизации задается в объекте Properties), следуя опубликованному коду? – milosh

+0

Снова вызовите props.put новым токеном. –

ответ

1

Если вам нужно создать новое соединение с тем же магазином, вы должны установить свойство в новое значение и создать новое соединение, не создавая новый объект Store. Просто вызовите props.put новым значением. Сессия сохраняет ссылку на объект Properties, а не делает ее копию.

+0

Спасибо, Билл, это поведение указано? – EJP

+0

Нет, я не верю, что это так. –

Смежные вопросы