Envoi d'email en Kotlin : guide complet des bibliothèques et outils
L'envoi d'email est l'une des tâches clés dans les applications web modernes : de la confirmation d'inscription aux notifications et campagnes marketing. Kotlin, en tant que langage moderne pour la JVM, propose plusieurs approches pour travailler avec la messagerie. Dans cet article, nous allons examiner trois options principales : le classique JavaMail, l'asynchrone Ktor Client et le service cloud SendGrid. Vous apprendrez à envoyer des emails texte simples et HTML, à joindre des fichiers et à gérer les erreurs.
1. JavaMail — le standard éprouvé
JavaMail est la bibliothèque standard pour travailler avec les emails dans l'écosystème Java/Kotlin. Elle prend en charge les protocoles SMTP, POP3 et IMAP, ainsi que le chiffrement SSL/TLS. Pour un projet Kotlin, il suffit d'ajouter la dépendance dans build.gradle.kts :
dependencies { implementation("com.sun.mail:jakarta.mail:2.0.1")}Exemple d'envoi d'un email texte simple via SMTP avec authentification :
import jakarta.mail.*import jakarta.mail.internet.InternetAddressimport jakarta.mail.internet.MimeMessageimport java.util.Properties
fun sendEmailViaJavaMail() { val props = Properties().apply { put("mail.smtp.host", "smtp.gmail.com") put("mail.smtp.port", "587") put("mail.smtp.auth", "true") put("mail.smtp.starttls.enable", "true") }
val session = Session.getInstance(props, object : Authenticator() { override fun getPasswordAuthentication(): PasswordAuthentication { return PasswordAuthentication("your-email@gmail.com", "your-app-password") } })
try { val message = MimeMessage(session).apply { setFrom(InternetAddress("your-email@gmail.com")) setRecipient(Message.RecipientType.TO, InternetAddress("recipient@example.com")) subject = "Bonjour depuis Kotlin !" setText("Ceci est un email de test envoyé avec JavaMail.") } Transport.send(message) println("Email envoyé avec succès !") } catch (e: MessagingException) { println("Erreur d'envoi : ${e.message}") }}Important : Pour Gmail, il faut utiliser un mot de passe d'application (App Password), et non le mot de passe principal. Vous pouvez également configurer SMTP pour Yandex, Mail.ru ou votre propre serveur.
2. Ktor Client — approche asynchrone
Si vous utilisez le framework Ktor pour créer des applications web, vous pouvez envoyer des emails via des requêtes HTTP vers des API de messagerie (par exemple, Mailgun, SendGrid, Postmark). C'est pratique pour les services asynchrones et l'architecture microservices.
Ajoutez la dépendance :
dependencies { implementation("io.ktor:ktor-client-core:2.3.7") implementation("io.ktor:ktor-client-cio:2.3.7") implementation("io.ktor:ktor-client-content-negotiation:2.3.7") implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")}Exemple d'envoi d'email via l'API SendGrid :
import io.ktor.client.*import io.ktor.client.call.*import io.ktor.client.plugins.contentnegotiation.*import io.ktor.client.request.*import io.ktor.http.*import io.ktor.serialization.kotlinx.json.*import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json
@Serializabledata class EmailRequest( val personalizations: List<Personalization>, val from: EmailAddress, val subject: String, val content: List<Content>)
@Serializabledata class Personalization(val to: List<EmailAddress>)
@Serializabledata class EmailAddress(val email: String)
@Serializabledata class Content(val type: String, val value: String)
suspend fun sendEmailViaSendGrid() { val client = HttpClient(CIO) { install(ContentNegotiation) {