Envoi d'email en Kotlin : bibliothèques, exemples et configuration SMTP

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Envoi d'email en Kotlin : aperçu des outils et exemples de code



L'envoi d'emails est l'une des tâches typiques dans le développement web, les notifications et les services d'arrière-plan. Dans l'écosystème Kotlin, fonctionnant sur JVM, on peut utiliser à la fois les bibliothèques Java classiques et les solutions modernes orientées Kotlin. Dans cet article, nous allons examiner trois approches principales : javax.mail (Jakarta Mail), Ktor Client et Apache Commons Email. Vous apprendrez à configurer un client SMTP, envoyer un email simple et ajouter des pièces jointes.



1. javax.mail (Jakarta Mail) — le standard classique

La bibliothèque la plus courante pour travailler avec les emails en Java et Kotlin. Elle prend entièrement en charge les protocoles SMTP, IMAP et POP3. Pour un projet Kotlin, il suffit d'ajouter la dépendance dans build.gradle.kts :

dependencies {    implementation("com.sun.mail:javax.mail:1.6.2")}


Exemple d'envoi d'un email texte simple :

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 = "Bonjour depuis Kotlin !" setText("Ceci est un email de test envoyé avec javax.mail.") }

Transport.send(message) println("Email envoyé avec succès !")}


Important : pour Gmail, vous aurez besoin d'un mot de passe d'application ou d'OAuth2. Ne stockez pas les identifiants dans le code — utilisez des variables d'environnement.



Envoi d'un email avec pièce jointe

import javax.activation.DataHandlerimport javax.activation.FileDataSourceimport javax.mail.internet.MimeBodyPartimport javax.mail.internet.MimeMultipart

fun sendEmailWithAttachment() { // ... configuration de session comme ci-dessus ... val message = MimeMessage(session).apply { setFrom(InternetAddress("from@gmail.com")) setRecipients(Message.RecipientType.TO, InternetAddress.parse("to@example.com")) subject = "Email avec pièce jointe" }

val multipart = MimeMultipart()

// Partie texte val textPart = MimeBodyPart().apply { setText("Regardez la pièce jointe.") } multipart.addBodyPart(textPart)

// Pièce jointe val attachmentPart = MimeBodyPart().apply { dataHandler = DataHandler(FileDataSource("/chemin/vers/fichier.pdf")) fileName = "document.pdf" } multipart.addBodyPart(attachmentPart)

message.setContent(multipart) Transport.send(message)}


2. Ktor Client — approche asynchrone moderne

Si votre projet utilise déjà Ktor pour les requêtes HTTP, vous pouvez envoyer des emails via SMTP en utilisant le plugin ktor-client-smtp. Cela offre les avantages des coroutines et de l'exécution asynchrone. Dépendance :

dependencies {    implementation("io.ktor:ktor-client-core:2.3.0")    implementation("io.ktor:ktor-client-smtp:2.3.0")}


Exemple d'envoi :

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 {

Recommendations