# JavaMail STARTTLS



## homedom (5. Okt 2011)

Hallo,
ich sitze bereits den ganzen Tag daran herauszufinden, wie ich JavaMail bei einer POP3 oder IMAP Verbindung beibringen kann die Verbindung über STARTTLS zu verschlüsseln. Die Properties Option kenne ich, nur leider bewirkt diese bei mir nichts (Netzwerkverkehr durch Wireshark beobachtet). JavaMail sendet das POP3 Kommando STLS erst gar nicht. Hier soweit mein Sessionaufbau:


```
props.setProperty("mail.store.protocol", protokoll);
    props.setProperty("mail." + protokoll + ".starttls.enable", "true");
    props.setProperty("mail." + protokoll + ".socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.setProperty("mail." + protokoll + ".socketFactory.fallback", "false");
    props.setProperty("mail." + protokoll + ".socketFactory.port", port);
    props.setProperty("mail." + protokoll + ".port", port);

session = Session.getInstance(props);
```

Auch wenn ich noch mail.pop3.starttls.required dazu nehm passiert nichts. Kann mir jemand helfen? Im Internet finde ich immer nur was zu SMTP und starttls, da funktioniert es bei mir aber auch.

Gruß, homedom


----------



## XHelp (5. Okt 2011)

Auszug aus der API:


> Note that an appropriate trust store must configured so that the client will trust the server's certificate


Außerdem würde ich noch mit 
	
	
	
	





```
mail.pop3.starttls.required
```
 probieren


----------



## homedom (5. Okt 2011)

> Auch wenn ich noch mail.pop3.starttls.required dazu nehm passiert nichts.



Was mich auch wundert, denn nach Dokumentation der API sollte store.connect() dann eine Exception werfen. Das mit dem Trust Store habe ich auch zur Kenntnis genommen. Da er aber auch alle SSL Zertifikate meiner Server akzeptiert dachte ich, dass ich mir das sparen kann. Habe es auch mit :

```
props.setProperty("mail.pop3.ssl.trust", "*");
```
 versucht. Wie kann ich denn zum Testen so einen eigenen truststore erstellen?

gruß, homedom


----------



## XHelp (5. Okt 2011)

Da muss ich passen. Aber ich bin mir ziemlich sicher, dass trust-store eine Datei ist, so dass * nichts bringen sollte.


----------



## homedom (5. Okt 2011)

Also ich bin mir ziemlich sicher, dass es nicht am truststore liegen kann, da SMTP mit STARTTLS funktioniert. Das mit dem '*' ist nicht der truststore sondern eine andere Option der JavaMail properties. Ich hoffe mir kann noch jemand helfen da eine unverschlüsselte Übertragung (wenn ein Server kein SSL unterstützt) sehr unschön in der heutigen Zeit ist. Danke schonmal,

EDIT: Ich sollte noch dazu sagen dass das Ganze als Webapplikation auf einem Jboss läuft. Ich habe eben nämlich mal meinen Code in einem normalen Programm ausprobiert und dort klappt das. Leider löst das mir aber nicht mein Problem. Hat vielleicht jetzt jemand eine Idee? Danke

gruß, homedom


----------



## HoaX (5. Okt 2011)

debug bei JavaMail einschalten und kucken.


----------



## homedom (5. Okt 2011)

Da steht leider nur das selbe wie im Wireshark Protokoll. Ich hab 1:1 den selben Code wie aus dem "normalen" Programm genommen. Scheint wohl irgendwie am JBoss zu liegen. Habe auch den truststore von einer JRE angegeben, ohne Erfolg (aber ich glaube immer noch dass es nicht daran liegen kann). Wenn noch jemand Ideen hat bin ich über jeden Vorschlag dankbar.

EDIT: So, das ganze hat sich nun aufgeklärt. Das Problem war die JBoss-Jar-Hölle. Der JBoss bringt sein eigenes JavaMail-jar-File mit sich. Leider scheint dieses etwas veraltet gewesen zu sein (JBoss 5). Nach dem ersetzten von /common/lib/mail.jar durch die neueste Version der JavaMail Api klappt nun auch STARTTLS. Danke an euch für eure Tips. (Ich hoffe durch die Schilderung bleibt anderen mit selben Problem eine lange Suche erspart)

gruß, homedom


----------

