2012-10-19 2 views
1

Итак, я понимаю, что SASL не реализован в android, и поэтому методы javamail oauth2 не будут из коробки.Android Javamail custom Authentication

Однако, согласно google api docs для gmail imap (https://developers.google.com/google-apps/gmail/xoauth2_protocol), было бы довольно тривиально получить токен аутентификации, закодировать его и отправить «AUTHENTICATE XOAUTH2» на сервер вручную.

Моя проблема: я хочу использовать javamail IMAP-функции (не хочу обрабатывать команды протокола IMAP и сам отлаживать ответ), но мне нужен способ просто вставить правильную команду аутентификации - не традиционное имя пользователя логина ,

Можно ли это сделать и что было бы самым простым способом? Могу ли я создать свой собственный метод аутентификации и реализовать это легко?

В качестве альтернативы, я могу создать соединение, а затем передать его в IMAPStore (сомневаюсь, что это сработает, поскольку оно создает и управляет пулом соединений).

--- Edit ---

Просто чтобы быть более точным, то метод javax.security.sasl не реализован в Android, который Imap.protocol.IMAPSaslAuthenticator опирается.

ответ

4

У меня есть рабочая банка с поддержкой sasl для imap (для smtp вам нужно выдать команду, как вы сказали, потому что java-почта для android не имеет инфраструктуры sasl для smtp). Все, что я сделал, это добавить пакеты javax.security.sasl и javax.security.auth.callback в java-почту для источника android и переупаковать его. Мне пришлось поместить другой namaspace, myjavax.security.sasl и т. Д., Потому что в противном случае система сборки android жалуется, что пакет содержит основные библиотеки, не уверен, почему он не жалуется на javax.mail, который в любом случае находится в основном пространстве имен (javax). Мне также пришлось изменить некоторый импорт для нового пространства имен в некоторых классах, но в основном сами классы пакетов и com.sun.mail.imap.protocol.IMAPSaslAuthenticator. С этим я смог успешно пройти аутентификацию на сервере imap-сервера gmail, используя маркер oauth 2, который я получил из AccountManager Android, я не пробовал ничего другого. Для smtp вы можете посмотреть мой ответ здесь Javamail api in android using XOauth Я думаю, что можно сделать smtp работу с Sasl, получая новые классы отсюда http://kenai.com/projects/javamail/sources/mercurial/show/mail/src/main/java/com/sun/mail/smtp, у которых есть поддержка Sasl для smtp. Я думаю, что это отлично, потому что все, что я делаю, это добавить некоторые классы GPL, которые я добавил из JDK. Надеюсь, что это поможет, если вам нужны банки или еще несколько объяснений о том, как это сделать, просто спросите.

+0

Спасибо за ответ и обсуждение выше - я просто попросил ввести имя пользователя и пароль в своем приложении, хотя я бы предпочел использовать oauth 2 и sasl (я ничего не делаю с SMTP). есть ли у вас ссылка на банки или источник, которые вы использовали? – SjB

+0

Вот молния с источником и банкой. Это только почтовая часть javamail, вам нужна активация и дополнительная банка из javamail для Android. http://dl.dropbox.com/u/3092259/javamail.zip Вы можете экспортировать новую банку с помощью jardesc, если вам нужно. – alex

+0

@alex код, который вы приложили, является java-проектом. Я хочу, чтобы любой образец, который вы создали для андроида, поделился им. Спасибо заранее –

1

Невозможно сделать это без взлома классов JavaMail.

Не можете ли вы просто использовать аутентификацию имени пользователя и пароля?

+0

Хорошо, это то, что я боялся. Я мог бы использовать имя пользователя/пароль, но предпочел бы использовать токены, если это возможно, поэтому пользователям не нужно вводить свои учетные данные в мое приложение, просто «одобряйте» его в первый раз, когда я попрошу токен ... – SjB

+0

Mhhh Я заметил проверку что решение в моем ответе ниже может быть проблемой с лицензированием Oracle по исключению класса в лицензии. В основном, насколько я понимаю, пространство имен должно оставаться javax. *. Если да, можно ли андроид перестать жаловаться на основные классы?В конце концов, он не жалуется на javax.mail в java-почте для «порта» Android. Я думаю, что Билл Шеннон должен был бы ответить на это: p, просто заметил ваше имя здесь и в источнике, на который я смотрел: D – alex

+0

Я понятия не имею, к каким классам Android жалуется и почему. Жаль, что на самом деле это не Ява, а? ;-) Я не помню исключение classpath, говорящее о javax. *, Но IANAL. –