# JavaMail funktioniert nicht immer



## Carsten315 (25. Feb 2014)

Hallo!
Ich versuche seit mehreren Tagen ein Problem mit JavaMail zu lösen. (Googeln über mehrere Tage hat nicht geholfen. Ich habe schon die gesamte Anleitung von Oracle bzgl. SSL gelesen - aber ich verstehe es scheinbar nicht...)
Also, es wäre schön, wenn mir jemand helfen könnte...

Folgenden Code verwende ich für das Versenden von eMails über SMTP:

```
Properties props = System.getProperties();
props.put("mail.smtp.host", SMTP);
props.put("mail.smtp.socketFactory.port", Port);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", Port);
props.put("mail.smtp.user", Adresse);
props.put("mail.password", Passwort);

javax.mail.Authenticator auth = new javax.mail.Authenticator() {
	@Override
	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(Adresse, Passwort);
	}
};
Session session = Session.getInstance(props, auth);
Message msg = new MimeMessage(session);
try {
	msg.setFrom(new InternetAddress(Adresse, Adresse));
	msg.addRecipient(Message.RecipientType.TO, new InternetAddress(
			"to@web.de"));
	msg.addRecipient(Message.RecipientType.CC, new InternetAddress(
			"tocck@web.de"));
	msg.setSubject("SUBJECT");
	msg.setText("THE MESSAGE");
	msg.saveChanges();
	Transport.send(msg);
} catch (UnsupportedEncodingException e) {
	Log.d("Error","Error: " + String.valueOf(e));
	e.printStackTrace();
} catch (MessagingException e) {
	Log.d("Error", "Error: " + String.valueOf(e));
	e.printStackTrace();
}
```

Dieser funktioniert bei web.de, firemail.de, gmail. Aber nicht bei z.B. gmx.de.
Folgende Fehlermeldung (Log) kommt bei gmx.de (SMTP: mail.gmx.net, Port "587"):
*D/Error(27096): Error: javax.mail.AuthenticationFailedException: 535 Authentication credentials invalid
*

Ich habe verschiedene Ports und verschiedene SMTP-Einstellungen vorgenommen.

Ich habe schon sämtliche Möglichkeiten auch in Bezug auf SSL und Verwenden von smtps versucht. Es kommt immer wieder zu Fehlermeldungen.
Was kann ich noch machen, dass dieser Code generell funktioniert. Ich glaube, dass ich SSL verwenden muss. Zumal ich von web.de auch schon die Mail bekommen habe, dass in Zukunft nur noch SSL-Verschlüsselung erlaubt ist.
Aber auch zum Beispiel folgender Block funktioniert nicht:

```
Properties props = System.getProperties();
props.put("mail.host", SMTP);
props.put("mail.transport.protocol", "smtps");
props.put("mail.smtps.auth", "true");
props.put("mail.smtps.port", Port);
props.put("mail.smtps.ssl.trust", SMTP);
```

Welche Einstellungen brauche ich?

Ich freue mich über Antworten!!!

Carsten


----------



## Sen-Mithrarin (25. Feb 2014)

ich glaub ich hau gleich mit dem kopf DURCH den tisch

alleine die aussage "tagelanges googlen" halt ich schon mal für mehr als nur gelogen ...
wenn ich nach "java mail tutorial" suche kommt als erstes ergebnis das hier : E-Mails mit JavaMail versenden @ tutorials.de: Tutorial, Anleitung & Hilfe
zwar lange her das ichs mal zusammengebastelt habe ... aber dafür top-ergebnis bei google und mit mitlerweile 25k klicks und bewertung 5/5 mein bisher bester post
(ja, an alle kleinen kiddies : wer es nich glauben will muss es auch nich; ich weis das ichs selbst geschrieben hab)

nicht nur das ich dort wirklich jede zeile einzeln erklärt habe ... würde vielleicht auch mal ein blick in die DOC reichen

public static void Transport.send(Message)


> Note that send is a static method that creates and manages its own connection. Any connection associated with any Transport instance used to invoke this method is ignored and not used. This method should only be invoked using the form Transport.send(msg);, and should never be invoked using an instance variable.



ergo : du kannst dir deine Session und Message zusammenbauen wie du willst ... Transport.send() baut sich seinen eigenen kram



und das GMX und Web.DE zwangsweise auf SSL/TLS umstellen liegt daran das sie 100% zu UnitedInternet ... oder besser bekannt als : 1&1 ... gehören
aber da ne insider-info : wird frühestens ende 2tes quartal umgesetzt ... hast also noch zeit



so ... und wenn du mit meinem code immer noch fehler bekommst liegts an deinem system ...
kann man unter anderem auch daran fest machen weil der mail-server für gmx, web.de, 1&1, freenet, strato und einige weitere aufgekaufte ein und selbe maschine (bzw der gleiche cluster) ist ...


----------



## Carsten315 (26. Feb 2014)

Hallo Sen-Mithrarin!

Vorab vielen Dank für Deine Antwort!!

Dein Tutorial ist sicherlich sehr gut – und es war daher auch eine der ersten Seiten, die ich gefunden habe! Allerdings hatte ich ursprünglich das Problem, dass ich bei der Programmierung des Android-Apps nicht in einen Asynch-Task die Mail-Senden-Funktion programmiert habe was ja ab SDK 11 nicht mehr erlaubt ist. Ich hatte mich deswegen schon durch viele Seiten geklickt und bin dann auf einer anderen englischen Seite hängen geblieben, auf der dieses beschrieben wird. (Siehe hierzu meine Frage von vor einer Woche). Ebenfalls bin ich bei dem dort angegeben Tutorial zum Aufbau eine Mail-Senden-Funktion geblieben. Letztendlich klappte der Versand der E-Mails ja auch irgendwie – allerdings nicht bei allen Providern.
Natürlich habe ich mich jetzt noch einmal durch Dein Tutorial gelesen und die Anweisungen genau befolgt. Leider kann ich immer noch keine Mails über GMX senden!!

Folgenden Quelltext habe ich mir jetzt zusammen gebastelt:

```
String host="mail.gmx.net";
int port=587;
String user="mailadresse@gmx.de";
String pass="Passwort";

Properties props=new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");

try {
Session session=Session.getDefaultInstance(props);
Transport transport=session.getTransport("smtp");
transport.connect(host, port, user, pass);
Address[] addresses=InternetAddress.parse("mailadresse@###.de");
Message message=new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.setRecipients(Message.RecipientType.TO, addresses);
message.setSubject("TEST SUBJECT");
message.setText("text/plain BODY");
transport.sendMessage(message, addresses);
transport.close();
}
```

Fehler nach wie vor:
D/MainActivity(14533): javax.mail.AuthenticationFailedException: 535 Authentication credentials invalid

Ich habe auch Port 465 verwendet und auch SSLv2-Verschlüsselung.
Den Benutzernamen und das Passwort habe ich aus Eclipse in die Webseite von GMX kopiert und mich eingeloggt (so dass dort kein Fehler sein kann).

Vielleicht hast Du (oder natürlich jemand anderes) eine Idee.

Viele Grüße
Carsten


----------



## Sen-Mithrarin (27. Feb 2014)

warum kommen denn solche infos wie "es geht um android" immer nur auf nachfrage und landen nich im richtigen unter-forum (warum in basics wenns n extra mobile-forum für z.b. android gibt) ...

was genau mit GMX ist weis ich nicht ... ich kann mir ja morgen mal den spaß machen und bei hosting fragen ob probleme oder fehler bekannt sind ... glaub aber eher weniger das ich ne antwort bekomme

ich selbst hab jetzt keine gmx-adresse zur hand (und auch leider die internen test-adressen nich im kopf) um mal zu testen ob es vom system aus läuft ...
aber wenn du sagst das du die meldung über den android-code bekommst ... wie sieht es denn aus wenn du es als "normale" java-desktop-app gegen die SE-api probierst ...

tipp : versuch es mal noch zusätzlich mit

```
//...
props.put("mail.debug", "true");
//...
```
um debugging zu aktivieren


kann mir jetzt erlich gesagt nich vorstellen das es bei 1und1, web.de, freenet und anderen geht aber nur bei gmx zu nem anmelde-fehler kommen soll ...

ich hab auch noch mal in die help-seite geguckt bei uns im "hilfe-center" ... und mal google gefragt ...
bei SO kam jemand auf die idee als login einfach mal den host wegzulassen ... laut hilfe-center ist dieser aber nötig ... also muss man sich als user auch mit "@gmx.de" anmelden ...



sorry ... das is alles wie ich dir als insider von 1&1 weiterhelfen kann ... müsste mich wenn denn direkt mal mit den kollegen von gmx in verbindung setzen


----------



## Carsten315 (27. Feb 2014)

Hallo Sen-Mithrarin!

Danke für Deine Antwort!!
Ich werde morgen mal den Debug-Modus ausprobieren!

Sorry, ich hatte gedacht das diese Mail-Frage eher allgemeiner ist und nicht wirklich Android-bezogen.

Mir ist noch aufgefallen, dass ich derzeit von Web.de regelmäßig eine Mail bekomme, dass ich mich nicht mit SSL eingeloggt habe.
Hat vielleicht GMX schon umgestellt und Web.de noch nicht?
Ich habe noch einmal outlook.com ausprobiert. Dort habe ich das gleiche Problem...

Also, nochmal Danke und Gute Nacht! 

Carsten


----------



## Carsten315 (2. Mrz 2014)

Hallo!

Ich habe jetzt mal den Debug-Modus aktiviert und folgende Ausgabe erhalten:

```
03-02 13:33:19.102: I/System.out(7601): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc.,1.4.7]
03-02 13:33:19.102: I/System.out(7601): DEBUG SMTP: useEhlo true, useAuth true
03-02 13:33:19.102: I/System.out(7601): DEBUG SMTP: trying to connect to host "mail.gmx.net", port 587, isSSL false
03-02 13:33:19.222: I/System.out(7601): 220 gmx.com (mrgmx102) Nemesis ESMTP Service ready
03-02 13:33:19.222: I/System.out(7601): DEBUG SMTP: connected to host "mail.gmx.net", port: 587
03-02 13:33:19.232: I/System.out(7601): EHLO localhost
03-02 13:33:19.482: I/System.out(7601): 250-gmx.com Hello localhost [92.75.119.97]
03-02 13:33:19.482: I/System.out(7601): 250-SIZE 69920427
03-02 13:33:19.482: I/System.out(7601): 250-AUTH LOGIN PLAIN
03-02 13:33:19.492: I/System.out(7601): 250 STARTTLS
03-02 13:33:19.492: I/System.out(7601): DEBUG SMTP: Found extension "SIZE", arg "69920427"
03-02 13:33:19.492: I/System.out(7601): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
03-02 13:33:19.492: I/System.out(7601): DEBUG SMTP: Found extension "STARTTLS", arg ""
03-02 13:33:19.492: I/System.out(7601): DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
03-02 13:33:19.492: I/System.out(7601): DEBUG SMTP: AUTH LOGIN command trace suppressed
03-02 13:33:19.592: I/System.out(7601): DEBUG SMTP: AUTH LOGIN failed
```

Was mir ein bisschen zu denken gibt, ist Zeile 3 "... isSSL false".
Aber auch bei Port 465 kommt es zu dieser Meldung:

```
03-02 13:34:54.534: I/System.out(8084): DEBUG SMTP: trying to connect to host "mail.gmx.net", port 465, isSSL false
```

Ich habe verschiedene Sachen versucht, aber das "isSSL false" kriege ich nicht weg.
Auch bei anderen Providern, bei denen ich Mails senden kann, bleibt das "isSSL false".

Es wäre schön, wenn Du, Sen-Mithrarin, oder jemand anders mir noch helfen kann...

Viele Grüße
Carsten


----------



## Sen-Mithrarin (2. Mrz 2014)

so .. ich hab es jetzt mal ausprobiert ... hab mir also extra zum testen n gmx-acc angelegt ... und siehe da : ICH kann ohne probleme mails versenden ... laut debug-log sogar 1-zu-1 wie bei web.de (klar ... weil wie gesagt der gleiche server) oder auch gmail ...

was mir jetzt spontan auffällt : du nutzt auf jeden fall ein logging-framework ... was vermutlich den output verfälscht ... wiederhole es bitte ohne extra krams ... einfach nur 1-zu-1 den code von tutorials.de

weiterhin : im log ist zu erkennen das du java-mail 1.4.7 nutzt ... versuchs mal mit nem update auf das aktuelle release 1.5.1 ... vielleicht liegts auch daran

auch fehlt in deinem log irgendwie irgendwas ... zum vergleich mal meine logs


```
DEBUG: JavaMail version 1.5.1
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.web.de", port 587, isSSL false
220 web.de (mrweb001) Nemesis ESMTP Service ready
DEBUG SMTP: connected to host "smtp.web.de", port: 587

EHLO SenMithrarin-PC
250-web.de Hello SenMithrarin-PC [XXX.XXX.XXX.XXX]
250-SIZE 69920427
250-AUTH LOGIN PLAIN
250 STARTTLS
DEBUG SMTP: Found extension "SIZE", arg "69920427"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
STARTTLS
220 OK
EHLO SenMithrarin-PC
250-web.de Hello SenMithrarin-PC [XXX.XXX.XXX.XXX]
250-SIZE 69920427
250 AUTH LOGIN PLAIN
DEBUG SMTP: Found extension "SIZE", arg "69920427"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<XXXX@web.de>
250 Requested mail action okay, completed
RCPT TO:<XXXX@googlemail.com>
250 OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   XXXX@googlemail.com
DATA
354 Start mail input; end with <CRLF>.<CRLF>
From: XXXX@web.de
To: XXXX@googlemail.com
Message-ID: <XXXX.JavaMail.Administrator@SenMithrarin-PC>
Subject: TEST SUBJECT
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

text/plain BODY
.
250 Requested mail action okay, completed: id=XXXX
SEND
QUIT
221 web.de Service closing transmission channel
```


```
DEBUG: JavaMail version 1.5.1
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "mail.gmx.net", port 587, isSSL false
220 gmx.com (mrgmx103) Nemesis ESMTP Service ready
DEBUG SMTP: connected to host "mail.gmx.net", port: 587

EHLO SenMithrarin-PC
250-gmx.com Hello SenMithrarin-PC [XXX.XXX.XXX.XXX]
250-SIZE 69920427
250-AUTH LOGIN PLAIN
250 STARTTLS
DEBUG SMTP: Found extension "SIZE", arg "69920427"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
STARTTLS
220 OK
EHLO SenMithrarin-PC
250-gmx.com Hello SenMithrarin-PC [XXX.XXX.XXX.XXX]
250-SIZE 69920427
250 AUTH LOGIN PLAIN
DEBUG SMTP: Found extension "SIZE", arg "69920427"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<XXXX@gmx.de>
250 Requested mail action okay, completed
RCPT TO:<XXXX@googlemail.com>
250 OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   XXXX@googlemail.com
DATA
354 Start mail input; end with <CRLF>.<CRLF>
From: XXXX@gmx.de
To: XXXX@googlemail.com
Message-ID: <XXXX.JavaMail.Administrator@SenMithrarin-PC>
Subject: TEST SUBJECT
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

text/plain BODY
.
250 Requested mail action okay, completed: id=XXXX
SEND
QUIT
221 gmx.com Service closing transmission channel
```


wie ich also vermutet habe : es liegt nicht am code ... der läuft ... jetzt kanns entweder nur die zu alte java-mail version sein ... oder irgendwas anderes was du noch so drum-rum hast


----------



## Carsten315 (2. Mrz 2014)

Hallo Sen-Mithrarin!

Noch einmal vielen Dank für Deine Mühen!!!!
Wenn ich web.de als Provider nehme, habe ich auch einen längeren Debug-Log.
Ich habe die neue Version von JavaMail geladen und noch mal den Code von Deinem Tutorial kopiert.
Leider klappt es noch nicht. Nun ja, wenn ich die Gelegenheit habe, an einen anderen Computer zu kommen, werde ich hier weiter machen...!

Also, vielen Dank für Deine Hilfe und noch einen schönen Abend!

Carsten


----------



## Sen-Mithrarin (2. Mrz 2014)

also wenn du ne web.de-adresse nimmst sollte ja dein log mit meinem soweit identisch sein ... vielleicht hier und da die eine oder andere abweichung ... aber an sich sollte ja dann das gleiche bei rauskommen
und wenn ja ... dann sollte es auch 1-zu-1 mit gmx funktionieren ... versteh ich irgendwie nich ...
rechner ... netzwerk ... irgendwelche anderen einstellungen ... merkwürdig ...


----------

