Envío de email en Kotlin: bibliotecas, ejemplos y configuración SMTP

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de email en Kotlin: resumen de herramientas y ejemplos de código



El envío de correos electrónicos es una de las tareas típicas en el desarrollo web, notificaciones y servicios en segundo plano. En el ecosistema de Kotlin, que funciona en JVM, se pueden utilizar tanto bibliotecas Java clásicas como soluciones modernas orientadas a Kotlin. En este artículo analizaremos tres enfoques principales: javax.mail (Jakarta Mail), Ktor Client y Apache Commons Email. Aprenderá a configurar un cliente SMTP, enviar un correo simple y añadir adjuntos.



1. javax.mail (Jakarta Mail) — el estándar clásico

La biblioteca más común para trabajar con email en Java y Kotlin. Soporta completamente los protocolos SMTP, IMAP y POP3. Para un proyecto Kotlin, basta con añadir la dependencia en build.gradle.kts:

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


Ejemplo de envío de un correo de texto 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 = "¡Hola desde Kotlin!" setText("Este es un correo de prueba enviado con javax.mail.") }

Transport.send(message) println("¡Correo enviado con éxito!")}


Importante: para Gmail se necesitará una contraseña de aplicación o OAuth2. No almacene credenciales en el código — use variables de entorno.



Envío de correo con adjunto

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

fun sendEmailWithAttachment() { // ... configuración de session como arriba ... val message = MimeMessage(session).apply { setFrom(InternetAddress("from@gmail.com")) setRecipients(Message.RecipientType.TO, InternetAddress.parse("to@example.com")) subject = "Correo con adjunto" }

val multipart = MimeMultipart()

// Parte de texto val textPart = MimeBodyPart().apply { setText("Mire el adjunto.") } multipart.addBodyPart(textPart)

// Adjunto val attachmentPart = MimeBodyPart().apply { dataHandler = DataHandler(FileDataSource("/path/to/file.pdf")) fileName = "documento.pdf" } multipart.addBodyPart(attachmentPart)

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


2. Ktor Client — enfoque asíncrono moderno

Si su proyecto ya utiliza Ktor para solicitudes HTTP, puede enviar correos electrónicos a través de SMTP usando el plugin ktor-client-smtp. Esto ofrece las ventajas de las corrutinas y la ejecución asíncrona. Dependencia:

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


Ejemplo de envío:

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