Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
18 / 13 / 5
Регистрация: 08.01.2016
Сообщений: 315

Получить почту

17.06.2017, 15:17. Показов 2312. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди добрые, подскажите, плиз, как реализовать получение почты с mail.ru (без разницы с какого протокола IMAP или POP3)?
Использую следующий класс, который нашел в Инете (библиотеку javax добавил, в 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
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
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
 
import java.util.Properties;
 
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.security.auth.Subject;
 
public class CheckingIMAP {
 
 
    public static void check(String host, String storeType, String user, String password) {
 
        try {
 
            //create properties field
            Properties properties = new Properties();
 
            properties.put("mail.imap.host", host);
            properties.put("mail.imap.port", "993");
            properties.put("mail.imap.starttls.enable", "true");
            Session emailSession = Session.getDefaultInstance(properties);
 
            //create the POP3 store object and connect with the pop server
            Store store = emailSession.getStore(storeType);
 
            store.connect(host, user, password);
 
            //create the folder object and open it
            Folder emailFolder = store.getFolder("INBOX");
            emailFolder.open(Folder.READ_ONLY);
 
            // retrieve the messages from the folder in an array and print it
            Message[] messages = emailFolder.getMessages();
            //System.out.println("messages.length---" + messages.length);
            MainActivity.sReturnMailsInfo = MainActivity.sReturnMailsInfo + messages[0];
 
            for (int i = 0, n = messages.length; i < n; i++) {
                Message message = messages[i];
 
                // Выводим на главный экран
                MainActivity.sReturnMailsInfo = MainActivity.sReturnMailsInfo + "---------------------------------\n";
                MainActivity.sReturnMailsInfo = MainActivity.sReturnMailsInfo + "Email Number " + (i + 1) + "\n";
                MainActivity.sReturnMailsInfo = MainActivity.sReturnMailsInfo + "Subject: " + message.getSubject() + "\n";
 
 
            }
 
 
            //close the store and folder objects
            emailFolder.close(false);
            store.close();
 
        } catch (NoSuchProviderException e) {
            Log.e("MyErr", "Ошибка в NoSuchProviderException.", e);
        } catch (MessagingException e) {
            Log.e("MyErr", "Ошибка в MessagingException.", e);
        } catch (Exception e) {
            Log.e("MyErr", "Неизвестная ошибка!!!", e);
        }
 
    }
 
 
 
 
}
Данный метод chek в классе CheckingIMAP запускаю с MainActivity с нужными параметрами.
По идее, этот класс должен вернуть в переменную sReturnMailsInfo зарегенную в MainActivity.java данные о письме (в почте висит только одно письмо) поэтому размер массива messages будет равен 0.

При выполнении требований строки store.connect(host, user, password) выводит исключение "Неизвестная ошибка".
Подскажите, как это исправить, либо, пожалуйста, скиньте рабочий код получения почты, причем не обязательно, чтобы это был JavaMail (javax). Я просто не знаю, может есть способ проще получить почту.

Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.06.2017, 15:17
Ответы с готовыми решениями:

Получить почту с сервера
Люди прошу помощи, в написании кода по получению почты с сервера. Вы пошлете меня гуглить? Но увы, задолбался искать, куча примеров по...

Получить почту по протоколу POP3
Всем привет! Люди добрые, подскажите, возможно ли читать почту средствами vb.net? Если да, то пните в нужную сторону или подскажите где...

MailKit/Imap получить почту
Пробую получить почту с помощью библиотек MailKit, все что нашел и понял из исходников в интернете это using (var client = new...

6
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
18.06.2017, 10:21
Код вызывает чувство, что чего-то не хватает.
Попробуйте Gmail API от гугла для андроида - https://developers.google.com/... roid?hl=ru
0
18 / 13 / 5
Регистрация: 08.01.2016
Сообщений: 315
18.06.2017, 13:23  [ТС]
cyb0rg_01, Млин, не получается. Gmail че-то вообще для меня трудно дается. В JavaMail я хоть смысл понимаю.
Я уже кучу кодов попробовал, и сам старался, писал. Все равно не получается... вылетает на store.connect. Может какое-то разрешение нужно в Манифест? Если б я еше смысл ошибки понял, может че-нить сам придумал бы. В общем, своими силами мне до истины не добраться.

E/AndroidRuntime: FATAL EXCEPTION: main

java.lang.RuntimeException: Unable to start activity ComponentInfo{***.emailtest.MainActivity }: android.os.NetworkOnMainThreadException
at android.app.ActivityThread.performLaunch Activity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchA ctivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessa ge(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handl er.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(Activity Thread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:755)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardP olicy.onNetwork(StrictMode.java:1303)
at java.net.Inet6AddressImpl.lookupHostByNa me(Inet6AddressImpl.java:86)
at java.net.Inet6AddressImpl.lookupAllHostA ddr(Inet6AddressImpl.java:74)
at java.net.InetAddress.getByName(InetAddre ss.java:708)
at javax.mail.URLName.getHostAddress(URLNam e.java:520)
at javax.mail.URLName.hashCode(URLName.java :496)
at java.util.Hashtable.hash(Hashtable.java: 172)
at java.util.Hashtable.get(Hashtable.java:3 66)
at javax.mail.Session.getPasswordAuthentica tion(Session.java:889)
at javax.mail.Service.connect(Service.java: 349)
at javax.mail.Service.connect(Service.java: 246)
at javax.mail.Service.connect(Service.java: 195)
at com.advokatproo.emailtest.MailReceiving. receiveMessage(MailReceiving.java:36)
at com.advokatproo.emailtest.MainActivity.o nCreate(MainActivity.java:54)
at android.app.Activity.performCreate(Activ ity.java:6662)
at android.app.Instrumentation.callActivity OnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunch Activity(ActivityThread.java:2599)
at android.app.ActivityThread.handleLaunchA ctivity(ActivityThread.java:2707)*
at android.app.ActivityThread.-wrap12(ActivityThread.java)*
at android.app.ActivityThread$H.handleMessa ge(ActivityThread.java:1460)*
at android.os.Handler.dispatchMessage(Handl er.java:102)*
at android.os.Looper.loop(Looper.java:154)*
at android.app.ActivityThread.main(Activity Thread.java:6077)*
at java.lang.reflect.Method.invoke(Native Method)*
at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:865)*
at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:755)*
0
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
18.06.2017, 14:04
Elkatib, очевидно, что нужно искать инфу по networkonmainthreadexception.
0
18 / 13 / 5
Регистрация: 08.01.2016
Сообщений: 315
18.06.2017, 16:46  [ТС]
cyb0rg_01, Я так понял, что сложные процедуры надо выводить в отдельные потоки. Попробовал Thread, AsyncTask - не помогает.
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
19.06.2017, 10:05
NetworkOnMainThreadException - говорит что попытка выйти в интернет из UI потока

Добавлено через 1 минуту
Цитата Сообщение от Elkatib Посмотреть сообщение
Попробовал Thread, AsyncTask - не помогает.
как пробуешь?

и что не получается? Ошибка какая?
0
18 / 13 / 5
Регистрация: 08.01.2016
Сообщений: 315
26.06.2017, 01:38  [ТС]
ILNAR_93, положил код получения почты в отдельный поток...
Вызываю с MainActivity:
Java
1
2
GetEmail GM = new GetEmail();
        GM.execute();
Вот код класса - отдельного потока получения почты.
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
import android.os.AsyncTask;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
 
 
public class GetEmail extends AsyncTask<Void, Void, Void> {
    String hostval = "pop.mail.ru";
    String mailStrProt = "pop3";
    String uname = "?????@mail.ru";
    String pwd = "?????";
 
 
    @Override
    protected Void doInBackground(Void... params) {
 
        try {
            //Set property values
            Properties propvals = new Properties();
            propvals.put("mail.pop3.host", hostval);
            propvals.put("mail.pop3.port", "995");
            propvals.put("mail.pop3.starttls.enable", "true");
            Session emailSessionObj = Session.getDefaultInstance(propvals);
            //Create POP3 store object and connect with the server
            Store storeObj = emailSessionObj.getStore("pop3s");
            storeObj.connect(hostval, uname, pwd);
            //Create folder object and open it in read-only mode
            Folder emailFolderObj = storeObj.getFolder("INBOX");
            emailFolderObj.open(Folder.READ_ONLY);
            //Fetch messages from the folder and print in a loop
            Message[] messageobjs = emailFolderObj.getMessages();
 
            for (int i = 0, n = messageobjs.length; i < n; i++) {
                Message indvidualmsg = messageobjs[i];
                //System.out.println("Printing individual messages");
                //System.out.println("No# " + (i + 1));
                MainActivity.TEMP = indvidualmsg.getSubject();
                //System.out.println("Sender: " + indvidualmsg.getFrom()[0]);
                //System.out.println("Content: " + indvidualmsg.getContent().toString());
 
            }
            //Now close all the objects
            emailFolderObj.close(false);
            storeObj.close();
        } catch (NoSuchProviderException exp) {
            exp.printStackTrace();
        } catch (MessagingException exp) {
            exp.printStackTrace();
        } catch (Exception exp) {
            exp.printStackTrace();
        }
        return null;
    }
}
Наконец-то получилось написать рабочий код с помощью буржуйских форумов... но млин с ними очень сложно. С английским туго.
По вышеуказанному коду без проблем получаю тему письма, но как только пытаюсь получить текст письма вот в этой строке:
Java
1
MainActivity.TEKST = indvidualmsg.getContent().toString();
Получаю следующую ошибку:
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1

java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.ja va:318)
at java.util.concurrent.FutureTask.finishCo mpletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setExcep tion(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(Futu reTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.ru n(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/activation/DataHandler;
at dalvik.system.DexFile.defineClassNative( Native Method)
at dalvik.system.DexFile.defineClass(DexFil e.java:299)
at dalvik.system.DexFile.loadClassBinaryNam e(DexFile.java:292)
at dalvik.system.DexPathList.findClass(DexP athList.java:418)
at dalvik.system.BaseDexClassLoader.findCla ss(BaseDexClassLoader.java:54)
at com.android.tools.fd.runtime.Incremental ClassLoader$DelegateClassLoader.findClas s(IncrementalClassLoader.java:90)
at com.android.tools.fd.runtime.Incremental ClassLoader.findClass(IncrementalClassLo ader.java:62)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:380)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:367)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:367)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:312)
at com.sun.mail.pop3.POP3Folder.createMessa ge(POP3Folder.java:384)
at com.sun.mail.pop3.POP3Folder.getMessage( POP3Folder.java:365)
at javax.mail.Folder.getMessages(Folder.jav a:996)
at com.advokatproo.emailtest.GetEmail.doInB ackground(GetEmail.java:40)
at com.advokatproo.emailtest.GetEmail.doInB ackground(GetEmail.java:15)
at android.os.AsyncTask$2.call(AsyncTask.ja va:304)
at java.util.concurrent.FutureTask.run(Futu reTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.ru n(AsyncTask.java:243)*
at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1133)*
at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:607)*
at java.lang.Thread.run(Thread.java:761)*
E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.activation.DataHandler" on path: DexPathList[[dex file
at dalvik.system.BaseDexClassLoader.findCla ss(BaseDexClassLoader.java:56)
at com.android.tools.fd.runtime.Incremental ClassLoader$DelegateClassLoader.findClas s(IncrementalClassLoader.java:90)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:380)
at java.lang.ClassLoader.loadClass(ClassLoa der.java:312)
... 22 more
E/System: Uncaught exception thrown by finalizer
E/System: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.net.Socket.close()' on a null object reference
at com.sun.mail.pop3.Protocol.close(Protoco l.java:376)
at com.sun.mail.pop3.POP3Folder.close(POP3F older.java:296)
at com.sun.mail.pop3.POP3Folder.finalize(PO P3Folder.java:576)
at java.lang.Daemons$FinalizerDaemon.doFina lize(Daemons.java:222)
at java.lang.Daemons$FinalizerDaemon.run(Da emons.java:209)
at java.lang.Thread.run(Thread.java:761)



Помогите, плиз, в чем ошибка??? Может не добавилась какая-та библиотека, ибо я не могу понять, что значит "Не найден класс javax.activation.DataHandler"???

Добавлено через 9 часов 55 минут
Нашел библиотеку activation.jar, но за одно вычитал, что сейчас достаточно добавлять в проект mail.jar... Но на всякий случай попробовал, и теперь вылетает ошибка, что не найдена библиотека java.awt.datatransfer.Transferable, которая вообще отвечает за интерфейс. Я вроде в отдельном потоке элементы интерфейса вообще не трогаю.
Кто-нить подскажите плиз, как получить текст письма без ошибок???????
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2017, 01:38
Помогаю со студенческими работами здесь

Как получить почту методами PHP?
Здравствуйте. Пишу небольшой корппортал и появилась необходимость в получении с почты mail.ru или yandex.ru и дальнейшее отображение писем...

Kerio connect не могу получить почту больше 1 мб
Ребята помогите разобраться ! На керио конект настроен почтовый сервер ! Не могу понять почему я не могу получать письма больше 1 МБ ,...

Каким образом можно программно проверить и получить почту
Не подскажите каким образом можно программно проверить и получить почту? Искал, но негде не нашёл ( везде только отправка, а мне нужно...

Получить почту по протоколу POP3 с помощью библиотеки ActiveUP
Никак не пойму причину ошибки пытаюсь получить почту по протоколу POP3 с помощью библиотеки ActiveUP непрочитанных писем 5707, данный...

Отправить и получить почту без использования почтового клиента
Здравствуйте! Во всех заданиях адрес сервера: 192.168.4.1 Отправить и получить почту без использования почтового клиента (для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru