# E-Mails verschicken



## jobu0101 (3. Aug 2007)

Habe mir zum Thema E-Mails versenden in der Insel Kapitel 16.12 durchgelesen. Doch irgendwie will das Beispielprogramm bei _16.12.5 E-Mails versenden_ nicht funktionieren: Das ist der Sourcecode der Funktion, die die Mail verschickt:


```
public static void postMail(String recipient, String subject, String message, String from) throws MessagingException {
		Properties props = new Properties();
		props.put("mail.smtp.host", "mail.java-tutor.com"); //Den zweiten String habe ich auch durch meinen wirklichen SMTP-Server ersetzt!
		Session session = Session.getDefaultInstance(props);
		Message msg = new MimeMessage(session);
		InternetAddress addressFrom = new InternetAddress(from);
		msg.setFrom(addressFrom);
		InternetAddress addressTo = new InternetAddress(recipient);
		msg.setRecipient(Message.RecipientType.TO, addressTo);
		msg.setSubject(subject);
		msg.setContent(message, "text/plain");
		Transport.send(msg);
	}
```

Folgendes gibt der Eclipse-Debugger aus:


> URLClassLoader$1.run() line: 200 [local variables unavailable]
> AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method]
> Launcher$AppClassLoader(URLClassLoader).findClass(String) line: 188
> Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: 306
> ...



Könnt ihr mir helfen?


----------



## jobu0101 (4. Aug 2007)

Kann mir keiner helfen?  :cry:


----------



## Guest (4. Aug 2007)

poste mal die zeilen bei denen der compiler einen Fehler meldet (vlt hilfts)


----------



## jobu0101 (4. Aug 2007)

Anonymous hat gesagt.:
			
		

> poste mal die zeilen bei denen der compiler einen Fehler meldet (vlt hilfts)



Hab ich doch! Zeile 25 ist die Zeile, in der die Funktion aufgerufen wird, die selber beinhaltet ja keinen Fehler, der Fehler scheint in der Funktion zu passieren und Zeile 14 ist Zeile 5 in dem geposteten Code! Der Rest ist gar nicht mehr in meinem Code!


----------



## HoaX (4. Aug 2007)

dsa was du da gepostet hast ist ein stacktrace vom debugger, wir wollen aber den stacktrace einer exception oder überhaupt einer fehlermeldung. was geht nicht? mal den debug-modus von javamail angeschaltet?


----------



## jobu0101 (4. Aug 2007)

HoaX hat gesagt.:
			
		

> dsa was du da gepostet hast ist ein stacktrace vom debugger, wir wollen aber den stacktrace einer exception oder überhaupt einer fehlermeldung. was geht nicht? mal den debug-modus von javamail angeschaltet?



Der schaltet sich automatisch an und bricht das Programm ab. Wo finde ich denn die Fehlermeldungen?


----------



## Wildcard (4. Aug 2007)

Drück mal auf 'run' und nicht auf 'debug'


----------



## jobu0101 (4. Aug 2007)

Dann kommt:



> Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
> at Mail.SendJavaMail.postMail(SendJavaMail.java:14)
> at Mail.SendJavaMail.main(SendJavaMail.java:25)


----------



## AlArenal (4. Aug 2007)

Dann weißt du ja Bescheid. Abhängigkeiten nicht erfüllt... Vielleicht vorbei mal Doku der Lib lesen, Tutorials anschauen?


----------



## jobu0101 (4. Aug 2007)

AlArenal hat gesagt.:
			
		

> Dann weißt du ja Bescheid. Abhängigkeiten nicht erfüllt... Vielleicht vorbei mal Doku der Lib lesen, Tutorials anschauen?



Weiß nicht so richtig, was du meinst. Das war bereits ein Beispielprogramm, siehe hier: http://www.galileocomputing.de/open...16_012.htm#mj879abbdee2eae2d2bb8a450af6b9b67a


----------



## AlArenal (4. Aug 2007)

jobu0101 hat gesagt.:
			
		

> AlArenal hat gesagt.:
> 
> 
> 
> ...



Lesen bildet:



> JavaMail 1.4
> (April 25, 2006)
> 
> The JavaMail 1.4 release includes many API improvements approved by the Java Community Process via JSR-919. It also includes improvements in MIME parsing performance and support for parsing and constructing Delivery Status Notifications.
> ...


----------



## jobu0101 (4. Aug 2007)

Das habe ich mir runtergeladen und die activation.jar zum CLASSPATH hinzugefügt!


----------



## AlArenal (4. Aug 2007)

Dann hast du was fasch gemacht.


----------



## jobu0101 (4. Aug 2007)

AlArenal hat gesagt.:
			
		

> Dann hast du was fasch gemacht.



Und was? Das will ich ja wissen! Es muss irgendwas mit dem SMTP-Server zu tun haben, der der Code ist auch auch ein Beispiel-Code!


----------



## jobu0101 (4. Aug 2007)

Ihr könnt es ja auch mal probieren und schauen, ob es bei euch klappt!


----------



## HoaX (4. Aug 2007)

bei uns gehts


----------



## André Uhres (4. Aug 2007)

Bei mir klappt es.
Es fehlt lediglich:

```
msg.setSentDate(new Date());
```
damit die Nachricht auch mit dem aktuellen Datum ankommt.
(In den Project Properties habe ich unter "Java Build Path" | "Libraries" mit "Add External JARs..."
die mail.jar und die activation.jar hinzugefügt.)


----------



## jobu0101 (4. Aug 2007)

Habs auch nochmal so gemacht und jetzt kommen folgende Fehler:



> Exception in thread "main" javax.mail.SendFailedException: Invalid Addresses;
> nested exception is:
> com.sun.mail.smtp.SMTPAddressFailedException: 550 must be authenticated
> 
> ...


----------



## André Uhres (5. Aug 2007)

Ich bin mir nicht sicher, aber das könnte vielleicht hiermit zu tun haben:

```
props.put("mail.user", "name");
        props.put("mail.password", "code");
```


----------



## jobu0101 (5. Aug 2007)

André Uhres hat gesagt.:
			
		

> Ich bin mir nicht sicher, aber das könnte vielleicht hiermit zu tun haben:
> 
> ```
> props.put("mail.user", "name");
> ...



Aber es funktioniert bei euch auch ohne?


----------



## André Uhres (5. Aug 2007)

jobu0101 hat gesagt.:
			
		

> André Uhres hat gesagt.:
> 
> 
> 
> ...


Mit *und* ohne :wink:
Aber das hängt vielleicht vom Provider ab  ???:L


----------



## AlArenal (5. Aug 2007)

Wenn du ohne Benutzerdaten über einen öffentlichen SMTP Mails verschicken kannst, darfst du dich jedenfalls nciht wundern, wenn deine Mails nicht ankommen und / oder in Spamfiltern kleben bleiben.

Keiner mag Open Relays...


----------



## HoaX (5. Aug 2007)

doch, die spammer


----------



## jobu0101 (5. Aug 2007)

Das Programm kann ja nichtmal ausgeführt werden bei mir! Gibt Compilerfehler! Was benutzt ihr denn für einen SMTP-Server?


----------



## HoaX (5. Aug 2007)

und welchen compiler fehler? bitte schreib doch mal aussagen anders als "geht nicht"!



			
				jobu0101 hat gesagt.:
			
		

> Habs auch nochmal so gemacht und jetzt kommen folgende Fehler:
> 
> 
> 
> ...



da hast dus doch auch kompilieren können ...

edit: ich hab exim4 laufen, aber ich glaube nicht dass dich das auch nur ein stück weiter bringt


----------



## AlArenal (5. Aug 2007)

jobu0101 hat gesagt.:
			
		

> Das Programm kann ja nichtmal ausgeführt werden bei mir! Gibt Compilerfehler! Was benutzt ihr denn für einen SMTP-Server?



Dann macht es wenig Sinn über Laufzeitfehler eines nicht ordnungsgemäß kompilierten Programms zu sprechen.

Man benutzt den SMTP-Server für den man Zugangsdaten hat, oder eben den der lokal läuft (wenn einer läuft).


----------



## jobu0101 (5. Aug 2007)

Ich habe es hinbekommen eine Mail an bestimmte Adressen zu verschicken. War die Adresse z.B. user@text.de, musste ich folgenden Code schreiben:


```
props.put("mail.smtp.host", "mail.test.de");

postMail("user@text.de",...
```

Das funktionierte aber nur bei sehr wenigen Servern. Wie soll ich es denn bitteschön bei anderen machen? Ich muss doch eigentlich von einem SMTP-Server an alle eine E-Mail schicken können und mir nicht immer einen bestimmten raussuchen müssen!


----------



## AlArenal (5. Aug 2007)

Sorry, aber die Zugangsdaten deines Providers musst du schon selbst eintippen.


----------



## jobu0101 (6. Aug 2007)

AlArenal hat gesagt.:
			
		

> Sorry, aber die Zugangsdaten deines Providers musst du schon selbst eintippen.



Und wie mach ich das? Wie finde ich die heraus?


----------



## AlArenal (6. Aug 2007)

Aller Wahrscheinlichkeit nach hast du irgendwo einen E-Mail-Account.  Wenn das nicht gerade einer ist, den man nur per Webmail benutzen kann, gibts dafür auch Daten für die Einrichtung von E-Mail-Clients. Von denen brauchst du den SMTP-Server, deinen Benutzernamen und zumindest das Passwort müsstest du ja kennen.

Generell ist es nicht die schlechteste Idee sich mit der Funktionsweise von Techniken, die man einsetzen will, zu beschäftigen, ehe / während man sie einsetzt. Du musst ja nicht gleich die ganze RFC 2821 auswendig lernen...


----------



## jobu0101 (6. Aug 2007)

AlArenal hat gesagt.:
			
		

> Aller Wahrscheinlichkeit nach hast du irgendwo einen E-Mail-Account.  Wenn das nicht gerade einer ist, den man nur per Webmail benutzen kann, gibts dafür auch Daten für die Einrichtung von E-Mail-Clients. Von denen brauchst du den SMTP-Server, deinen Benutzernamen und zumindest das Passwort müsstest du ja kennen.
> 
> Generell ist es nicht die schlechteste Idee sich mit der Funktionsweise von Techniken, die man einsetzen will, zu beschäftigen, ehe / während man sie einsetzt. Du musst ja nicht gleich die ganze RFC 2821 auswendig lernen...



Das weiß ich schon, nur weiß ich nicht wie ich das in den Java-Code einbinde. Was mich auch wundert, ist, dass es sowohl bei den Properties des Session als auch bei der Message die Möglichkeit des Eintragens des Absenders gibt.

Mit 
	
	
	
	





```
props.put("mail.user", "username");
		props.put("mail.password", "pw");
```
 habe ich es schon probiert, funktioniert aber nicht. Wo kommen die Daten jetzt rein?

PS: In der Dokumentation war zwar von mail.user als Propertie, nicht aber von mail.password die Rede!


Was ich jetzt für Fehler erhalte:





> Exception in thread "main" javax.mail.SendFailedException: Invalid Addresses;
> nested exception is:
> com.sun.mail.smtp.SMTPAddressFailedException: 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
> 
> ...


----------



## AlArenal (6. Aug 2007)

Die Fehlermeldung gibts normalerweise wenn die SMTP Authentifizierung nicht aktiviert wird. Wenn der Provider pfiffig ist, kann sie auch geworfen werden wenn du eine Absende-Adresse benutzt, die nicht zu deinem Account passt.


----------



## jobu0101 (6. Aug 2007)

user sei mein Benutzername, pw mein Passwort und domain die Domain des SMTP-Servers, wo ich auch meinen Account habe. Ist dann folgende Funktion so richtig:


```
public static void postMail(String recipient, String subject, String message, String from) throws MessagingException {
		Properties props = new Properties();
		props.put("mail.smtp.host", "mail."+ domain);
		props.put("mail.user", user);
		props.put("mail.password", pw);
		Session session = Session.getDefaultInstance(props);
		Message msg = new MimeMessage(session);
		InternetAddress addressFrom = new InternetAddress(from);
		msg.setFrom(addressFrom);
		InternetAddress addressTo = new InternetAddress(recipient);
		msg.setRecipient(Message.RecipientType.TO, addressTo);
		msg.setSubject(subject);
		msg.setContent(message, "text/plain");
		Transport.send(msg);
	}
```


----------



## André Uhres (11. Aug 2007)

Ich hatte jetzt auch Probleme mit JavaMail.
Meine IP Adresse war auf zwei Schwarzen Listen: CPL und PBL. 
Ich habe sie auf beiden entfernt und jetzt geht's wieder.


----------

