|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Здравствуйте, Товарищи! Помогите пожалуйста примером, как считать письмо с почтового ящика в AndroidStudio Есть много информации для консоли, например: JavaMail API Проверка сообщений электронной почты Попытавшись выполнить в AndroidStudio, я сначала ловил ошибку: Код: plaintext 1. 2. 3.
Код с AsyncTask Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75.
Но всё равно ловлю ошибку при попытке получить messages[1].getContent() Ошибка Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Посоветуйте что делать, вторые сутки сижу :( ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 12:54 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Bryk_Alien messages[1].getContent() Первое сообщение по индексу 0, а не 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 13:19 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Bryk_AlienЯндех посоветовал запускать в отдельном потоке, поэтому я обернул всё AsyncTask-ом Все сетевые операции проверяют в каком потоке выполняются и если поток основной (UI), то вываливают ошибку. Все тяжелые действия нужно выносить в отдельные потоки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 13:26 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
wadman, Да, я знаю что 0, просто проверял - осталось... Ну AsyncTask - это же отдельный поток? )) Вот я в него и вывел... Вываливается при попытке запросить messages[1].getContent() Может, из AsyncTask-а можно каким-то образом вернуть массив писем Message[] ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 13:36 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Bryk_Alienвернуть массив писем вернуть куда? На экран? В виджет? Может сразу в БД записать и позже прочитаете в активити из БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 16:15 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Bryk_AlienНу AsyncTask - это же отдельный поток? Верно. Bryk_AlienВываливается при попытке запросить messages[1].getContent() Вываливается на том, что метод возвращает null и затем к нему идет обращение. Что с null делать собрался? Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 16:21 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Petro123вернуть куда? На экран? В виджет? Может сразу в БД записать и позже прочитаете в активити из БД.Да, спасибо, в БД - было бы идеально Сначала (для отладки) думал возвращать в какое-нибудь TextView заголовок и тело письма, но выяснил, что из отдельного потока это будет сделать проблематично :) wadman , То есть, messages[1].getContent() == NULL а я к нему применяю метод .toString() который из-за этого и вылетает? Переделал код следующим образом: переделанный код AsyncTask Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69.
При вызове .getContent() любым из способов Код: plaintext 1.
та же ошибка Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Получается ошибка где-то внутри методов JavaMail API? Письмо-то есть... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 18:03 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Bryk_AlienСначала (для отладки) для отладки пиши Lod.debug("тра та та" Это работает и из потоков. Смотреть в AS в окошке логов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 21:10 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Докопал я до следующего: Message.getContent() вызывает метод getContent() описанный в классе MimeMessage.class MimeMessage.getContent() Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
В методе MimeMessage.getContent() происходит вызов другого метода: this.getDataHandler() , описанный в классе IMAPMessage.class IMAPMessage.getDataHandler() Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
getDataHandler() в том же классе вызывает this.loadBODYSTRUCTURE() : IMAPMessage.loadBODYSTRUCTURE() Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
В котором происходит инициализация переменной bs , имеющей тип BODYSTRUCTURE Сам класс BODYSTRUCTURE имеет переменную "public ParameterList cParams ", которая заполняется методом parseParameters BODYSTRUCTURE.parseParameters Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
У меня parseParameters получает на вход набор символов: Код: plaintext 1. 2. 3.
Я разбил на строки, чтобы всем было удобнее читать. Так вот, в моём случае парсинг проходит 3 раза, получая значения name и value: 1) name = "charset", value = "utf-8" 2) name = "charset", value = "utf-8" 3) name = "boundary", value = NULL И вот в третьем случае, когда происходит list.set(name, value); и появляется эта ошибка: Method threw 'java.lang.NullPointerException' exception. Cannot evaluate javax.mail.internet.ParameterList.toString() Соответственно ошибка наследуется в getDataHandler(), когда происходит инициализация Код: plaintext
Ну и вываливается в конце концов в getDataHandler() в следующей строке на операции this.type = ct.toString(); ContentType.toString() Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
И получаем многострадальную Код: plaintext
Я кончил. Если у Вас будут идеи как это лечить, я с благодарностью готов их испытать Хотя бы узнать, это ошибка в полученной информации о письме (см. FETCH BODYSTRUCTURE ) или глюки в самом JavaMail API и стоит подправить класс? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 23:31 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Скорее всего проблема в BODYSTRUCTURE, так как я всячески нахожу примеры, где рядом с "boundary" находится какое-то значение: Код: plaintext 1. 2. 3.
А у меня там NIL ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2017, 23:43 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Bryk_Alienили глюки в самом JavaMail API и стоит подправить класс? Как же у других-то работает и глюк до сих пор никто не заметил? :) https://github.com/anistark/EmailReader/blob/master/src/com/stark/emailreader/EmailReaderActivity.java посмотри тут, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2017, 09:10 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
wadman , проблема, как мне кажется, кроется в BODYSTRUCTURE Проверяю почту на GMail: Код: plaintext 1. 2. 3.
И никакой ошибки не происходит! а с mail.ru: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
И получаю ошибку при заполнении параметра ParameterList ------------------------ пример не заработал, код смотрел, застрял на непонятном optionReader = new BufferedReader(new InputStreamReader(System.in)); с ходу не разобрался что это - в течении дня постараюсь вникнуть ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2017, 12:28 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Bryk_Alienкод смотрел, застрял на непонятном optionReader = new BufferedReader(new InputStreamReader(System.in)); https://developer.android.com/reference/java/lang/System.html ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2017, 13:03 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Оставил в Работе запрос, может кто внесёт изменения в mail.jar да я проверю. А так, видимо, придётся создавать ящики на gmail.com , так как mail.ru часто возвращает в структуре письма параметр ("boundary" NIL) А Javamail API от этого вылетает ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2017, 18:55 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
AndroidNeedHelpОставил в Работе запрос, может кто внесёт изменения в mail.jar да я проверю. Там поглумятся (как показывает опыт) и все... Вот, 100% работающий со всеми сервисами майлер, довольно известный https://github.com/k9mail/k-9/tree/master/k9mail-library/src/main/java/com/fsck/k9/mail ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2017, 09:01 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
wadman, Спасибо, большое! Сейчас поставлю, отпишусь о результатах! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2017, 09:12 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Итак, проблема решена. Действительно, был глюк в Javamail API, который исправили в более поздних версиях. Я скачал 1.6.0-rc1 Выложу на всякий случай примеры для AndroidStudio: В папку libs нужно закинуть файлы: Код: plaintext 1. 2.
пример build.gradle Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
activity_main.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89.
MainActivity.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104.
CheckingPop3.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
CheckingIMAP.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2017, 15:51 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
AndroidNeedHelpТак же надо не забыть прописать их в build.gradle: он разве сам не качает, если строчки прописать? Т.е. никаких jar файлов искать не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2017, 17:36 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
AndroidNeedHelpДействительно, был глюк в Javamail API, который исправили в более поздних версиях. Я скачал 1.6.0-rc1 Выложу на всякий случай примеры для AndroidStudio: Дак тебе стоит почитать про gradle и как в нем подключать. При подключении как раз указывается версия, которая автоматом подхватывается. Можно указать и "выше такой-то" версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2017, 09:00 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
AndroidNeedHelp Код: java 1. 2. 3. 4.
Эта одна строка включает три нижние. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2017, 09:02 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
wadman, Спасибо, я не знал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2017, 10:17 |
|
AndroidStudio - Java Mail API - скачать письмо
|
|||
---|---|---|---|
#18+
Я оставлю для случайного посетителя ещё и следующую информацию: Если не получается получить тело письма конструкцией Код: java 1. 2. 3. 4. 5.
а вместо этого Вы получаете ошибку: Код: plaintext 1. 2.
Описание ошибки нашёл тут : авторQ: When reading a multipart message, why is the getContent method returning an IMAPInputStream (or SharedByteArrayInputStream) instead of a MimeMultipart object? A: This usually happens because the JavaBeans Activation Framework (JAF) can't find the mailcap configuration file included in the mail.jar file. JAF uses the thread's context class loader to look for the configuration file. If the context class loader is not set properly, this can fail. Most application servers should set the context class loader properly, but at least some versions of Tomcat do not. One workaround is to put the mail.jar file in Tomcat's lib directory instead of including it in the war file. Another workaround is to add code such as the following to the beginning of your application: > Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); And of course you should always make sure the message you're dealing with is a multipart message before calling the getContent method, using something like > if (msg.isMimeType("multipart/*")) as described above and in this example. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2017, 10:42 |
|
|
start [/forum/topic.php?fid=13&msg=39447810&tid=1330984]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 187ms |
0 / 0 |