Spezifikation / Library-APIIntegration2.1 / 2.1
Jakarta Mail und Activation
Jakarta Mail unterstützt E-Mail-Erzeugung und Versand; Activation liefert MIME-/Datentyp-Zugriff.
Einordnung
Spezifikation / Library-API
Enterprise-Rolle
Enterprise-Systeme nutzen Mail für Benachrichtigungen, Reports, Freigaben und technische Alarme.
Fachliches Verständnis
Enterprise-Systeme nutzen Mail für Benachrichtigungen, Reports, Freigaben und technische Alarme. In der Praxis ist wichtig, die Spezifikation nicht mit der konkreten Runtime zu verwechseln. Der Standard beschreibt die portablen APIs, die Implementierung entscheidet über Konfiguration, Performance, Betrieb und Support.
Kernkonzepte
- MimeMessage.
- Multipart und Attachments.
- Mail Session als Ressource.
- DataHandler und MIME Typen.
Typische Einsatzfälle
- Rechnung per E-Mail versenden.
- Technische Alarmierung.
- Dokumentanhänge erzeugen.
Technisches Beispiel
java
@ApplicationScoped
public class InvoiceMailService {
@Resource(lookup = "java:mail/Default") Session mailSession;
public void sendInvoice(String to, byte[] pdf) throws MessagingException {
MimeMessage msg = new MimeMessage(mailSession);
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSubject("Ihre Rechnung");
// Attachment und Body bewusst ausgelagert erzeugen.
Transport.send(msg);
}
}
Architekturregel: Jakarta APIs gehören an Systemgrenzen und Infrastrukturpunkte. Fachentscheidungen bleiben in Application Services und Domain-Modellen testbar und möglichst unabhängig vom Container.
Enterprise-Fallen
- Mailversand in Transaktion ohne Outbox.
- SMTP-Fehler ignorieren.
- HTML Mail ohne Sanitizing.
Legacy-Modernisierung
Alte JavaMail-Konfiguration wird auf jakarta.mail umgestellt; Versand sollte meist asynchron/outbox-basiert erfolgen.
Vertiefung: Review-Fragen für Senior-Entwickler
- Welche Spezifikation ist hier wirklich nötig?
- Welche Runtime-Funktion wird genutzt und ist sie portabel?
- Wo liegt die Transaktionsgrenze?
- Sind API-Verträge, DTOs und Domain-Modelle getrennt?
- Ist der Code ohne Application Server testbar?