[Anfänger] POP3 SSL/TLS

daWonderer

Aktives Mitglied
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? :)

Code:
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;
  }
 
K

kneitzel

Gast
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

Aktives Mitglied
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 o_O
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. :)
 
K

kneitzel

Gast
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

Aktives Mitglied
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!
 

Ähnliche Java Themen

Neue Themen


Oben