# JavaMail Problem - Nachricht wird nicht versendet ?



## angelika_m (17. Jun 2007)

Hallo, 

ich habe ein Problem mit dem Versenden von E-Mails über einen SMTP Server.
Den folgenden Quelltext habe ich aus einem Buch 1:1 abgeschrieben. 
Ich kann die Anwendung ausführen, ohne eine Fehlermeldung zu erhalten. Leider funktioniert das Versenden von Emails trotzdem nicht ?! 

Würde mich freuen, wenn jemand das Ganze bei sich testen könnte. Ohne Fehlermeldung kann ich die Ursache leider nicht feststellen 
Habe zwei unterschiedliche SMTP Server getestet.

Die JavaMail-lib könnt ihr hier downloaden:
http://java.sun.com/products/javamail/downloads/index.html

Gruß
Angelika 



```
import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class Mail extends Authenticator {

	private String smtpUsername;
	private String smtpPassword;
	
	public Mail(String smtpUsername, String smtpPassword) {
		this.smtpUsername = smtpUsername;
		this.smtpPassword = smtpPassword;
	}	
	protected PasswordAuthentication getPasswordAuthentication() {		
		PasswordAuthentication result = new PasswordAuthentication(smtpUsername, smtpPassword);		
		return result;		
	}		
	public static void main(String[] args) {			
		try {			
			Properties settings = new Properties();
			settings.put("java.mail.host", "??????");
			
			// Authenticator Ableitung instanziieren, welche die Zugriffsinformationen auf den Mailserver enthält.
			Mail auth = new Mail("??????", "??????");
			
			// Mail-Session erzeugen
			Session session = Session.getDefaultInstance(settings, auth);
			
			// Nachricht erzeugen
			Message message = new MimeMessage(session);
			
			// Absender
			message.setFrom(new InternetAddress("??????"));
			
			// Empfänger
			message.setRecipient(Message.RecipientType.TO, new InternetAddress("??????"));
			
			// Betreff
			message.setSubject("Betreff !");
			
			// MultiPart-Instanz vom Typalternative erzeugen
			Multipart mp = new MimeMultipart("alternative");
			
			// BodyParts erzeugen - text
			BodyPart part = new MimeBodyPart();
			part.setContent("Nachricht - text", "text/plain");			
			mp.addBodyPart(part);
			// BodyParts erzeugen - html
			part = new MimeBodyPart();
			part.setContent("<html><body><h3>Nachricht - html</h3></body></html>", "text/html");
	
			// Multipart-Instanz zuweisen
			message.setContent(mp);
			
			// versenden
			Transport.send(message);
			
		} catch(Exception e) {
			e.getStackTrace();
		}
	}
}
```


----------



## HoaX (17. Jun 2007)

mal nachgeschaut ob der mailserver die mail denn annimmt?


----------



## angelika_m (17. Jun 2007)

Hallo,

ich habe z.b. als SMTP-Server mail.gmx.net angegeben. Die mail wird innerhalb von "Posteingang" nicht angezeigt. 

Wie kann ich den response von GMX SMTP-Server abfangen ? 
Wie kann ich das Problem ohne Fehlermeldung eingrenzen ?

Habe die Anwendung um diese Zeile erweitert, Hat aber leider nicht geholfen:

```
settings.put("mail.smtp.auth", "true");
```

Gruß
Angelika


----------



## HoaX (17. Jun 2007)

ist die absenderadresse deine? installier dir lokal einen mailserver, probiers mit dem und schau ins log


----------



## angelika_m (17. Jun 2007)

als Absender habe ich meine eigene GMX E-Mail Adresse angegeben.

Denke nicht, dass ich so einfach einen eigenen Mailserver einrichten kann. Muss mich erst einmal mit der Materie auseinander setzen. Dadurch hätte ich ein neues Problem.


----------



## HoaX (17. Jun 2007)

so, ich dein progamm getestet und der fehler ist eigentlich offensichtlich.

wie man die mailapi debugt steht in der faq der mailapi:


			
				http://java.sun.com/products/javamail/FAQ.html#debug hat gesagt.:
			
		

> Turn on session debugging by invoking the method setDebug(true) on the Session object in your code. That will cause debug information to be printed to the console, including a protocol trace. ...



dann solltest du sehn warum nix ankommt.

mini änderung und schon gehts ...


----------



## angelika_m (17. Jun 2007)

Danke Hoax .. wer lesen kann ... 

die SMTP-Authentifizierung scheint zu funktionieren. Anschließend versucht die Anwendung, zu *localhost* zu connecten. Die restlichen Angaben scheinen zu stimmen. 

Ich sehe das Problem nicht. Ich verstehe nicht, warum eine Verbindung zu localhost aufgebaut wird.
*DEBUG SMTP: connected to host "localhost", port: 25*

Debug Ausgabe:


```
DEBUG: setDebug: JavaMail version 1.4ea
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "localhost", port 25, isSSL false
220 angelika ESMTP Exim 4.63 Sun, 17 Jun 2007 18:18:07 +0200
DEBUG SMTP: connected to host "localhost", port: 25

EHLO angelika
250-angelika Hello localhost [127.0.0.1]
250-SIZE 52428800
250-PIPELINING
250 HELP
DEBUG SMTP: Found extension "SIZE", arg "52428800"
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "HELP", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:<angelikamorgan@gmx.de>
250 OK
RCPT TO:<angelikamorgan@gmx.de>
250 Accepted
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   [email]angelikamorgan@gmx.de[/email]
DATA
354 Enter message, ending with "." on a line by itself
From: [email]angelikamorgan@gmx.de[/email]
To: [email]angelikamorgan@gmx.de[/email]
Message-ID: <5487165.01182097087776.JavaMail.angelika@angelika>
Subject: Betreff !
MIME-Version: 1.0
Content-Type: multipart/alternative; 
	boundary="----=_Part_0_1026511.1182097087738"

------=_Part_0_1026511.1182097087738
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Nachricht (text)
------=_Part_0_1026511.1182097087738--

.
250 OK id=1HzrS3-0000ed-Q5
QUIT
221 angelika closing connection
```


----------



## HoaX (17. Jun 2007)

weil du das property "java.mail.host" setzt - lass das "java."  am anfang weg. bei "mail.smtp.auth" hast dus richtig gemacht


----------



## angelika_m (17. Jun 2007)

Hallo HoaX, 

der Eintrag sieht jetzt folgendermaßen aus: *settings.put("mail.host", "post.fh-kl.de");*
Komischerweise erhalte ich jetzt eine *invalid destination addresses* Fehlermeldung. 

als Ziel habe ich meine eigene Adresse angegeben. Daher verstehe ich die Fehlermeldung nicht. Irgendwie hat JavaMail etwas gegen mich !   ???:L 
Dei gleiche Meldung erhalte ich auch, wenn ich andere E-Mail Adressen angebe.

Debug-Ausgabe:


```
DEBUG: setDebug: JavaMail version 1.4ea
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "post.fh-kl.de", port 25, isSSL false
220 post.fh-kl.de ESMTP Postfix
DEBUG SMTP: connected to host "post.fh-kl.de", port: 25

EHLO angelika
250-post.fh-kl.de
250-PIPELINING
250-SIZE 80000000
250-VRFY
250-ETRN
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "80000000"
DEBUG SMTP: Found extension "VRFY", arg ""
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:<angelikamorgan@gmx.de>
250 Ok
RCPT TO:<angelikamorgan@gmx.de>
554 <angelikamorgan@gmx.de>: Relay access denied
DEBUG SMTP: Invalid Addresses
DEBUG SMTP:   [email]angelikamorgan@gmx.de[/email]
DEBUG SMTP: Sending failed because of invalid destination addresses
RSET
250 Ok
javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
	com.sun.mail.smtp.SMTPAddressFailedException: 554 <angelikamorgan@gmx.de>: Relay access denied

	at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1196)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:584)
	at javax.mail.Transport.send0(Transport.java:169)
	at javax.mail.Transport.send(Transport.java:98)
	at de.angelika.Mail.main(Mail.java:78)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 554 <angelikamorgan@gmx.de>: Relay access denied

	at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1094)
	... 4 more
QUIT
221 Bye
```


----------



## HoaX (17. Jun 2007)

debugausgabe hat gesagt.:
			
		

> MAIL FROM:<angelikamorgan@gmx.de>



darum. du musst deine uni-adresse als absender nehmen. relaying ist auf eigentlich jedem email-server abgeschalten. sonst könntest du ja auch "Bill Clinton" als absender reinschreiben wenn du mit der moni n kaffee trinken gehen wollen würdest.


----------

