# Email mit Java API



## rmacher (27. Mrz 2014)

Hallo allerseits

Ich versuche ein einfaches Programm zu erstellen, mit dem ich einfache Emails (notifications for user) senden könnte. Nun wenn ich mit *smtp.gmail.com* sende, funktioniert es. Leider bringe ich es nicht fertig, mit dem mir zur Verfügung stehenden Firmen-SMTP zu senden. Egal was ich versuche, bekomme ich immer die Meldung "connection refused". Habe inzwischen aus dem Firmen-Netzwerk und aus dem eigenen Netzwerk (zu Hause) versucht, stehe hinter keinem Proxy, Firewall habe ich auch abgeschaltet etc. Aber, immer das gleiche Problem. Meine Anfrage bei Emailserver-Admin hat ergeben, dass SMTP offen ist. Ein Applikationsentwickler hat mir helfen versucht. Da er kein Java KnowHow hat, hat er ein einfaches C#-Programm gemacht, mit dem das Senden problemlos funktioniert. Nun habe ich wieder überal gesucht und diverses probiert, leider weiterhin ohne erfolgt.

Ich habe neben Java API (default) auch mit Apache Commons versucht. Aber auch mit Apache Commons komme ich nicht weiter. Aus irgendeinem Grund kann ich den SMTP-Server nicht connecten.

SMTP-Daten:
host: smtpauth.aaa.de
port: 587
ssl: ja

Ich habe selbst ein Account und versuche immer mit eigenen Credentials und mit der eigenen Email-Adresse (from und to) zu senden. Da die Meldung relativ klar ist (connection refused), frage ich mich, woran es liegen könnte. Alle für den Zugriff relevanten Daten habe ich inzwischen mehrfach überprüft.

Hier meine einfache Methode (host, from und to wurden hier etwas "verschleiert"):

```
public static void main(String[] args) {

		String from = "from_email@abc.de";
		String to = "to_email@abc.de";

		String host = "smtpauth.aaa.de";
		int port = 587;

		try {

			final String username = JOptionPane
					.showInputDialog("Benutzername: ");
			final String password = JOptionPane.showInputDialog("Passwort: ");

			Properties props = new Properties();

			props.setProperty("mail.smtp.host", host);
			props.setProperty("mail.smtp.port", "587");
			props.setProperty("mail.smtps.auth", "true");
			props.setProperty("mail.debug", "true");
			props.setProperty("mail.user", username);
			props.setProperty("mail.password", password);

			Session session = Session.getDefaultInstance(props,
					new Authenticator() {
						protected PasswordAuthentication getPasswordAuthentication() {
							return new PasswordAuthentication(username,
									password);
						}
					});

			Message message = new MimeMessage(session);
			message.setFrom(new InternetAddress(from));
			message.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(to));
			message.setSubject("TEST");
			message.setText("Das ist ein Test-Mail.");

			Transport transport = session.getTransport("smtps");
			transport.connect(host, port, username, password);
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();

			System.out.println("Nachricht gesendet!");

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
```

Bei der Ausführung sieht die Meldung wie folgt aus:

[XML]
DEBUG: JavaMail version 1.4.7
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,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtpauth.aaa.de", port 587, isSSL true
javax.mail.MessagingException: Could not connect to SMTP host: smtpauth.aaa.de, port: 587;
  nested exception is:
	java.net.ConnectException: Connection refused: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
	at javax.mail.Service.connect(Service.java:295)
	at email.EmailSender.main(EmailSender.java:55)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connect(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:321)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
	... 3 more

[/XML]

Woran könnte es noch liegen? Sieht jemand, was hier falsch ist?

Vielen Dank für jeden Tipp.


----------



## rmacher (29. Mrz 2014)

Nach langem suchen und probieren habe ich festgestellt, dass die bei mir verwendet Antivirus-Software (McAfee 8.7i) die Kommunikation aus irgendeinem Grund nicht erlaubt. Als ich dann den Zugriffsschutz deaktiviert habe, hat es funktioniert.

Ein guter Beitrag zum Thema Java Email: Java Program to send Email Using SMTP ? GMail, TLS, SSL, Attachment, Image Example


----------

