E-Mail-Versand mit Kotlin: Werkzeugübersicht und Codebeispiele
Das Versenden von E-Mails ist eine typische Aufgabe in der Webentwicklung, bei Benachrichtigungen und Hintergrunddiensten. Im Kotlin-Ökosystem, das auf der JVM läuft, können sowohl klassische Java-Bibliotheken als auch moderne Kotlin-orientierte Lösungen verwendet werden. In diesem Artikel betrachten wir drei Hauptansätze: javax.mail (Jakarta Mail), Ktor Client und Apache Commons Email. Sie erfahren, wie Sie einen SMTP-Client konfigurieren, eine einfache E-Mail senden und Anhänge hinzufügen.
1. javax.mail (Jakarta Mail) – der klassische Standard
Die am weitesten verbreitete Bibliothek für die Arbeit mit E-Mails in Java und Kotlin. Sie unterstützt die Protokolle SMTP, IMAP und POP3 vollständig. Für ein Kotlin-Projekt fügen Sie einfach die Abhängigkeit in build.gradle.kts hinzu:
dependencies { implementation("com.sun.mail:javax.mail:1.6.2")}Beispiel zum Senden einer einfachen Text-E-Mail:
import javax.mail.*import javax.mail.internet.InternetAddressimport javax.mail.internet.MimeMessageimport java.util.Properties
fun sendSimpleEmail() { val props = Properties().apply { put("mail.smtp.auth", "true") put("mail.smtp.starttls.enable", "true") put("mail.smtp.host", "smtp.gmail.com") put("mail.smtp.port", "587") }
val session = Session.getInstance(props, object : Authenticator() { override fun getPasswordAuthentication(): PasswordAuthentication { return PasswordAuthentication("your-email@gmail.com", "your-password") } })
val message = MimeMessage(session).apply { setFrom(InternetAddress("from-email@gmail.com")) setRecipients(Message.RecipientType.TO, InternetAddress.parse("to-email@example.com")) subject = "Hallo von Kotlin!" setText("Dies ist eine Test-E-Mail, gesendet mit javax.mail.") }
Transport.send(message) println("E-Mail erfolgreich gesendet!")}Wichtig: Für Gmail benötigen Sie ein App-Passwort oder OAuth2. Speichern Sie Anmeldedaten nicht im Code – verwenden Sie Umgebungsvariablen.
E-Mail mit Anhang senden
import javax.activation.DataHandlerimport javax.activation.FileDataSourceimport javax.mail.internet.MimeBodyPartimport javax.mail.internet.MimeMultipart
fun sendEmailWithAttachment() { // ... session-Konfiguration wie oben ... val message = MimeMessage(session).apply { setFrom(InternetAddress("from@gmail.com")) setRecipients(Message.RecipientType.TO, InternetAddress.parse("to@example.com")) subject = "E-Mail mit Anhang" }
val multipart = MimeMultipart()
// Textteil val textPart = MimeBodyPart().apply { setText("Siehe Anhang.") } multipart.addBodyPart(textPart)
// Anhang val attachmentPart = MimeBodyPart().apply { dataHandler = DataHandler(FileDataSource("/path/to/file.pdf")) fileName = "dokument.pdf" } multipart.addBodyPart(attachmentPart)
message.setContent(multipart) Transport.send(message)}2. Ktor Client – moderner asynchroner Ansatz
Wenn Ihr Projekt bereits Ktor für HTTP-Anfragen verwendet, können Sie E-Mails über SMTP mit dem Plugin ktor-client-smtp senden. Dies bietet die Vorteile von Koroutinen und asynchroner Ausführung. Abhängigkeit:
dependencies { implementation("io.ktor:ktor-client-core:2.3.0") implementation("io.ktor:ktor-client-smtp:2.3.0")}Beispiel zum Senden:
import io.ktor.client.*import io.ktor.client.smtp.*import io.ktor.client.request.*import io.ktor.client.statement.*
suspend fun sendViaKtor() { val client = HttpClient { Auch in der Bibliothek
Mongoose Paginate JavaScript (Node.js): Komplettanleitung mit Beispielen
Marten C# (.NET): Komplettguide mit Beispielen
Juniper: Erstellung effizienter GraphQL-APIs in Rust
Konfiguration von Rust-Anwendungen: Bibliotheken config, envy und dotenvy
SMS-Versand mit TypeScript: API-Bibliotheken und Integration