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

Um den Unterschied zwischen dem Javamail-API und Apache Commons E-Mail zu begreifen, muss man wissen, dass die Commons E-Mail-Bibliothek ein Wrapper um das Javamail-API ist. Man braucht also, unabhängig davon, welches API man wählt, die Javamail-Bibliotheken. Man benötigt außerdem das Javabeans Activation Framework (JAF), das die komplexeren Content-Funktionen von Mail handhabt. Zuletzt steht Commons E-Mail auf der Liste der Bibliotheken. Man muss mail.jar aus der Javamail-Bibliothek, activation.jar aus JAF und commons-email-1.0.jar aus Commons E-Mail in den Klassenpfad eintragen.

Damit hat man die Werkzeuge zusammen und kann anfangen, eine einfache E-Mail mit Javamail zu verschicken. Im Beispielcode wurden sämtliche Einstellungen in eine einzige statische Klasse, MailSettings, zusammengezogen, damit man den Code leichter vergleichen kann.

Man braucht noch etwas, bevor man mit dem Versenden von E-Mails beginnen kann, und zwar den Host-Namen des SMTP-Servers. Der SMTP-Server ist der Rechner, der die Mails in die weite Welt verschickt.

Javamail arbeitet mit dem Konzept einer Session-Klasse, um Einstellungen wie den SMTP-Host und die Authentifizierung zu halten. Die zugrunde liegende Idee ist, dass Sessions innerhalb der Java Virtual Machine isoliert werden können und dass dadurch bösartiger Code daran gehindert wird, die Session eines anderen zu übernehmen und seine Authentifizierung auszulesen, die Benutzernamen und Passwörter enthalten kann. „Aber“, könnte man sagen, „ich lasse zur selben Zeit immer nur eine Applikation in meiner JVM laufen und traue meinem ganzen Code.“ Javamail wurde mit der Vorstellung von großen E-Mail-Systemen entwickelt und verfügt über ein entsprechendes Niveau an Komplexität, um das zu managen, was man für einfachere Anwendungen schließlich umgehen wird. So bekommt man eine Session:

Properties props=new Properties();
props.put("mail.smtp.host",MailSettings.smtpHost);
Session session=Session.getDefaultInstance(props,null);

Man erzeugt nicht neue Sessions, man bekommt sie von der Session Factory und man übergibt ihr anhand einer Properties-Instanz Parameter. Hier wird nur der SMTP-Host eingestellt und übergeben. Bekommt man die Standard-Instanz, wird eine einzige freigegebene Session erzeugt. Jetzt kann man eine Mail-Nachricht erzeugen, die diese Session verwendet.

Message message=new MimeMessage(session);

Javamail hat eine Message-Klasse, für die alle Arten von Nachrichten Unterklassen sind. Wenn man sich das Javamail-API anschaut, sieht man, dass es dort nur eine Unterklasse gibt: MimeMessage. Javamail wurde als genuines E-Mail-System entwickelt, daher die scheinbar redundante Abstraktion. Wie auch immer, es wurde eine MimeMessage mit dieser Session erzeugt, und die muss jetzt bevölkert werden.

message.setFrom(new InternetAddress(MailSettings.fromAddress,
MailSettings.fromName));

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

Google schließt Zero-Day-Lücke in Chrome

Von ihr geht ein hohes Risiko aus. Angreifbar sind Chrome für Windows, macOS und Linux.

3 Tagen ago

KI erkennt Emotionen in echten Sportsituationen

Forschende des KIT haben ein Modell zur Emotionsanalyse entwickelt, das affektive Zustände ähnlich genau wie…

3 Tagen ago

Ermittlern gelingt weiterer Schlag gegen Ransomware-Gruppe LockBit

Sie decken die Identität des Kopfs der Gruppe auf. Britische Behörden fahnden mit einem Foto…

4 Tagen ago

Apple stellt neuen Mobilprozessor M4 vor

Er treibt das neue iPad Pro mit OLED-Display an. Apple verspricht eine deutliche Leistungssteigerung gegenüber…

5 Tagen ago

Cyberabwehr: Mindestens zwei kritische Vorfälle pro Tag

Davon entfällt ein Viertel auf staatliche Einrichtungen und 12 Prozent auf Industrieunternehmen.

5 Tagen ago

Tunnelvision: Exploit umgeht VPN-Verschlüsselung

Forscher umgehen die Verschlüsselung und erhalten Zugriff auf VPN-Datenverkehr im Klartext. Für ihren Angriff benötigen…

5 Tagen ago