E-Mails in Java versenden: Schritt-für-Schritt-Anleitung
Das Versenden von E-Mails über eine Java-Anwendung ist grundsätzlich einfach, erfordert jedoch zunächst die Installation der JavaMail API und des Java Activation Framework (JAF) auf Ihrem System.
Erforderliche Bibliotheken herunterladen
- Laden Sie die neueste Version von JavaMail (Version 1.6.2 oder aktueller) von der offiziellen Eclipse-Website (vormals Java.net) herunter.
- Laden Sie die neueste Version von JAF (Version 1.1.1 oder aktueller) ebenfalls von der offiziellen Website herunter.
Entpacken Sie die heruntergeladenen Dateien. In den neu erstellten Verzeichnissen finden Sie mehrere JAR-Dateien. Sie müssen mail.jar und activation.jar (bzw. jakarta.activation-api.jar bei neueren Versionen) in Ihren CLASSPATH aufnehmen.
Einfache E-Mail versenden
Hier ist ein Beispiel zum Versenden einer einfachen E-Mail von Ihrem Rechner aus. Voraussetzung ist, dass Ihr localhost mit dem Internet verbunden ist und E-Mails versenden kann.
Beispiel: SendEmail.java
// Dateiname: SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String[] args) {
// Empfänger-E-Mail-Adresse
String to = "empfaenger@example.com";
// Absender-E-Mail-Adresse
String from = "absender@example.com";
// SMTP-Server (hier localhost)
String host = "localhost";
// Systemeigenschaften abrufen
Properties properties = System.getProperties();
// Mail-Server konfigurieren
properties.setProperty("mail.smtp.host", host);
// Standard-Session-Objekt erstellen
Session session = Session.getDefaultInstance(properties);
try {
// MimeMessage-Objekt erstellen
MimeMessage message = new MimeMessage(session);
// Absender setzen
message.setFrom(new InternetAddress(from));
// Empfänger setzen
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Betreff setzen
message.setSubject("Dies ist die Betreffzeile!");
// Nachrichtentext setzen
message.setText("Dies ist die eigentliche Nachricht");
// Nachricht senden
Transport.send(message);
System.out.println("Nachricht erfolgreich gesendet....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Kompilieren und Ausführen
$ javac SendEmail.java
$ java SendEmail
Nachricht erfolgreich gesendet....
An mehrere Empfänger senden
Um eine E-Mail an mehrere Empfänger zu senden, verwenden Sie die folgende Methode:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Parameter:
- type – Empfängertyp: TO, CC oder BCC (CC = Carbon Copy, BCC = Blind Carbon Copy). Beispiel: Message.RecipientType.TO
- addresses – Array von E-Mail-Adressen. Verwenden Sie InternetAddress() für jede Adresse.
HTML-E-Mail versenden
Dieses Beispiel zeigt, wie Sie eine HTML-formatierte E-Mail versenden. Der Unterschied zum vorherigen Beispiel besteht in der Verwendung der setContent()-Methode mit dem MIME-Type "text/html".
Beispiel: SendHTMLEmail.java
// Dateiname: SendHTMLEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail {
public static void main(String[] args) {
String to = "empfaenger@example.com";
String from = "absender@example.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Dies ist die Betreffzeile!");
// HTML-Inhalt setzen
message.setContent("<h1>Dies ist die eigentliche Nachricht</h1>", "text/html");
Transport.send(message);
System.out.println("HTML-Nachricht erfolgreich gesendet....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Ausgabe
$ java SendHTMLEmail
HTML-Nachricht erfolgreich gesendet....
E-Mail mit Anhang versenden
Hier lernen Sie, wie Sie eine E-Mail mit Dateianhang versenden.
Beispiel: SendFileEmail.java
// Dateiname: SendFileEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail {
public static void main(String[] args) {
String to = "empfaenger@example.com";
String from = "absender@example.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Betreff mit Anhang");
// Nachrichtenteil erstellen
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Dies ist der Nachrichtentext");
// Multipart-Container erstellen
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Anhang hinzufügen
messageBodyPart = new MimeBodyPart();
String filename = "datei.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// Komplette Nachricht setzen
message.setContent(multipart);
Transport.send(message);
System.out.println("E-Mail mit Anhang erfolgreich gesendet....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Ausgabe
$ java SendFileEmail
E-Mail mit Anhang erfolgreich gesendet....
Benutzerauthentifizierung
Falls der E-Mail-Server eine Authentifizierung erfordert, setzen Sie Benutzername und Passwort wie folgt:
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.user", "meinBenutzer");
props.setProperty("mail.password", "meinPasswort");
Der restliche Versandmechanismus bleibt unverändert. Beachten Sie, dass für produktive Umgebungen die Verwendung von Session.getInstance() mit einem Authenticator empfohlen wird.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList