Разработка почтового клиента на Android.

Я пытаюсь разработать небольшое приложение для отправки и получения электронной почты на платформе Android. В настоящее время я использую API Javamail, пытаясь отправить электронное письмо. Однако я подумал, что если я реализую свое приложение с помощью javamail, как я получу электронное письмо и получу уведомление от своего приложения о том, что я его получил? Это связано с классами Service и Provder, найденными на Android? Я полный новичок в андроиде.

Также я попробовал этот фрагмент кода, найденный здесь:

Программирование для Android — отправить письмо

не повезло, так как приложение не работает.


person skay-    schedule 04.11.2011    source источник
comment
Отправка и получение почты — это, к сожалению, две большие разницы... Одна вещь — это сервер, а другая — клиент. Это похоже на написание веб-браузера или HTTP-сервера. Это не то же самое.   -  person m0skit0    schedule 04.11.2011
comment
Да, я знаю, но как я получу электронное письмо на Android? Есть ли класс электронной почты? Потому что я не мог найти способ. Я хочу создать очень простое приложение, такое как электронная почта по умолчанию.   -  person skay-    schedule 04.11.2011
comment
Вы не можете получить электронное письмо, так как вы не являетесь почтовым сервером и у вас нет домена, не говоря уже о DNS-сервере. Возможно, вы имеете в виду получение электронной почты с почтового сервера. Для этого вам необходимо использовать протоколы POP3/IMAP. Проверьте библиотеку для этого.   -  person m0skit0    schedule 04.11.2011
comment
Хм, да, в основном моя проблема в том, как получить данные. Я знаю, что приложение с открытым исходным кодом k9 имеет эту функциональность, и они предоставляют оду, но, поскольку существует более 150 классов, я не могу точно определить, откуда они получают почту.   -  person skay-    schedule 04.11.2011
comment
Как я уже сказал, ищите POP3/IMAP.   -  person m0skit0    schedule 04.11.2011


Ответы (1)


JavaMail также можно использовать для получения почты с сервера POP3. В качестве примера посмотрите на этот класс: PopMailImporter. .java, особенно функции importMails и importMail.

person Hontvári Levente    schedule 04.11.2011
comment
Итак, я могу создать приложение электронной почты, просто используя Javamail, верно? - person skay-; 04.11.2011
comment
@Stelios Приложение электронной почты может быть любым, но, по крайней мере, я могу сказать, что JavaMail упрощает отправку писем на SMTP-сервер (точнее, отправку) и получение писем с сервера POP3. - person Hontvári Levente; 04.11.2011
comment
Большое спасибо, я в настоящее время смотрю на класс, но не могли бы вы помочь мне немного больше с его функциональностью. Я новичок в таких вещах, и я застрял =/. Заранее спасибо. - person skay-; 05.11.2011
comment
@Stelios Добро пожаловать. Если у вас есть вопросы по приведенному выше примеру класса, я могу помочь, но я ничего не знаю об Android. Если у вас есть другие конкретные вопросы, я бы порекомендовал вам опубликовать их в новом вопросе. - person Hontvári Levente; 06.11.2011
comment
Спасибо еще раз. В основном я не могу понять метод importMails(..). Сначала он создает объект свойств, затем сеанс; удаленный хост должен быть: smtp.gmail.com, если я не ошибаюсь. Затем я подключаюсь к серверу, и он вызывает другой метод и так далее. Это немного сложный пример, и кажется, что я скучаю по вещам. Если я могу сделать это в Java, тогда у меня не должно быть проблем и с Android. У вас есть другой более простой пример? Спасибо еще раз. - person skay-; 06.11.2011
comment
@Stelios Объект Properties хранит свойства конфигурации, но в примере он пуст. Функция создает сеанс POP3, подключается к хранилищу (здесь это означает учетную запись POP3 на сервере), открывает папку (все равно в POP3 есть только одна папка), затем извлекает все сообщения. Он перебирает список сообщений и считывает их содержимое, открывая их как поток. - person Hontvári Levente; 06.11.2011
comment
@Stelios Нет, smtp.gmail.com предназначен для отправки. Для получения почты через POP3 вы должны использовать pop.gmail.com. К сожалению, POP-сервер, поддерживаемый Google, выполняет шифрование нестандартным способом. См. другой пример: javaer. org/j2ee/3-javamail/ специально для Google. - person Hontvári Levente; 06.11.2011
comment
Хорошо, большое спасибо, Хонтвари. Я использовал пример кода, и мне удалось получить данные из моей учетной записи электронной почты. Одна вещь, которую я действительно не понимаю, это то, что gmail.openFolder(INBOX); предположим, чтобы открыть только папку «Входящие»? Потому что в настоящее время у меня выбран только INBOX, но электронные письма из корзины также отображаются. Также теперь, когда я запустил приложение один раз, когда я повторно запускаю его, оно говорит, что сообщений нет, хотя в последний раз, когда я запускал его, они были. - person skay-; 06.11.2011
comment
И последнее, когда тело печатается на экране, по какой-то причине я получаю ссылку на тело объекта и двоичный вывод, подобный этому: javax.mail.util.SharedByteArrayInputStream@3abc87 CONTENT-TYPE: multipart/alternative; граница = 0015174c3d6ad784b804b108d2d5. Также вы знаете, как я могу отличить, когда письмо не прочитано? Я знаю, что задал много вопросов, но заранее спасибо за все, и я очень прошу любую помощь. - person skay-; 06.11.2011
comment
@Stelios INBOX — это фиктивный параметр, в POP3 нет понятия папок. JavaMail использует тот же API для IMAP, другого протокола поиска почты, который знает о папках. В почтовый ящик POP3 вы получаете все входящие письма независимо от их окончательного размещения в gmail. Я не вижу вашего кода, поэтому не знаю, почему сообщения удаляются, но если вы скопировали первый пример, то закомментируйте message.setFlag(Flags.Flag.DELETED, true); линия. - person Hontvári Levente; 06.11.2011
comment
Также вы знаете, как я могу отличить, когда письмо не прочитано? Это невозможно в POP3. Я могу себе представить, что это возможно в IMAP. Gmail AFAIK также поддерживает службу IMAP. Я не понимаю вашего вопроса о выводе, тем более, что я не вижу кода, возможно, выложите код как новый вопрос. - person Hontvári Levente; 06.11.2011
comment
Спасибо за вашу ценную информацию. Я использую код, который вы предоставили здесь для обсуждения, а не для ответа. Еще раз спасибо, и я опубликую свою проблему с кодом в другом новом вопросе. - person skay-; 07.11.2011