2013-06-28 6 views
1

Недавно я пытаюсь получить электронную почту из Gmail, используя протокол XOAuth2. В частности, я использую «OAuth2Authenticator.java» от https://code.google.com/p/google-mail-oauth2-tools/downloads/list.Неверные учетные данные с XOAuth2 для Gmail

Но, я всегда получаю недопустимый удостоверении ошибку, как происходит некорректно:

A1 NO [ALERT] Недействительные учетные данные (Failure) Исключение в потоке "основной" javax.mail.AuthenticationFailedException: [ALERT] Неверные учетные данные (Неспособность) на com.sun.mail.imap.IMAPStore.protocolConnect (IMAPStore.java:566) на javax.mail.Service.connect (Service.java:265)

Перед чтением, в связи с ограничением добавив ссылку, я не могу написать «httoo: //», чтобы, пожалуйста, подумайте, что этот заголовок http находится перед некоторой информацией о URL-адресе.

Прежде чем отправлять этот вопрос, я думаю, что я смотрел большую часть статей об этом. Многие статьи об использовании OAuth1.0 (устарело) Но я все еще не могу понять, как я могу заставить его работать с OAuth2 & XOAuth2. Я ценю любое предложение/помощь.

Ниже шаги, которые я беру:

  1. получить маркер доступа через OAuth2 со сферой mail.google.com/

  2. просто поставить этот маркер доступа & аккаунта Gmail (например [email protected]) в «OAuth2Authenticator.java».

После этой процедуры я всегда получаю недопустимые учетные данные.

Интересным является то, что я могу получать непрочитанные письма через URL-адрес фида (то есть https://mail.google.com/mail/feed/atom), который указан на игровой площадке Google OAuth2.0.

Это означает, что я уверен, что получаю правильный токен доступа. Но для IMAP этот код не работает вообще.

Фактически, область «mail.google.com/» не включена в список игровой площадки Google OAuth2.0.

Для получения доступа к токену для XOAuth2 существует ли другой специальный способ получить токен доступа?

Для официальной страницы о XOAuth2 нам необходимо использовать base64 для кодирования токена доступа. Но, я думаю, пример кода выполняет эту процедуру.

Кроме того, SMTP этого образца не работал вообще. Но после изменения свойств я мог бы заставить его работать. Этот код старый? Но, к сожалению, мне нужен IMAP. Но после попытки установить некоторые другие/новые свойства, IMAP вообще не работает.

Я долгое время задерживался на этой проблеме. Итак, я разместил этот вопрос. Я очень ценю любое предложение/помощь.

С уважением

+0

Вы прочитали https://developers.google.com/gmail/xoauth2_protocol? У вас есть трассировка протокола? Что вы используете для своей библиотеки imap? Xoauth2 сильно отличается от того, что есть. – Max

+0

Благодарим за быстрый ответ, Макс. Я читаю это. Но, я думаю, я не совсем понял, как я могу действительно «Протокола обмена IMAP». Итак, я использую предоставленные библиотеки и примеры в указанном вами URL-адресе. На самом деле, я замечаю, что между выходом моего кода и «Обмен протоколом IMAP» существует небольшая разница. В моем выпуске проверяется возможность A0. Затем проверьте возможность A1. Но официальный обмен протоколом IMAP - проверка возможности C0. Затем проверьте возможность A1. Считаете ли вы, что это причина? – user2533493

+0

Кроме того, я нашел этот веб-сайт http://www.limilabs.com/blog/oauth2-gmail-imap-web-applications. Но, похоже, мы можем использовать IMAP только для ограниченного домена, то есть не для произвольных пользователей. Означает ли это, что мы можем получить доступ к GMail через IMAP только для ограниченного домена? – user2533493

ответ

0

Я понял вашу проблему в отношении недействительных учетного

A1 NO [ALERT] Invalid credentials (Failure) Exception in thread "main"   
javax.mail.AuthenticationFailedException: [ALERT] Invalid credentials (Failure) at 
com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:566) at 
javax.mail.Service.connect(Service.java:265) 

Для удаления указанного выше ошибок, вы должны привести к аннулированию токена и получить новый маркер, используя ниже кода

1- accountManager.invalidateAuthToken("com.google", token); 

после недействительный токен, вы должны получить токен обновления, используя код ниже

String newToken = AccountManager.get(this).getAuthToken(new Account(account,"com.google"), 
      AUTH_TOKEN_TYPE, true, null, null).getResult().getString(AccountManager.KEY_AUTHTOKEN); 

используя новый токен, вы можете войти в систему.