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

Alphabet übertrifft die Erwartungen im ersten Quartal

Der Umsatz steigt um 15 Prozent, der Nettogewinn um 57 Prozent. Im nachbörslichen Handel kassiert…

2 Tagen ago

Microsoft steigert Umsatz und Gewinn im dritten Fiskalquartal

Aus 61,9 Milliarden Dollar generiert das Unternehmen einen Nettoprofit von 21,9 Milliarden Dollar. Das größte…

2 Tagen ago

Digitalisierung! Aber wie?

Mehr Digitalisierung wird von den Unternehmen gefordert. Für KMU ist die Umsetzung jedoch nicht trivial,…

2 Tagen ago

Meta meldet Gewinnsprung im ersten Quartal

Der Nettoprofi wächst um 117 Prozent. Auch beim Umsatz erzielt die Facebook-Mutter ein deutliches Plus.…

3 Tagen ago

Maximieren Sie Kundenzufriedenheit mit strategischem, kundenorientiertem Marketing

Vom Standpunkt eines Verbrauchers aus betrachtet, stellt sich die Frage: Wie relevant und persönlich sind…

3 Tagen ago

Chatbot-Dienst checkt Nachrichteninhalte aus WhatsApp-Quellen

Scamio analysiert und bewertet die Gefahren und gibt Anwendern Ratschläge für den Umgang mit einer…

3 Tagen ago