# [Anfänger] POP3 SSL/TLS



## daWonderer (12. Feb 2016)

Hallo,

ich würde ganz gern eine Verbindung zu einer POP3-Box herstellen zum Herunterladen von Mails mit Attachments. Zum Testen nehme ich eine meiner Mail-Accounts dessen Einstellung im Thunderbird SSL/TLS über Port 995 ist. Das Beispiel welches ich genommen habe ist von Rheinwerk-Computing.

Wenn ich 'Store.getFolder()' aufrufe wird eine Exception ausgelöst mit der Meldung, dass keine Verbindung besteht. Versucht habe ich 'pop3' & 'pop3s' als Provider. Außerdem habe ich mal das mit der SocketFactoryClass weggelassen und 'mail.pop3.starttls.enable' in den Properties verwendet - aber auch ohne Erfolg. Letzter Versuch mit Änderungen war dann verwenden und nicht-verwenden des Authenticators - immer die gleiche Fehler-Meldung.

Kann bitte jmd.helfen und mich auf den richtigen Weg zum Erfolg führen? 


```
public static void main(String[] args) {
        try
        {
            Session sess = getMailSession( "address@freenet.de", "password");
            Store st = sess.getStore( "pop3" );
            Folder fld = st.getFolder("INBOX");
            fld.open( Folder.READ_ONLY );
            int cnt = fld.getMessageCount();
            System.out.print( "Anzahl Nachrichten: ");
            System.out.println(cnt);
            System.in.read();
        }catch(Exception exc)
        {
            System.out.println(exc.getMessage());
            //System.in.read();
        }
        
    }

public static Session getMailSession( String user, String pass )
  {
    final Properties props = new Properties();

    // Zum Empfangen
    props.put( "mail.pop3.host", "mx.freenet.de" );
    props.put( "mail.pop3.user", user );
    props.put( "mail.pop3.password", pass );
    props.put( "mail.pop3.port", "995" );
    props.put( "mail.pop3.auth", "true" );
    //props.put( "mail.pop3.starttls.enable", "true");
    props.setProperty( "mail.pop3.socketFactory.class",
                       "javax.net.ssl.SSLSocketFactory" );
    Session newSess = Session.getInstance( props, new javax.mail.Authenticator() {
      @Override protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication( props.getProperty( "mail.pop3.user" ),
                                           props.getProperty( "mail.pop3.password" ) );
      }
    });
    return newSess;
  }
```


----------



## kneitzel (12. Feb 2016)

Du connectest Dich nicht zu dem Store. Also musst Du noch ein st.connect(); einfügen hinter die Erstellung der st Instanz.

Und die Namen deiner Variablen würde ich noch einmal überdenken. Es bringt nichts hier auf Zwang abzukürzen und so. store statt st. session statt newSess (wieso new? Wo ist denn die old?). Und session statt sess. u.s.w.


----------



## daWonderer (12. Feb 2016)

kneitzel hat gesagt.:


> Du connectest Dich nicht zu dem Store. Also musst Du noch ein st.connect(); einfügen hinter die Erstellung der st Instanz.



Danke für die schnelle Antwort. Ich habe den Connect-Aufruf jetzt mit drin.
Jetzt bekomme ich entweder die Meldung "failed to connect, no password specified?"
wenn ich den Authenticator weglasse, oder mit dem Authenticator im 'getInstance'
passiert an der Code-Zeile des 'connect' gar nichts mehr (Einzelschritt-Debugging)
Keine Antwort vom Server nehme ich an 
Das trifft auf 2 Mailboxes zu mit denen ich getestet habe (Einstellg.aus Thunderbird).
1x Port995 mit SSLSocketFactory in den Properties
1x Port110 ohne SocketFactory in Property - dafür aber mit 'mail.pop3.starttls.enable'



> Und die Namen deiner Variablen würde ich noch einmal überdenken. Es bringt nichts hier auf Zwang abzukürzen <snip...>



Ja, danke. Sollte ich mir angewöhnen damit der Code besser lesbar ist.


----------



## kneitzel (12. Feb 2016)

Also den Authenticator brauchst Du. Aber Deine Fehlerbeschreibung sagt mir jetzt nichts. Was genau passiert? Er hängt im connect? Und nach einiger Zeit kommt ein Timeout? Oder was genau passiert? Im Augenblick sehe ich im Code sonst keine Auffälligkeiten.


----------



## daWonderer (12. Feb 2016)

kneitzel hat gesagt.:


> Also den Authenticator brauchst Du. Aber Deine Fehlerbeschreibung sagt mir jetzt nichts. Was genau passiert? Er hängt im connect? Und nach einiger Zeit kommt ein Timeout?



Auf den Timeout hatte ich nicht gewartet - mit Shift-F8 passiert eine ganze Weile nichts.
Habe jetzt mal länger gewartet und es funktioniert - yay!! 

Beide Inboxes der Mail-Accounts (gmx/freenet) habe ich erfolgreich anfragen können (ohne/mit SSL).

Vielen Dank nochmal!


----------

