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));
Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…
Security-Experten von Check Point sind einer neuen Angriffsart auf die Spur gekommen, die E-Mail-Schutzmaßnahmen umgehen…
Hinter 84 Prozent der Zwischenfälle bei Herstellern stecken Schwachstellen in der Lieferkette. Auf dem Vormarsch…
Es kommt angeblich 2028 auf den Markt. Das aufgeklappte Gerät soll die Displayfläche von zwei…
Das System basiert auf Hardware von HPE-Cray und Nvidia. Die Inbetriebnahme erfolgt 2027.
Die Bundesnetzagentur hat ihr Gigabit-Grundbuch aktualisiert. Drei von vier Haushalten sollen jetzt Zugang zu Breitbandanschlüssen…