# Email mit Javamail versenden



## TobGod (22. September 2006)

Hi, ich habe jetzt stunden bei google geschaut und dieses Forum auch durchforstet. Leider wird immer noch keine E-Mail verschickt. Ich arbeite mit Java und dem GUI Jigloo. Hier mein Code:

```
public class SendJavaMail extends javax.swing.JFrame {
	  
	public static void postMail( String recipient,String subject,String message, String from ) throws MessagingException
	{
		Properties props = new Properties();
		props.put("mail.smtp.de Kann das so bleiben ?", "Was muss hierrein ?");
		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);
		
	}
```

Ich habe die Bibliotheken Javamail und Activation Framework in das Projekt mit eingebunden. Habe auch keine Fehler im Programm. Habe mir dann einfach einen Button gemacht, der Code davon sieht so aus:


```
try {
     postMail( "Emailadresse vom Empfänger", "TESTSUBJECT", "TESTTEXT", "FROMME");
} catch (MessagingException e) {
cmdFunktioniert.setText("Geht nicht !");
}
```

Tja, es kommt keine Email an mit den Angaben mit denen ich das versuche und es wird immer "Geht nicht!" auf einem Label ausgegeben..

Welchen SMTP Server muss ich denn angeben und z.B. wenn man den von web.de nimmt, muss ich mich da erst authentifizieren ?

Danke schonmal für alle Antworten, Gruß Tobi


----------



## zeja (22. September 2006)

Die Properties die du übergeben kannst stehen im Javadoch direkt auf der Übersichtsseite ganz unten: Javamail API

Der Rest ist fast richtig  Für web.de z.B. brauchst du tatsächlich Authentifizierung.

Habe dir nochmal ein Beispiel fertig gemacht mit dem ich eben eine Mail senden konnte:

```
package de.tutorials;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * @author zeja
 */
public class SendMailExample {
	
	public void sendMail(String smtpHost,String username,String password,String senderAddress,String recipientsAddress,String subject,String text ){
		MailAuthenticator auth = new MailAuthenticator(username, password);

		Properties properties = new Properties();

		// Den Properties wird die ServerAdresse hinzugefügt
		properties.put("mail.smtp.host", smtpHost);

		// !!Wichtig!! Falls der SMTP-Server eine Authentifizierung
		// verlangt
		// muss an dieser Stelle die Property auf "true" gesetzt
		// werden
		properties.put("mail.smtp.auth", "true");

		// Hier wird mit den Properties und dem implements Contructor
		// erzeugten
		// MailAuthenticator eine Session erzeugt
		Session session = Session.getDefaultInstance(properties, auth);

		try {
			// Eine neue Message erzeugen
			Message msg = new MimeMessage(session);

			// Hier werden die Absender- und Empfängeradressen gesetzt
			msg.setFrom(new InternetAddress(senderAddress));
			msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
					recipientsAddress, false));

			// Der Betreff und Body der Message werden gesetzt
			msg.setSubject(subject);
			msg.setText(text);

			// Hier lassen sich HEADER-Informationen hinzufügen
			msg.setHeader("Test", "Test");
			msg.setSentDate(new Date( ));

			// Zum Schluss wird die Mail natürlich noch verschickt
			Transport.send(msg);

		}
		catch (Exception e) {
			e.printStackTrace( );
		}
	}
	
	class MailAuthenticator extends Authenticator {

		/**
		 * Ein String, der den Usernamen nach der Erzeugung eines
		 * Objektes<br>
		 * dieser Klasse enthalten wird.
		 */
		private final String user;

		/**
		 * Ein String, der das Passwort nach der Erzeugung eines
		 * Objektes<br>
		 * dieser Klasse enthalten wird.
		 */
		private final String password;

		/**
		 * Der Konstruktor erzeugt ein MailAuthenticator Objekt<br>
		 * aus den beiden Parametern user und passwort.
		 * 
		 * @param user
		 *            String, der Username fuer den Mailaccount.
		 * @param password
		 *            String, das Passwort fuer den Mailaccount.
		 */
		public MailAuthenticator(String user, String password) {
			this.user = user;
			this.password = password;
		}

		/**
		 * Diese Methode gibt ein neues PasswortAuthentication
		 * Objekt zurueck.
		 * 
		 * @see javax.mail.Authenticator#getPasswordAuthentication()
		 */
		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(this.user, this.password);
		}
	}
	
	public static void main(String[] args) {

		String username = "";
		String password = "";
		String senderAddress ="";//someone@web.de
		String recipientsAddress = ""; //somereceiver@web.de
		String subject = "Test";
		String text = "text";
		String smtpHost = "smtp.web.de";
		
		new SendMailExample().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
	}
}
```

(Falls jemandem die Kommentare einiger Methoden bekannt vorkommen, das sind wohl nicht meine. Ist aber schon länger her dass ich das ganze so genutzt habe, daher weiss ich nicht mehr woher sie kommen :-/)


----------



## TobGod (22. September 2006)

Es geht wirklich !  Ich dachte schon mein Java mag das nicht machen.. Danke für die schnelle und kompetente Antwort.

Gruß Tobi


----------



## BMo (20. April 2007)

Es gibt noch Helden!

Vielen Dank für den super Code!
Ich bin jetzt seit 2 Tagen non stop am Emailen, doch es ging und ging nicht!
Diese sch*** Authentification!
Vielen Dank!


----------



## lernen.2007 (4. Mai 2007)

Hallo,

den Code wollte ich auch einsetzen, aber irgendwie klappt es nicht. Es erkennt das nicht:

MailAuthenticator auth = new MailAuthenticator(username, password);

Es findet die Klasse MailAuthenticator nicht. Obwohl alle imports ja auch passen. Gibt es noch eine Einstellung, das ich übernehmen muss.


Danke
erkan


----------



## lernen.2007 (4. Mai 2007)

Tut mir leid fürs Frage. Die Klasse ist doch implementiert.

Gruß
erkann


----------



## Kulabac (4. Mai 2007)

Vielleicht liegt's an der Java-Version? Ich mein die Mail-Sachen sind beim JDK erst ab Version 6 standardmäßig dabei, vorher muss man die sich noch gesondert runterladen und in den Classpath setzen. Also die Klasse MailAuthenticator ist natürlich da (ist ja im Programmcode), aber vielleicht findet er halt die Authenticator-Klasse nicht, von der MailAuthenticator erbt (gibt manchmal die gleiche Fehlermeldung).

Ich benutz übrigens von Apache die commons-email-1.0.jar Da wird's dann noch einfacher, weil man einfach die setAuthentication-Methode des Mailobjekts aufrufen kann


----------



## lernen.2007 (4. Mai 2007)

Hallo,

jetzt habe ich mit Classpath hinbekommen, aber bekomme immer noch folgende Exceptions:


```
avax.mail.MessagingException: Could not connect to SMTP host: smtp.web.de, port: 25;
  nested exception is:
        java.net.ConnectException: Connection timed out: connect
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
        at javax.mail.Service.connect(Service.java:297)
        at javax.mail.Service.connect(Service.java:156)
        at javax.mail.Service.connect(Service.java:105)
        at javax.mail.Transport.send0(Transport.java:168)
        at javax.mail.Transport.send(Transport.java:98)
```


Muss ich etwas einstellen oder anders machen?

Gruß
erkan


----------



## Kulabac (4. Mai 2007)

Ja, ist ein Einstellungsfehler. Web.de (und die meisten anderen, die Authentifizierung verlangen), will den Kontakt nicht zu Port 25, sondern zu Port 587.


----------



## lernen.2007 (4. Mai 2007)

Ja habe auch gerade gelesen. Wie kann ich jetzt den Port von 25 auf 587 wechseln?

Gruß
erkan


----------



## Kulabac (4. Mai 2007)

Wenn ich raten soll würde ich einfach mal oben bei deinen Properties ein 

properties.put("mail.smtp.port", "587"); 

probieren. Ich kenn's wie gesagt nur mit der Apache-Lösung und da hatte ich einfach die Methode setSmtpPort, aber die gibt's bei der Standard-Mail-API anscheinend nicht.


----------



## lernen.2007 (4. Mai 2007)

Hallo,

ja du hast richtig geraten:


```
properties.setProperty( "mail.smtp.port", "587");
```

Danke


----------



## fragglesb (10. Mai 2007)

Hallo,

habe auch ein Problem mit Mails unter Java.
Vielleicht kann mit da jemand weiterhelfen.

Versand von Mails unter Java habe ich hinbekommen.
Sobald ich mein Programm aber unter Linux laufen lassen werden aus meine deutschen Umlauten lauter Sonderzeichen.
Habe auch schon versucht diese mit der ASCII-Schreibweise darzustellen, leider auch ohne Erfolg.

Weiß da jemand einen Rat?

Danke und Gruß


----------



## Kulabac (10. Mai 2007)

Für mich klingt es danach, als wenn er unter Linux ein anderes Charset nutzt als unter Windows (wäre auch verständlich solange keins explizit gesetzt ist) 

Tja ... also mit der Apache-Lösung hat man einfach die Methode setCharset(String charset) zur Verfügung. Fragt sich wie das mit der normalen MailAPI geht ... das weiß ich leider auch nicht. Vielleicht hilft ja Google


----------



## schnuffie (10. Mai 2007)

mail.mime.charset

Siehe auch generell:
http://www.websina.com/bugzero/kb/javamail-properties.html


----------



## y0dA (18. Juni 2007)

hi!

```
MailAuthenticator auth = new MailAuthenticator(username, password);
```
Ist das eine selbstgeschriebene Klasse, denn ich finde jene nicht in javax.mail?
username = string
password=string?

mfg


----------



## MeinerEiner_80 (18. Juni 2007)

Moin!
Selbstgeschrieben von zeja... hättest doch nur mal die vorangegangenen Post angucken müssen!!

gibt aber auch eine Implementation von Apache.. denke mal die wird nicht viel anderes machen..

*grüssle*
MeinerEiner


----------



## y0dA (18. Juni 2007)

Jop hätte wohl doch näher hinsehen sollen...
danke

mfg


----------



## y0dA (19. Juni 2007)

Argh..
Hab nun den Code testweise übernommen jedoch bekomme ich folgende Exception für folgende Werte:


```
javax.mail.MessagingException: Could not connect to SMTP host: mgate.chello.at, port: 587;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1213)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:311)
	at javax.mail.Service.connect(Service.java:255)
	at javax.mail.Service.connect(Service.java:134)
	at javax.mail.Service.connect(Service.java:86)
	at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:144)
	at javax.mail.Transport.send0(Transport.java:150)
	at javax.mail.Transport.send(Transport.java:80)
	at at.pcd.wam.technologie.controller.MailController.sendMail(MailController.java:90)
	at at.pcd.wam.technologie.test.TestMail.main(TestMail.java:21)
```


```
public class TestMail {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String smtpHost = "mgate.chello.at";
		String username = "existierende Mail Adresse";
		String password = "password";
		String senderAddress = "existierende Mail Adresse";
		String recipientsAddress = "existierende Mail Adresse";
		String subject = "ich bin subject";
		String text = "ich bin der text blah blah";
		
		MailController.sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
	}

}
```

**EDIT**
Hat sich erübrigt, meine Firewall arbeitete gegen mich.


----------



## marc_242 (27. Juli 2007)

Hi,

Ich habe den obigen Quellcode auch ausprobiert, allerdings kommt bei mir folgende Fehlermeldung:

_javax.mail.SendFailedException: Sending failed;
  nested exception is: 
	javax.mail.AuthenticationFailedException
	at javax.mail.Transport.send0(Transport.java:219)
	at javax.mail.Transport.send(Transport.java:81)
	at TestProgs.SendMail.sendMail(SendMail.java:49)
	at TestProgs.SendMail.main(SendMail.java:103)_

Das Ganze habe ich mit meiner yahoo-Addresse ausprobiert, d.h. mit smtpHost = "smtp.mail.yahoo.com" und der Zusatzzeile properties.setProperty( "mail.smtp.port", "587") sowie das "auf true setzen zwecks Authentifizierung" müsste es doch dann eigentlich funktionieren, oder? 
Danke


----------



## nanostruct (16. September 2007)

Hallo, 

habe folgendes Problem beim versenden von E-Mails mit der Java API:
Alles funktioniert einwandfrei solange ich aus meier eclipse-Umgebung arbeite. Wenn ich die Anwendung zu einem .jar verpacke, dann sendet sie keine Mails mehr.

Weiß eine/er was los ist?

Zum versenden habe ich die Beispielsimplementierung von diesen Post benutzt.

cu nanostruct


----------



## insertcoin (28. September 2007)

Ich hab das Programm von Zeja auch kopiert und versucht eine Testmail zu senden, aber bei mir kommt eine Exception.

Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
	at SendEmailExample.sendMail(SendEmailExample.java:38)
	at SendEmailExample.main(SendEmailExample.java:113)

macht für mich gerade nciht viel sinn, kann mir jemand weiterhelfen


----------



## zerix (28. September 2007)

Hallo,

das ist eine Klasse des JavaBeans Activation Frameworks. 

Schau mal hier
http://java.sun.com/products/javabeans/jaf/downloads/index.html

MFG

zEriX


----------



## insertcoin (28. September 2007)

super, dank. jetzt versucht er zu senden. werde zwar noch abgewiesen, aber dass liegt daran dass ich es mit smtp.gmx.net versuche, ist also ein anderes problem.

könntest du mir noch erklären, wozu die jar file verwendet wird.

weil die mail.jar und die anderen jar files die zum mailen benötigt werden, hatte ich doch schon eingebunden.


----------



## zerix (28. September 2007)

Ich hab leider noch nichts mit EMail versenden gemacht. Von daher kann ich es dir nicht sagen. Ich könnte es nachlesen und dir dann erklären, aber nachlesen kannst du es auch. 

MFG

zEriX


----------



## insertcoin (28. September 2007)

ja, da hast du alleridngs recht .

dann kannst du mir wahrscheinlich auch nicht bei meinem fehler helfen. 

ich poste ihn trotzdem mal:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmx.net, port: 25;
  nested exception is:
	java.net.ConnectException: Connection refused: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
	at javax.mail.Service.connect(Service.java:297)
	at javax.mail.Service.connect(Service.java:156)
	at javax.mail.Service.connect(Service.java:105)
	at javax.mail.Transport.send0(Transport.java:168)
	at javax.mail.Transport.send(Transport.java:98)
	at SendEmailExample.sendMail(SendEmailExample.java:54)
	at SendEmailExample.main(SendEmailExample.java:113)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(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:232)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
	... 8 more

vielleich hat ja jemand mal das gleiche problem gehabt, weiß grad einfach nicht obs an nem parameter oder einer einstellung liegt.


----------



## zerix (28. September 2007)

Also die Fehlermeldung sagt aus, dass sich das Programm nicht mit der angegebenen Adresse verbinden kann. Also mögliche Gründe können sein, Firewall blockt das Programm, die Adresse gibts nicht. Mehr fällt mir gerade nicht ein.

MFG

zEriX


----------



## insertcoin (28. September 2007)

hmm, ok danke.
ich denke dass liegt an nem firewall. bin hier in nem intranet.
muss ich mal schauen wie ich das mache.


----------



## zácky (16. Oktober 2007)

Guten Tag,
ich habe ein kleines Problem. Ich kann über mein Java-Programm E-Mails versenden, möchte aber, das ich gesendete E-Mails in einem gesonderten Ordner ablegen kann.

Hier nun der Quelltext vom bestehenden Programm. Über Ratschläge und oder Tipps würde ich mich sehr freuen.

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * Versenden einer einfachen Nachricht mit JavaMail
 */
public class Mail1 {
	public static void main(String args[]) throws Exception {
		System.out.println("[Senden]main()");
		String setup[] = { "mail-Server", "From", "To" };
		/*
		 * String host = args[0];String from = args[1]; String to = args[2];
		 */
		String host = setup[0];  //Mail-Server
		String from = setup[1];  //From
		String to = setup[2];	  //To
		// 1) System Properties lesen
		Properties props = System.getProperties();
		// 2) Definition des Mail Server
		props.put("mail.smtp.host", host);
		// 3) Kreieren einer Session
		Session session = Session.getDefaultInstance(props, null);
		session.setDebug(true);
		// 4) festlegen der Message
		MimeMessage message = new MimeMessage(session);
		// 4.a) from Adresse
		message.setFrom(new InternetAddress(from));
		// 4.b) to Adresse
		message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
		// 4.c) Subject
		message.setSubject("Sry");
		// 4.d) Inhalt / Content
		message.setText("Hallo ... wie geht es ... Ihnen.");
		// 5) Senden der Message
		Transport.send(message);
		System.out.println("[Senden.main()]Ende");
	}
}


----------



## loli89 (5. November 2007)

Hey mit dem Code von zeja kann ich wunderbar Mails verschicken, leider nur mit Web.de.
Ich hab das ganze für GMX getestet, da läuft die Authorisierung aber jedesmal schief. Ich denke ich habe alles richtig eingegeben, wie gleich der Auszug zeigen wird. 
Frage: Falls es mit Gmx echt nicht geht, weiß jemand, ob man die Pop vor Smtp authorisierung bei web.de ausschalten kann und wenn ja wie? ich möchte nämlich nicht immer erst manuell einloggen bevor ich etwas verschicken kann. Hier nochmal der Code um evtl die Lauffähigkeit mit GMX zu prüfen

      import java.util.Date;
      import java.util.Properties;
      import javax.mail.Authenticator;
      import javax.mail.Message;
      import javax.mail.PasswordAuthentication;
      import javax.mail.Session;
      import javax.mail.Transport;
      import javax.mail.internet.InternetAddress;
      import javax.mail.internet.MimeMessage;



      /**
  15.
      * @author zeja
  16.
      */

      public class SendMailExample extends Thread
      {

         String zSMTPHost, zUser, zPW, zSenderAdress, zRecpAdress, zSubject, zText;
          Session session;
          Properties properties;
          MailAuthenticator auth;

          public SendMailExample()
          {
              zSMTPHost = "";
              zUser = "";
              zPW = "";
              zSenderAdress = "";
              zRecpAdress = "";
              zSubject = "";
              zText = "";

              auth = new MailAuthenticator("", "");
              properties = new Properties();
          }

          public void run()
          {
              try {

                  // Eine neue Message erzeugen

                  Message msg = new MimeMessage(session);



                  // Hier werden die Absender- und Empfängeradressen gesetzt
                 msg.setFrom(new InternetAddress(zSenderAdress));

                  msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(zRecpAdress, false));



                  // Der Betreff und Body der Message werden gesetzt

                  msg.setSubject(zSubject);

                  msg.setText(zText);



                  // Hier lassen sich HEADER-Informationen hinzufügen

                  msg.setHeader("Test", "Test");

                  msg.setSentDate(new Date( ));



                  // Zum Schluss wird die Mail natürlich noch verschickt

                  Transport.send(msg);



              }

              catch (Exception e) {

                  e.printStackTrace( );

              }
          }

          public void daten(String pSMTPHost,String pUser,String pPW,String pSenderAdress,String pRecpAdress,String Subject,String pText)
          {
           zSMTPHost = pSMTPHost;
           zUser=pUser;
           zPW = pPW;
           zSenderAdress = pSenderAdress;
           zRecpAdress = pRecpAdress;
           zText = pText;

       // Den Properties wird die ServerAdresse hinzugefügt

           properties.put("mail.smtp.host", zSMTPHost);


       // !!Wichtig!! Falls der SMTP-Server eine Authentifizierung

       // verlangt

       // muss an dieser Stelle die Property auf "true" gesetzt

       // werden

            properties.put("mail.smtp.auth", "false");


       // Hier wird mit den Properties und dem implements Contructor

       // erzeugten

       // MailAuthenticator eine Session erzeugt

       session = Session.getDefaultInstance(properties, auth);
          }
      }
      class MailAuthenticator extends Authenticator
      {



              /**

               * Ein String, der den Usernamen nach der Erzeugung eines

               * Objektes<br>

               * dieser Klasse enthalten wird.

               */

              private final String user;



              /**

               * Ein String, der das Passwort nach der Erzeugung eines

               * Objektes<br>

               * dieser Klasse enthalten wird.

               */

              private final String password;



              /**

               * Der Konstruktor erzeugt ein MailAuthenticator Objekt<br>

               * aus den beiden Parametern user und passwort.

               *

               * @param user

               *            String, der Username fuer den Mailaccount.

               * @param password

               *            String, das Passwort fuer den Mailaccount.

               */

              public MailAuthenticator(String user, String password) {

                  this.user = user;

                  this.password = password;

              }
//            String user, String password


              /**

               * Diese Methode gibt ein neues PasswortAuthentication

               * Objekt zurueck.

               *

               * @see javax.mail.Authenticator#getPasswordAuthentication()
  99.
               */

              protected PasswordAuthentication getPasswordAuthentication() {

                  return new PasswordAuthentication(this.user, this.password);

              }

      }


die methode zum senden steht in ner anderen Datei:

meinSendMail.daten("smtp.web.de","username(web.de)","userpw","sender(webde)","empfänger(web.de)","login", 
           meinSendMail.start();

Anmerkung: wenn ich bei der authorisierung auf "true" stelle, bekomme ich bei web.de eine fehlermeldung und ich muss auf "false" ausweichen, da habe ich aber dann leider pop vor smtp,was ich ja nicht möchte

ich hoffe ihr wisst wie man das Problem mit gmx oder web.de hinbekommen kann, mfg loli


----------



## Kulabac (6. November 2007)

Wie schon auf der ersten Seite geschrieben benutz ich die Apache-Lösung zum Versenden von Mails. Damit ist es weder mit web.de noch mit gmx.de ein Problem.

So auf Anhieb und ohne mir deinen Code vollständig durchgelesen zu haben, würde ich einfach mal behaupten, du hast das selbe Problem wie insertcoin: Vergessen den Port auf 587 zu stellen wenn du Authentifizierung verwendest. (Hatten wir auch auf der ersten Seite schonmal).


----------



## uwe75-1 (29. Januar 2008)

Hallo,

ich würde euch auch gern mein Leid klagen. Es gut um den E-Mail aus einem JAVA Applet heraus.
In Kurzform macht das Applet folgendes:

Es werden Dateien (mehrere auf einmal) auf einen Server hochgeladen. Nach dem Upload soll eine E-Mail versendet werden, die dynamisch generiert wird und über die neuen Dateien auf dem Server informiert.
Der String subject und messageBody werden während des Uploads gefüllt und sollen dann beim Versand der email zum Einsatz kommen.
Solange ich die postmail Methode in meinem Applet nicht aufrufe, läuft es fehlerfrei durch den Compiler. Aber wehe ich versuche, die Methode ganz am Schluß in dem "init"-Teil aufzurufen, dann kommt ein Fehler. Ich bekomme einfach nicht raus, wie ich die korrekt aufrufen muß?

Mein Code schaut wie folgt aus (Kurzfassung):

import java.awt.*;
import java.lang.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.*;
import java.net.*;
import java.awt.image.*;
import javax.imageio.plugins.jpeg.*;
import javax.imageio.stream.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class upload extends Applet
{
	//private 
	public String categoryName;
	private Label progress;
	private int currImage;
	private int imgCount;

	/**
	 * Image properties
	 */
	String messageBody;
	String subject_message;

	/**
	 * Applet initialisation
	 */
	public void init()
	{.....................
	}

{hier fehlt jetzt der ganze Upload Teil}

	private static void postMail(String subject, String messageBody) throws MessagingException
	{
		/*try {*/
			Properties prop=new Properties();
			prop.put("mail.smtp.host",".....................");
			Session s = Session.getInstance(prop);
			MimeMessage mailmessage = new MimeMessage(s);
			InternetAddress from = new InternetAddress("...............");
			mailmessage.setFrom(from);
			InternetAddress rcpt = new InternetAddress("..............");
			mailmessage.addRecipient(Message.RecipientType.TO,rcpt);
			mailmessage.setSubject(subject);
			mailmessage.setText(messageBody);
			Transport.send(mailmessage);
		/*}
		catch (MessagingException msgexcep) {
			JOptionPane.showMessageDialog(this, "An error occured: " + msgexcep.getMessage());
			//JOptionPane.showMessageDialog(msgexcep.getMessage());
		}*/
	}
}

Vielen Dank schon mal im Voraus für eure Hilfe

Uwe


----------



## kirina (11. März 2008)

Ich bekomme auch immer folgende Fehlermeldung:


```
javax.mail.MessagingException: Could not connect to SMTP host: smtp.web.de, port: 25;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
	at javax.mail.Service.connect(Service.java:310)
	at javax.mail.Service.connect(Service.java:169)
	at javax.mail.Service.connect(Service.java:118)
	at javax.mail.Transport.send0(Transport.java:188)
	at javax.mail.Transport.send(Transport.java:118)
	at WebMail.sendMail(WebMail.java:79)
	at WebMail.main(WebMail.java:161)
Caused by: java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(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:233)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
	... 8 more
```

ich hab port 25, port 465 sowie port 587 ausprobiert, immer das gleiche! Ich hab inzwischen auch schon soviele Codevorschläge ausprobiert bzw. zusammengebastelt, ich krieg immer diese Fehlermeldung

Liegt das wirklich nur an einer Firewall oder gibt es noch andere Möglichkeiten?

Ich sitz hier in der Arbeit, ich kann also die Firewall hier nicht so wirklich ändern ,-)

Ich werd mal noch schauen, das ich es eventuell von daheim mal ausprobiere, aber falls ihr schon eine Idee habt sagt doch bitte Bescheid!
danke

oh und an alle die folgende fehlermeldung bekommen:

```
Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
```
 (z.b. insertcoin)
Ich HATTE das activation framework installiert, und es hieß auch, javamail verträgt sich mit  der activation version 1.0.2, demnach also seeehr lange gewundert warum es nicht geht -.-
dem ist nicht so, ihr müsst 1.1 oder sogar 1.1.1 verwenden, dann geht es =) (also zumindest ging es bei mir erst ab da)


----------



## hammet (11. März 2008)

@kirina
Das selbe Problem hatteich auf der Arbeit auch. Bei mir liegt es an der Firewall/Proxy. 
Als ich es von zu Hause aus getestet hatte, ging es ohne Probleme.


----------



## kirina (11. März 2008)

danke!

tja dann werd ich den code auf jedenfall heute abend mal daheim testen

wenn ich am ende ein jar file haben mit dem mail-zeug drinnen. und das kommt auf den server, muss ich da irgendwas spezielles beachten?


----------



## tyrkish (13. März 2008)

Hallo zusammen,
Ich habe hier ein kleines Problem beim versenden von Mails mit Java.

Ich hatte es zwischendurch mal geschafft das Mail versandt wurden, aber im Moment funktioniert es mal wieder nicht und ich weiss auch nicht so Recht warum es nicht mehr geht.

Die Einstellungen von SMTP und die AUTH klappt fehlerfrei, sonst waeren damals die Mails nicht versandt worden.

Ich bekommen nun immer folgende Fehlermeldung ausgegeben:

_com.sun.mail.smtp.SMTPSendFailedException: 501 ungueltige mail-adresse / invalid mail-address

	at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1515)
	at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)
	at javax.mail.Transport.send0(Transport.java:189)
	at javax.mail.Transport.send(Transport.java:118)
	at org.rapla.mail.Mail.sendMail(Mail.java:49)
	at org.rapla.mail.Mail.sendeMail(Mail.java:123)
	at org.rapla.gui.internal.edit.reservation.ReservationEditImpl$SaveCommand.execute(ReservationEditImpl.java:470)_

Aber ich habe das Format und den Inhalt der Mail-Adresse eigentlich nicht veraendert. Wie kann ich diesen Fehler beheben?

Meine Mail-Adressen sind wie folgt beschrieben:


```
String username = ""; //Entfernt
	    	String password = ""; //Entfernt
	    	String senderAddress =""; //hier steht ne richtige Mail-Adresse
	    	String recipientsAddress = ""; //hier auch
	    	String subject = "blubb";
	    	String text = "bla";
	    	String smtpHost = "smtp.web.de";
	    	InternetAddress addressTo = new InternetAddress(recipientsAddress);
	    	
	    	new Mail().sendMail(smtpHost, username, password, senderAddress, addressTo, subject, text);
```

Waere echt super wenn mir da jemand weiterhelfen koennte!

MfG
tyrkish


----------



## kirina (18. März 2008)

Mmh komisch, denn das:

com.sun.mail.smtp.SMTPSendFailedException: 501 ungueltige mail-adresse / invalid mail-address

würde ich am ehesten so interpretieren das die Empfänger-Adresse falsch war. Aber nachdem du meintest das du nichts geändert hast und es so schonmal ging....

Hast du vielleicht "äußere" Einwirkung wie Firewall oder sowas verändert?


----------



## tyrkish (18. März 2008)

Nein an meinen Firewalleinstellungen habe ich nichts veraendert. Ich habe bei meinen ersten Tests eine andere Email-Adresse angegeben. Diese Testmails kamen aber auch nicht immer an, hatte bei diesen Tests den Debugger nicht laufen, hab also nicht gesehen ob es der selbe Fehler war.
Wie auch immer, ich habe dann die Mail-Adresse geaendert, aber auf der neuen kam die Nachricht auch einmal an.
Dies ist ja auch der Grund warum ich es nicht ganz verstehe warum es einmal geht dann wieder nicht und momentan gar nicht.

MfG


----------



## kirina (19. März 2008)

geht es denn wieder (oder zumindest ab und zu so wie vorher ,-)) wenn du wieder die alte email adresse nimmst?


----------



## tyrkish (25. März 2008)

Nein, es geht momentan nicht. Unabhaengig ob ich die neue oder die alte EMail-Adresse benutze


----------



## kirina (2. April 2008)

tja jetzt kann ich mich einreihen in die komischen fehler^^

ich hab lasse eine plugin das ich schreibe u.a. emails verschicken. bis vor ca ner halben stunde ging das auch 2 oder 3 wochen ganz gut^^ jetzt krieg ich auf einmal folgenden fehler:


```
send failed, exception: javax.mail.MessagingException: Could not connect to SMTP host: mail.*example*.com, port: 25;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
```

ich konnte auch bisher wunderbar den code aus eclipse raus starten (bedinung ist nur ich verwende die 'haus interne' domain^^)

hier der code für eclipse, der andere entscheidet sich nicht viel, aber ist zu kompliziert zum rauszukopieren^^


```
import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;


public class SendMail {
public static void main(String[] args){
	Properties props = new Properties();
    props.put("mail.smtp.host", "mail.*exanpledomain*.com");
    props.put("mail.from", "excampleemail@adress.de");
    Session session = Session.getInstance(props, null);

    try {
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom();
        msg.setRecipients(Message.RecipientType.TO,
                          "valeria.koellhofer@*exampledomain*.com");
        msg.setSubject("JavaMail hello world example");
        msg.setSentDate(new Date());
        msg.setText("texttexttext");
        Transport.send(msg);
    } catch (MessagingException mex) {
        System.out.println("send failed, exception: " + mex);
    }
}
}
```

woran kann es liegen, das es, ohne das ich den code verändert hab nicht mehr geht plötzlich? sollte ich mal fragen gehen ob die was mit email geändert haben? oder gibt es noch andere gründe

EDIT: also ich fühl mich irgendwie auf den arm genommen.....eine weitere halbe Stunde später ging wieder alles -.- also allen denen sowas mal passiert...geduld haben


----------



## thedaystar (29. Dezember 2008)

hallo,

den Code habe ich auch eingesetzt und funktioniert wunderbar (erstmal danke).

nun meine erste Frage:

ich möchte ein email an googlemail-account senden ohne Authentifikation.
folgendes hat nicht geklappt:

1.        properties.put("mail.smtp.auth", "false");  (auth auf false setzen)

2.        Session session = Session.getDefaultInstance(properties, null); (auth auf null setzen)


zweite Frage: kann ich dise applikation für mobile (j2me) einsetzen und von mobile aus email senden?


----------



## ivone (28. Dezember 2009)

vielen vielen dank, super code


----------



## japp (6. März 2010)

Hallo, 

hab eine Frage:
Warum sagt mir der Compiler immer, dass die javax.mail Packages nicht existieren?
Muss ich noch eine bestimmte Klasse downloaden? Ich steh auf dem Schlauch...

Edit:
Habs gefunden, aber was mach ich jetzt damit? 

http://java.sun.com/products/javamail/downloads/index.html
http://java.sun.com/products/javabeans/jaf/downloads/index.html

Wie kann ich die Files zur java lib hinzufügen?
Kopieren nach Java\jdk1.6.0_11\jre\lib bringt nichts...


----------



## zerix (7. März 2010)

Hallo,

nutzt du eine Entwicklungsumgebung wie eclipse?

Gruß

Sascha


----------



## japp (7. März 2010)

Ich benutze den JavaEditor, hab aber kein Menüeintrag oder so gefunden.

Edit:

Mit NetBeans hat es jetzt geklappt


----------



## Maik2010 (7. Mai 2010)

ich hab das ganze hier jetzt durchgelesen und schon probiert, doch es hat bis jetzt noch nicht ganz geklappt 

hat jemand einen 100% funktionierenden Code bei dem auf *Knopfdruck* die E-Mail gesendet wird?

wäre sehr dankbar

mfg maik


----------



## ISICTE3 (10. November 2010)

Hallo zusammen, danke für den tollen Java-Code. Bei mir funktioniert es mit GMX einwandfrei. Dazu habe ich einfach in der public static void main meine Daten eingetragen

in String username = "xy"
String password = "xyz";
String senderAddress ="xy@gmx.de";
String recipientsAddress = "zz@gmx.de"; 
String subject = "Test";
String text = "text";
String smtpHost = "mail.gmx.net";

Jetzt die Frage, wie man eine Email verschicken kann ohne diese Parameter explizit wie oben anzugeben? Gibt es eine Methode à la:

sendemail (mail.gmx.net, xy@gmx.de, ...) ? Über eine kurze Antwort wäre ich sehr dankbar !! Dankeschön


----------



## z-mon (9. Januar 2011)

Hallo ISICTE3,

ich habe in einem Tutorial das Senden einer E-Mail mit einem ENUM umgesetzt. Dort heißt es dann im Endeffekt:

Mail.send(MailAccounts.GMX, recipient, subject, text);

Wobei _MailAccounts.GMX_ der gepflegte E-Mail Account ist. Du könntest darüber z.B. auch einen weiteren E-Mail Account anlegen wenn du magst. Mehr dazu im Tutorial.

Grüße


----------



## DaveDarell (19. Oktober 2020)

Hallo zusammen,

ich weiß nicht ob ich hier überhaupt noch eine Antwort auf meine Frage bekomme, das Thread ist ja schon recht alt 

Ich habe nun mal den Code von Seite 1 in meine Eclipse Umgebung eingebaut und sowohl die .jar Datei von javaxmail als auch Activation Framework hinzugefügt. 
Nun weiß ich leider nicht genau, wo ich meine Daten wie bspw. Passwort und meine Mailadresse eintragen muss, hab die nun mal in der Main-Methode eingebaut. Bekomme allerdings eine Fehlermeldung bei der 
Session session = Session.getDefaultInstance(properties, auth);

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method getDefaultInstance(Properties, Authenticator) in the type Session is not applicable for the arguments (Properties, SendMailExample.MailAuthenticator)

    at SendMailExample.sendMail(SendMailExample.java:36)
    at SendMailExample.main(SendMailExample.java:115)


Habe sonst am Code nichts abgeändert. außer meine Mailadresse, Passwort und eine andere Mailadresse vom Empfänger eingetragen...
Eventuell kann mir ja jemand weiterhelfen 

Danke 
LG


----------



## ByeBye 284669 (19. Oktober 2020)

DaveDarell hat gesagt.:


> Thread ist ja schon recht alt


Und genau deswegen solltest du dich hier nicht dranhängen, sondern einen eigenen Thread aufmachen.


----------

