E-Mail-Versand mit Kotlin: Bibliotheksübersicht und praktische Beispiele
Kotlin ist eine moderne Programmiersprache, die aktiv für die Entwicklung von Serveranwendungen, Backends und Microservices eingesetzt wird. Die Möglichkeit, programmatisch E-Mails zu versenden, ist eine Schlüsselfunktion für viele Projekte: Benachrichtigungen, Registrierungsbestätigungen, Newsletter. In diesem Artikel schauen wir uns an, wie man den E-Mail-Versand mit Kotlin organisiert, welche Bibliotheken verwendet werden und wie man eine SMTP-Verbindung einrichtet.
Hauptmethoden zum E-Mail-Versand in Kotlin
Da Kotlin auf der JVM läuft, können Sie alle Java-Bibliotheken nutzen. Die beliebteste und bewährteste Methode ist JavaMail (Jakarta Mail). Eine Alternative ist der Ktor Client (Teil des Ktor-Frameworks), der direkt mit SMTP arbeiten kann. Wir betrachten beide Ansätze.
1. E-Mail-Versand mit Jakarta Mail (JavaMail)
Jakarta Mail (früher JavaMail) ist die Standardbibliothek für die E-Mail-Verarbeitung im Java-Ökosystem. Für Kotlin ist sie ideal geeignet, da sie vollständig mit der JVM kompatibel ist. Sie müssen die Abhängigkeit in build.gradle.kts hinzufügen:
dependencies { implementation("com.sun.mail:jakarta.mail:2.0.1")}Nach dem Hinzufügen der Bibliothek können Sie eine einfache Versandfunktion schreiben:
import jakarta.mail.*import jakarta.mail.internet.InternetAddressimport jakarta.mail.internet.MimeMessageimport java.util.*
fun sendEmail( host: String, port: Int, username: String, password: String, from: String, to: String, subject: String, body: String) { val props = Properties().apply { put("mail.smtp.host", host) put("mail.smtp.port", port.toString()) put("mail.smtp.auth", "true") put("mail.smtp.starttls.enable", "true") }
val session = Session.getInstance(props, object : Authenticator() { override fun getPasswordAuthentication(): PasswordAuthentication { return PasswordAuthentication(username, password) } })
try { val message = MimeMessage(session).apply { setFrom(InternetAddress(from)) setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)) setSubject(subject) setText(body) } Transport.send(message) println("E-Mail erfolgreich an $to gesendet") } catch (e: MessagingException) { println("Fehler beim Senden: ${e.message}") }}Aufruf der Funktion:
fun main() { sendEmail( host = "smtp.gmail.com", port = 587, username = "youremail@gmail.com", password = "your-app-password", from = "youremail@gmail.com", to = "recipient@example.com", subject = "Hallo von Kotlin!", body = "Dies ist eine Test-E-Mail, gesendet über Kotlin und Jakarta Mail." )}2. E-Mail-Versand mit Anhängen (Jakarta Mail)
Um eine E-Mail mit einer Datei zu versenden, müssen Sie MimeBodyPart und MimeMultipart verwenden:
import jakarta.mail.internet.MimeBodyPartimport jakarta.mail.internet.MimeMultipartimport java.io.File
fun sendEmailWithAttachment( session: Session, from: String, to: String, subject: String, body: String, attachmentPath: String) { val message = MimeMessage(session).apply { setFrom(InternetAddress(from)) setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)) setSubject(subject) }
// Textteil val textPart = MimeBodyPart().apply { setText(body) }
// Anhang val attachmentPart = MimeBodyPart().apply { attachFile(File(attachmentPath)) }
// Multipart zusammenstellen val multipart = MimeMultipart().apply { addBodyPart(textPart)