E-Mails in Java verschicken: Es gibt mehr als eine Möglichkeit

Mit den Abstraktionen hat Javamail eine Address-Klasse, aus der andere Adress-Typen abgeleitet werden. Es geht hier aber nur um das Versenden von Internet-E-Mails, also muss man eine InternetAddress erzeugen, die die E-Mail-Adresse nimmt, von der die Mail kommen soll, und einen ‚persönlichen‘ Namen für die Anzeige. Jetzt muss noch angegeben werden, wohin die Mail gehen soll.

message.setRecipient(Message.RecipientType.TO,
new InternetAddress(MailSettings.toAddress));

Diese Abstraktion der Adressierung spielt auch hier eine Rolle; man legt einen Empfänger und die Art des Empfängers fest. Ab hier ist alles ganz einfach, zumindest, wenn es sich um Plaintext-E-Mails handelt. Man muss nur einen Betreff und einen Text in der Nachricht angeben und die Mail mit einem Zeitstempel versehen.

message.setSubject(MailSettings.messageSubject);
message.setText(MailSettings.messageBody1);
message.setSentDate(new Date());

Jetzt kann die Nachricht abgeschickt werden:

Transport.send(message);

Dieser Aufruf der Transport-Klasse sorgt dafür, dass die richtige Session gesucht und herausgefunden wird, wie die Nachricht verschickt werden muss, auch wenn das etwas konterintuitiv wirkt. Wenn das erledigt ist, ist die Mail verschickt. Man muss noch etwas Code ergänzen, um die Ausnahmen abzufangen, die Javamail ausgeben kann, AddressException, MessagingException und UnsupportedEncodingException. Dies ist allerdings der einfachste Javamail-Versand.

Wie sieht es aus, wenn man das Gleiche mit dem Apache Commons E-Mail-Paket (siehe MailCommons.java) macht? Commons E-Mail hat eine Reihe von Klassen, die darauf basieren, welche Art Mail man schicken möchte. Die einfachste ist die SimpleEmail-Klasse. Man muss keine Sessions oder Eigenschaften-Listen einrichten:

SimpleEmail email=new SimpleEmail();
email.setHostName(MailSettings.smtpHost);

Dies erzeugt die Mail und sagt ihr, dass sie über den angegebenen SMTP-Server verschickt werden soll. Weil Commons E-Mail nur Internet-E-Mail beherrscht, muss man sich auch nicht mit dem Erzeugen von InternetAddress abmühen. Man kann die Adresse des Absenders einfach wie folgt setzen:

email.setFrom(MailSettings.fromAddress,
MailSettings.fromName);

Statt Empfänger-Typen anzugeben, muss man lediglich eine Adresse in die Liste einfügen:

email.addTo(MailSettings.toAddress);

Es ist ebenso einfach, den Betreff und den Text der Nachricht zu setzen.

email.setSubject(MailSettings.messageSubject);
email.setMsg(MailSettings.messageBody1);
email.send();

Und alles, was man als mögliche Ausnahme abfangen muss, ist EmailException. Man sollte also einsehen können, dass die Sache erheblich einfacher und leichter zu lesen sein wird, wenn man das System und das Session-Management versteckt.

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

Quantennetzwerk für sichere Kommunikation

Eine Glasfaser-Teststrecke am Karlsruher Institut für Technologie (KIT) soll Entwicklung von Quantennetzwerktechnologien fördern.

2 Tagen ago

Top-Malware im Januar: Infostealer Formbook kehrt zurück

Formbook ist für 16,5 Prozent der Malware-Infektion in Deutschland verantwortlich. Zudem registriert Check Point eine…

4 Tagen ago

Apple droht Ärger mit dem Bundeskartellamt

Die Wettbewerbshüter nehmen Apples App Tracking Transparency Framework ins Visier. Sie werfen Apple vor, damit…

5 Tagen ago

Phishing-Betrug zum Valentinstag nimmt zu

Im Januar werden über 18.000 neue Websites zum Thema Liebe und Valentinstag registriert. Auch die…

5 Tagen ago

Sicherheitslücke in AWS erlaubt Angriffe auf Amazon-Cloud-Instanzen

Angreifer schleusen schädliche Amazon Machine Images ein und tarnen diese als offizielle AWS-Images. Sie erhalten…

6 Tagen ago

Google stopft schwerwiegende Sicherheitslöcher in Chrome 133

Chrome für Windows, macOS und Linux sind angreifbar. Für eine der vier Schwachstelle zahlt Google…

6 Tagen ago