# JavaMail - Mailsabrufen Problem (imap)



## Dave (24. Nov 2011)

Guten Tag,


ich bin grade dabei GWT zu üben und bastle an einem Mailprogramm so GWT macht mir da keine Schwierigkeiten genauso wie die Client/Server - Verbindung. Was jedoch rumzickt in das Verbinden auf den Mailserver. Ich bekomem da einen Timeout und weiss nicht warum, ich habe mir einige der Threads hier durchgelesen zu dem Thema aber keine Lösung gefunden :-/

So hier der Verbindungsaufbau:


```
private String imapHost = "imap.gmx.net";

public Store getConnectionStore() {
        Store store = null;
        try {
            // Get system properties
            Properties props = System.getProperties();
            // Mail-Server properties: Session verlangt die Informationen über Host, User, Passwd etc.
            props.setProperty("mail.imaps.host", imapHost);
            props.setProperty("mail.imaps.user", username);
            props.setProperty("mail.imaps.password", password);
            props.setProperty("mail.imaps.auth", "true");
            props.setProperty("mail.imaps.starttls.enable", "true");
            props.setProperty("mail.imaps.socketFactory.port", "993");
            props.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.setProperty("mail.imaps.socketFactory.fallback", "false");
            
            // Initialisierung der Auth-Klasse zur Mail-Account-Authentisierung; in Session benutzt
            MailAuthenticator auth = new MailAuthenticator(username, password);

            // Session: steht für die Verbindung mit dem Mail-Server
            Session session = Session.getDefaultInstance(props, auth);
            // Gibt in der Console Debug-Meldungen zum Verlauf aus
            session.setDebug(true);
            boolean isSSL = true;
            // Store: dient dem zum Ablegen der Nachrichten
            store = isSSL ? session.getStore("imaps") : session.getStore("imap");
            store.connect();
        } catch (NoSuchProviderException e) {
            // TODO Auto-generated catch block
            System.err.println("##### - ConnectingMail(getConnectionStore - 1):");
            e.printStackTrace();
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            System.err.println("##### - ConnectingMail(getConnectionStore - 2):");
            e.printStackTrace();
        }

        return store;
    }
```



und folgendes schmeist die Console raus:


```
DEBUG: setDebug: JavaMail version 1.4.3
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc]
DEBUG: mail.imap.fetchsize: 16384
DEBUG: mail.imap.statuscachetimeout: 1000
DEBUG: mail.imap.appendbuffersize: -1
DEBUG: mail.imap.minidletime: 10
DEBUG: enable STARTTLS
DEBUG: protocolConnect returning false, host=imap.gmx.net, user=****, password=<null>
DEBUG: trying to connect to host "imap.gmx.net", port 993, isSSL true
javax.mail.MessagingException: Connection timed out: connect;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
##### - ConnectingMail(getConnectionStore - 2):
javax.mail.MessagingException: Connection timed out: connect;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
	at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:618)
	at javax.mail.Service.connect(Service.java:313)
	at javax.mail.Service.connect(Service.java:172)
	at javax.mail.Service.connect(Service.java:121)
	at de.echodave.gwt.List.server.mail.ConnectingMail.getConnectionStore(ConnectingMail.java:57)
	at de.echodave.gwt.List.server.AdressServiceImpl.getFolder(AdressServiceImpl.java:71)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:207)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:243)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Caused by: java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:525)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)
	at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:201)
	at com.sun.mail.iap.Protocol.<init>(Protocol.java:109)
	at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:104)
	at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:585)
	... 32 more
##### - ConnectingMail(getFolders):
java.lang.IllegalStateException: Not connected
	at com.sun.mail.imap.IMAPStore.checkConnected(IMAPStore.java:1607)
	at com.sun.mail.imap.IMAPStore.getDefaultFolder(IMAPStore.java:1442)
	at de.echodave.gwt.List.server.mail.ConnectingMail.getFolders(ConnectingMail.java:188)
	at de.echodave.gwt.List.server.AdressServiceImpl.getFolder(AdressServiceImpl.java:74)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:207)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:243)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
erfolgreich: getFolders
```

Hat jemand von euch eine Idee an was es liegt?

Danke )


----------



## hansmueller (24. Nov 2011)

Hallo,

Ich habe zwar noch nie was mit imaps gemacht (sondern nur mit smtp) aber probier mal folgendes:
Kommentier bei dir die Zeile

```
props.setProperty("mail.imaps.starttls.enable", "true");
```
aus und füge folgende Property hinzu:

```
props.put("mail.imaps.ssl.enable", "true");
```

MfG
hansmueller


----------



## AlexSpritze (24. Nov 2011)

Zu der Zeitüberschreitung deiner Verbindung  kann ich nichts sagen. Bei mir im Code steht jedoch unabhängig der Variablen 
	
	
	
	





```
isSSL
```
 immer 
	
	
	
	





```
"mail.imap.*"
```
 bei den Properties. Kann mich da auch an ein paar Probleme erinnern. Versuch das mal ohne das s an imap.

Edit: Das timeout kannst du nebenbei gesagt mit 
	
	
	
	





```
props.setProperty(("mail.imap.connectiontimeout", "120000");
```
 einstellen. Wie lange dauert das Timeout bisher?


----------



## Dave (24. Nov 2011)

Beides probiert, beides bringt leider keinen Erfolg 

Timeout war bis jetzt von mir nicht gesetzt worden also Default, waren gefühlte 10 Sekunden.


noch irgendwelche Vorschläge?


----------



## AlexSpritze (24. Nov 2011)

Ja, laut API gibt es das Property 
	
	
	
	





```
props.setProperty("mail.imap*.password", password);
```
 gar nicht.

Versuche anstatt der parameterlosen Methode 
	
	
	
	





```
connect
```
, 
	
	
	
	





```
connect(String host, int port, String user, String password)
```
. Keine Ahnung, was da der Unterschied sein soll, aber so steht es auch bei mir im Code


----------



## Dave (24. Nov 2011)

Habe die Property auskommentiert und alle vier Varianten des Connects:

```
store.connect();
```


```
store.connect(username, password);
```


```
store.connect(host, username, password);
```


```
store.connect(host, port, username, password);
```

leider ohne Erfolg bleibt beim selben Fehler.


----------



## AlexSpritze (24. Nov 2011)

Gestattet GMX denn den Abruf des Postfaches per IMAP? Ich weiß von Web.de wuerg, dass die nur POP3 erlauben.


----------



## Gast2 (25. Nov 2011)

AlexSpritze hat gesagt.:


> Gestattet GMX denn den Abruf des Postfaches per IMAP? Ich weiß von Web.de wuerg, dass die nur POP3 erlauben.


Bei GMX gibts IMAP erst ab GMX ProMail. (Keine Ahnung obs irgendwem weiterhilft, aber bin hier grad zufäliig über die Frage gestolpert)


----------



## Dave (25. Nov 2011)

Ich versuche es mal mit pop3, sollte aber bei mir gehen da ich ein ProMail-Kunde bin.


----------



## Dave (25. Nov 2011)

Dave hat gesagt.:


> Ich versuche es mal mit pop3, sollte aber bei mir gehen da ich ein ProMail-Kunde bin.



Sorry für Doppelpost, konnte aber nicht mehr editieren.

Also ich habe es mit pop3 mit Propertys und ohne (auch mit imap probiert) und immer kommt die Timeout Fehlermeldung.


Kann es sein dass mein Firmennetzwerk die Verbindung blockiert?


----------



## AlexSpritze (25. Nov 2011)

Eine letzte Idee noch von mir: Versuche mal mit der Console 
	
	
	
	





```
telnet imap.gmx.net 143
```
 oder mit IMAPS Portnummer 993. Mal sehen, ob du da auch ein Timeout bekommst.


----------



## Dave (25. Nov 2011)

Habe es gemacht und mehrere Tests durchgeführt auch mit einem anderem Anbieter (iCloud), alle haben Timeouts bekommen (jeder Eintrag dauerte ca. 2-3 Minuten).

Ich versuch mal rauszukriegen welche Ports die Firewall blockiert...


```
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>telnet imap.gmx.net 143
Connecting To imap.gmx.net...Could not open connection to the host, on port 143:
 Connect failed

C:\>telnet imaps.gmx.net 993
Connecting To imaps.gmx.net...Could not open connection to the host, on port 993
: Connect failed

C:\>telnet pop.gmx.net 110
Connecting To pop.gmx.net...Could not open connection to the host, on port 110:
Connect failed

C:\>telnet imap.mail.me.com 993
Connecting To imap.mail.me.com...Could not open connection to the host, on port
993: Connect failed

C:\>telnet imap.mail.me.com 143
Connecting To imap.mail.me.com...Could not open connection to the host, on port
143: Connect failed

C:\>telnet imaps.mail.me.com 993
Connecting To imaps.mail.me.com...Could not open connection to the host, on port
 993: Connect failed

C:\>telnet imaps.mail.me.com 993
Connecting To imaps.mail.me.com...Could not open connection to the host, on port
 993: Connect failed

C:\>
```


Edit:

:-/ alles klar es scheint so als ob nur der 80er Port frei ist.....

ich teste den Code bei mir zuhause ob er da gehen wird.


----------



## Dave (6. Dez 2011)

Ok Habe es jetzt endlich geschaft zuhause zu probieren, da gings ohne Probleme, also liegt es vermutlich an den Ports die nicht freigeschaltet sind bei mit im Betrieb ;-)


----------

