# JavaMail SMTP Connection



## p_alp1 (13. Jul 2015)

Hallo zusammen.

Ich versuche gerade in einer Webanwendung eine Konfigurationsseite für einen SMTP-Server zu schreiben. Die Oberfläche steht bereits. Allerdings funktioniert die Programmlogik noch nicht so, wie ich mir das dachte. Vom Prinzip her soll es so ablaufen, wie z.B. bei Thunderbird. Ich geben meine Email-Adresse/Benutzername, Passwort, SMTP-Hostname und den Port ein und kann dann die Verbindung testen, bevor ich sie abspeicher. Hier mal mein Code, den ich bisher habe: 


```
public class SMTPConnection {
       
    public boolean testConnection (String account, String hostname, String password, int port) {               
        try {
            Properties props = new Properties();
                       
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.auth", "true");
            
            Session session = Session.getInstance(props, null);
            session.setDebug(true);
            Transport transport = session.getTransport("smtp");           
            transport.connect(hostname, port, account, password);
            transport.close();
            System.out.println("success");
        } catch (AuthenticationFailedException e) {
            System.out.println("AuthenticationFailedException - for authentication failures");
            e.printStackTrace();
            return false;
        } catch (MessagingException e) {
            System.out.println("for other failures");
            e.printStackTrace();
            return false;
        }
     }
     return true;
}
```

Gebe ich jetzt z.B. meine Zugangsdaten für mein Gmail-Konto ein (smtp.gmail.com, Port: 587) dann funktioniert alles bestens. Gebe ich jetzt die Daten meines anderen Mail-Kontos ein (smtp.andererServer.com, Port: 25; der Server nutzt Port 25 für TLS) ein und ich weiß 100%ig, dass die ALLE Daten korrekt sind, funktioniert es nicht. Ich hab echt keinen Schimmer woran es liegt.  Ich würde mich echt über Hilfe freuen, um eine Lösung zu bekommen, die Allgemein gültig ist und mit allen Eingaben umgehen kann. 

Viele Grüße und schonmal vielen Dank für jegliche Unterstützung!


----------



## Dompteur (13. Jul 2015)

Kannst du das "funktioniert es nicht" etwas näher erläutern ?
Was passiert genau ? Gibt es eine Fehlermeldung, einen Stacktrace, .. ?


----------



## p_alp1 (14. Jul 2015)

Ich habe hier mal den DEBUG-Output der SMTP-Session: 


```
DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.xxxxx.de", port 25, isSSL false
```

...und hier noch den zugehörigen Stacktrace:


```
javax.mail.MessagingException: Could not connect to SMTP host: smtp.xxxxx.de, port: 25;
  nested exception is:
    java.net.ConnectException: Connection timed out: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
    at javax.mail.Service.connect(Service.java:295)
    at SMTPConnection.testConnection(SMTPConnection.java:13)  
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
    ... 4 more
```

Prinzipiell sieht es ja so aus, als wenn er den Server nicht erreichen kann. Allerdings wenn ich mich zu dem SMTP-Server über meine Mail-App auf dem Handy bzw. über Thunderbird am Rechner anmelde, gibt es überhaupt keine Probleme. 

Und noch eine Frage bzgl. meines Codes. Kann dieser allgemein genutzt werden, um sich zu jeglichem SMTP-Server zu verbinden? Besonders im Hinblick auf die Verschlüsselung (ohne, SSL oder TLS).
Quasi wirklich so, wie wenn man seinen Mailclient hat und dort die Serverkonfiguration eingibt. 

Grüße!


----------

