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 { Aussi dans la bibliothèque
Générateur de QR codes en JavaScript (Node.js) avec qrcode et qr-image
Bibliothèque standard JavaScript (Node.js) : aperçu complet
opentelemetry-go pour Go : guide complet avec exemples
Migrations de bases de données en C++ : aperçu des outils et bibliothèques