Mails per IMAP/POP3 empfangen

  • Antworten:7
  • Bentwortet
xxx
  • Forum-Beiträge: 25

20.02.2015, 14:15:39 via Website

Ich bekomme das in der Android-App nicht zum laufen. Sie bricht immer bei der Anweisung "store.connect(...)" ab. Als Java-Application funktioniert es. Habe schon diverse Beispiele probiert, alle mit dem gleichen Ergebnis.
Senden von Mails über JavaMail funktioniert vom Smartphone einwandfrei.

...
private Session session;
private Store store;
Properties props = System.getProperties();
try {
session = Session.getDefaultInstance(props, null);
store = session.getStore("imaps");
store.connect("imap.gmail.com", "...user...", "...password...");
...

teilweise ergänzt um

props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.host", "imap.gmail.com");
props.setProperty("mail.imaps.port", "993");

In der Java-Umgebung ist die javax.mail.jar und der Android-Umgebung sind dafür activation, additionnal und mail.jar installiert. in Androidmanifest ist <uses-permission android:name="android.permission.INTERNET"/>eingetragen.

02-20 13:47:39.882: E/readMail(22273): Not connected
02-20 13:47:39.882: E/readMail(22273): java.lang.IllegalStateException: Not connected
02-20 13:47:39.882: E/readMail(22273): at com.sun.mail.imap.IMAPStore.checkConnected(IMAPStore.java:1493)
02-20 13:47:39.882: E/readMail(22273): at com.sun.mail.imap.IMAPStore.getFolder(IMAPStore.java:1324)

bzw.

02-19 15:52:48.723: W/System.err(31147): javax.mail.MessagingException: Couldn't connect using "javax.net.ssl.SSLSocketFactory" socket factory to host, port: imap.googlemail.com, 993;

Ich entwickle unter eclipse und API19, habe aber auch andere Versionen und unterschiedliche Smartphones probiert. Jetzt habe ich keine Idee mehr. Bin dankbar für ein funktionsfähiges Beispiel.

— geändert am 20.02.2015, 14:16:35

Antworten
xxx
  • Forum-Beiträge: 25

20.02.2015, 14:47:04 via Website

Danke, diesen und viele andere gleichartige habe ich ohne Erfolg gelesen. Dieser behandelt speziell den eMail-Versand und der läuft ja schon problemlos, obwohl das nach meiner Einschätzung der kompliziertere Teil sein sollte.

— geändert am 20.02.2015, 14:47:28

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

20.02.2015, 15:04:12 via Website

Wenn du dir sicher bist, dass du die Jars richtig eingebunden hast, dann poste mal die vollständige Exception.
In welcher Zeile deinens Codes tritt diese auf?
an der store.connect()?

Bist du dir sicher dass diese Libs android geeignet sind?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
xxx
  • Forum-Beiträge: 25

20.02.2015, 15:25:01 via Website

02-20 13:48:44.480: W/System.err(22273): android.os.NetworkOnMainThreadException
02-20 13:48:44.492: W/System.err(22273): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
02-20 13:48:44.492: W/System.err(22273): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
02-20 13:48:44.492: W/System.err(22273): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
02-20 13:48:44.492: W/System.err(22273): at java.net.InetAddress.getByName(InetAddress.java:289)
02-20 13:48:44.492: W/System.err(22273): at java.net.InetSocketAddress.(InetSocketAddress.java:105)
02-20 13:48:44.492: W/System.err(22273): at java.net.InetSocketAddress.(InetSocketAddress.java:90)
02-20 13:48:44.492: W/System.err(22273): at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
02-20 13:48:44.499: W/System.err(22273): at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
02-20 13:48:44.503: W/System.err(22273): at com.sun.mail.iap.Protocol.(Protocol.java:107)
02-20 13:48:44.503: W/System.err(22273): at com.sun.mail.imap.protocol.IMAPProtocol.(IMAPProtocol.java:104)
02-20 13:48:44.503: W/System.err(22273): at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:538)
02-20 13:48:44.503: W/System.err(22273): at javax.mail.Service.connect(Service.java:288)
02-20 13:48:44.503: W/System.err(22273): at javax.mail.Service.connect(Service.java:169)
02-20 13:48:44.503: W/System.err(22273): at com.example.test5c.GMailReader.(GMailReader.java:110)
02-20 13:48:44.503: W/System.err(22273): at com.example.test5c.MainActivity.onCreate(MainActivity.java:48)
02-20 13:48:44.507: W/System.err(22273): at android.app.Activity.performCreate(Activity.java:5231)
02-20 13:48:44.507: W/System.err(22273): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-20 13:48:44.507: W/System.err(22273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
02-20 13:48:44.511: W/System.err(22273): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
02-20 13:48:44.511: W/System.err(22273): at android.app.ActivityThread.access$800(ActivityThread.java:144)
02-20 13:48:44.511: W/System.err(22273): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
02-20 13:48:44.511: W/System.err(22273): at android.os.Handler.dispatchMessage(Handler.java:102)
02-20 13:48:44.511: W/System.err(22273): at android.os.Looper.loop(Looper.java:136)
02-20 13:48:44.511: W/System.err(22273): at android.app.ActivityThread.main(ActivityThread.java:5146)
02-20 13:48:44.511: W/System.err(22273): at java.lang.reflect.Method.invokeNative(Native Method)
02-20 13:48:44.511: W/System.err(22273): at java.lang.reflect.Method.invoke(Method.java:515)
02-20 13:48:44.523: W/System.err(22273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
02-20 13:48:44.523: W/System.err(22273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
02-20 13:48:44.523: W/System.err(22273): at dalvik.system.NativeStart.main(Native Method)

02-20 13:48:44.531: E/readMail(22273): Not connected
02-20 13:48:44.531: E/readMail(22273): java.lang.IllegalStateException: Not connected
02-20 13:48:44.531: E/readMail(22273): at com.sun.mail.imap.IMAPStore.checkConnected(IMAPStore.java:1493)
02-20 13:48:44.531: E/readMail(22273): at com.sun.mail.imap.IMAPStore.getFolder(IMAPStore.java:1324)
02-20 13:48:44.531: E/readMail(22273): at com.example.test5c.GMailReader.readMail(GMailReader.java:137)
02-20 13:48:44.531: E/readMail(22273): at com.example.test5c.MainActivity.onCreate(MainActivity.java:51)
02-20 13:48:44.531: E/readMail(22273): at android.app.Activity.performCreate(Activity.java:5231)
02-20 13:48:44.531: E/readMail(22273): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-20 13:48:44.531: E/readMail(22273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
02-20 13:48:44.531: E/readMail(22273): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
02-20 13:48:44.531: E/readMail(22273): at android.app.ActivityThread.access$800(ActivityThread.java:144)
02-20 13:48:44.531: E/readMail(22273): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
02-20 13:48:44.531: E/readMail(22273): at android.os.Handler.dispatchMessage(Handler.java:102)
02-20 13:48:44.531: E/readMail(22273): at android.os.Looper.loop(Looper.java:136)
02-20 13:48:44.531: E/readMail(22273): at android.app.ActivityThread.main(ActivityThread.java:5146)
02-20 13:48:44.531: E/readMail(22273): at java.lang.reflect.Method.invokeNative(Native Method)
02-20 13:48:44.531: E/readMail(22273): at java.lang.reflect.Method.invoke(Method.java:515)
02-20 13:48:44.531: E/readMail(22273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
02-20 13:48:44.531: E/readMail(22273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
02-20 13:48:44.531: E/readMail(22273): at dalvik.system.NativeStart.main(Native Method)

Ja tritt bei dieser Anweisung auf.
Es ist mein Kenntnisstand, dass diese Jars für Android sind und als Ersatz für die javax.mail.jar dienen. Sie beinhalten auf die entsprechenden Klassen. Habe es naturlich auch mit der javax.mail.jar (ohne Erfolg) probiert.

Die Beispiele sind vorwiegend für Java, aber es wird auch davon berichtet, dass sie unter Android funktionieren. Deswegen, die Ergänzungen.

— geändert am 20.02.2015, 15:27:15

Antworten
Sven R.
  • Forum-Beiträge: 1.904

20.02.2015, 16:09:43 via Website

xxx

02-20 13:48:44.480: W/System.err(22273): android.os.NetworkOnMainThreadException

Das reicht schon. Das habe ich mir auch gedacht, als du gesagt hast, dass die Logik als normale Java-Application läuft.

Also: NetworkOnMainThreadException. In einer Android-App darf kein Netzwerkzugriff(z.B. E-Mail versenden) im Ui-/MainThread passieren. Ein Zugriff muss immer in einem eigenen Thread ablaufen.
Ein ganz normaler Java-Thread reicht, kann aber nicht so viel Komfort wie ein AsyncTask bieten.

AsyncTask: http://developer.android.com/reference/android/os/AsyncTask.html
Modifizierter Async Task von RoboGuice(finde ich viel besser weil Exception-Handling, onFinally, optionales automatisches Abbrechen des Tasks beim Beenden der Activity und mehr): https://github.com/roboguice/roboguice/wiki/Working-with-RoboAsyncTask

— geändert am 20.02.2015, 16:10:45

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

20.02.2015, 16:10:21 via Website

Dachte ich mir, die libs sind nicht für Android geeignet da:

android.os.NetworkOnMainThreadException
Du darfst keine Netzwerkaktivitäten im MainThread machen.
Ab mesten du lagerst ds mal in einen anderen Thread aus.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
xxx
  • Forum-Beiträge: 25

21.02.2015, 14:49:18 via Website

Danke für den Hinweis. Nach Umstellung auf AsyncTask funktioniert es.

Antworten