Envoi d'email en Kotlin : aperçu des bibliothèques et exemples pratiques
Kotlin est un langage de programmation moderne activement utilisé pour créer des applications serveur, du backend et des microservices. La possibilité d'envoyer des emails par programmation est l'une des fonctions clés pour de nombreux projets : notifications, confirmations d'inscription, newsletters. Dans cet article, nous allons voir comment organiser l'envoi d'email en Kotlin, quelles bibliothèques utiliser et comment configurer une connexion SMTP.
Principales méthodes d'envoi d'email en Kotlin
Puisque Kotlin fonctionne sur la JVM, vous pouvez utiliser n'importe quelle bibliothèque Java. La méthode la plus populaire et éprouvée est JavaMail (Jakarta Mail). Une alternative est Ktor Client (partie du framework Ktor), qui peut fonctionner directement avec SMTP. Examinons les deux approches.
1. Envoi d'email avec Jakarta Mail (JavaMail)
Jakarta Mail (anciennement JavaMail) est la bibliothèque standard pour travailler avec les emails dans l'écosystème Java. Elle est parfaitement adaptée à Kotlin car entièrement compatible avec la JVM. Vous devrez ajouter la dépendance dans build.gradle.kts :
dependencies { implementation("com.sun.mail:jakarta.mail:2.0.1")}Après avoir ajouté la bibliothèque, vous pouvez écrire une simple fonction d'envoi :
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("Email envoyé avec succès à $to") } catch (e: MessagingException) { println("Erreur d'envoi : ${e.message}") }}Appel de la fonction :
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 = "Bonjour depuis Kotlin!", body = "Ceci est un email de test envoyé via Kotlin et Jakarta Mail." )}2. Envoi d'email avec pièces jointes (Jakarta Mail)
Pour envoyer un email avec un fichier, vous devez utiliser MimeBodyPart et MimeMultipart :
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) }
// Partie texte val textPart = MimeBodyPart().apply { setText(body) }
// Pièce jointe val attachmentPart = MimeBodyPart().apply { attachFile(File(attachmentPath)) }
// Assemblage du multipart val multipart = MimeMultipart().apply { addBodyPart(textPart)