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

Natürlich ist dies die einfachste aller Möglichkeiten, E-Mails zu verschicken; hier wurde keine Authentifikation auf dem SMTP-Server vorausgesetzt, die Mail wird nicht als CC an einen anderen geschickt und es gibt nur einen Empfänger. Zunächst zur Authentifikation. SMTP-Authentifikation (aka SMTP AUTH) verlangt, dass ein Benutzername und ein Passwort angegeben werden, damit die Mail verschickt werden darf. Bei JavaMail (siehe MailJavaMail2.java) muss man einen Authenticator erzeugen, der die Ausweise zurückgeben kann.

class ForcedAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication
(MailSettings.smtpUsername,MailSettings.smtpPassword);
}
}

Dann fügt man eine Instanz davon zu der Session hinzu, wenn man sie erzeugt.

Session session=Session.getDefaultInstance(props,new
ForcedAuthenticator());

Damit fällt man allerdings wahrscheinlich in eine Falle; tut man dies, wird die Standardsession an den Authenticator gebunden, und man braucht einen Verweis auf ihn, um die Session wiederzubekommen. Man sollte stattdessen Session.getInstance() benutzen, das eine einzige nicht geteilte Instanz erzeugt, doch muss man dann auch seine Session-Instanzen selbst managen.

Und jetzt die Herangehensweise von Commons E-Mail an die Authentifizierung (siehe MailCommons2.java). Man sieht da nur eine neue Zeile:

email.setAuthentication(MailSettings.smtpUsername,
MailSettings.smtpPassword);

wodurch das ganze Verfahren viel einfacher wird.

Es gibt noch eine andere Art von Authentifikation, POP-before-SMTP, die von Mail-Diensten verwendet wird, die kein SMTP AUTH implementieren; SMTP AUTH war eine spätere Erweiterung von SMTP, und POP-before-SMTP war ein Workaround, das passwortgeschütztes Abrufen von E-Mails mit der Möglichkeit, E-Mails zu verschicken, verbunden hat. POP-before-SMTP funktioniert, indem es Clients nur erlaubt, E-Mails zu verschicken, nachdem der Client auf einen passwortgeschützten POP-Mail-Server zugegriffen hat, und dies auch nur für eine bestimmte Zeit nach dem POP-Zugriff. Mit Javamail muss man den Code erzeugen, um eine POP-Mailbox zu öffnen, bevor die Mail abgeschickt wird, so dass man sich auch mit dem Empfang von E-Mails in Javamail befassen muss, um den es im nächsten Monat gehen soll. Mit Commons E-Mail ist es viel einfacher:

email.setPopBeforeSMTP(true,popHost,popUsername,
popPassword);

Damit werden alle Mechanismen aktiviert, die man für POP-before-SMTP braucht, ohne dass man auch nur daran denken müsste, den POP-Wust zu schreiben.

Wie setzt man CC-Empfänger in eine Mail? Die Message-Klasse in Javamail hat jetzt eine setRecipients-Methode, die einen String von InternetAddress nimmt; das ist nicht elegant, und es kann dazu führen, dass man durch die Mangel gedreht wird, wenn man nur einige E-Mail-Adressen hat (MailJavaMail3.java);

ArrayList ccs=new ArrayList();
for(String s:MailSettings.ccAddresses) ccs.add(new
InternetAddress(s));
message.setRecipients(Message.RecipientType.CC,
(InternetAddress[]) ccs.toArray(new
InternetAddress[ccs.size()]));

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

Digitale Produkte „cyberfit“ machen

Vernetzte Produkte müssen laut Cyber Resilience Act über Möglichkeiten zur Datenverschlüsselung und Zugangsverwaltung verfügen.

3 Tagen ago

Google schließt schwerwiegende Sicherheitslücken in Chrome 131

Das jüngste Update für Windows, macOS und Linux stopft drei Löcher. Eine Anfälligkeit setzt Nutzer…

3 Tagen ago

Apple schließt Zero-Day-Lücken in iOS, iPadOS und macOS

Zwei von Google-Mitarbeitern entdeckte Schwachstellen werden bereits aktiv gegen Mac-Systeme mit Intel-Prozessoren eingesetzt. Sie erlauben…

3 Tagen ago

Gefährliche Anzeigen für Passwortmanager Bitwarden verbreiten Malware

Die Hintermänner haben es unter anderem auf Daten von Facebook-Geschäftskonten abgesehen. Opfer werden über angebliche…

4 Tagen ago

Public Cloud: Gartner erwartet 2025 weltweite Ausgaben von 723 Milliarden Dollar

Bis 2027 werden 90 Prozent der Unternehmen eine Hybrid-Cloud-Strategie umsetzen.

4 Tagen ago

iPhone 15 ist bestverkauftes Smartphone im dritten Quartal

Apple belegt in der Statistik von Counterpoint die ersten drei Plätze. Samsungs Galaxy S24 schafft…

4 Tagen ago