Envío de correo electrónico en Kotlin: guía completa de bibliotecas y herramientas
El envío de correos electrónicos es una de las tareas clave en las aplicaciones web modernas: desde la confirmación de registro hasta notificaciones y boletines de marketing. Kotlin, como lenguaje moderno para JVM, ofrece varios enfoques para trabajar con el correo. En este artículo analizaremos tres opciones principales: el clásico JavaMail, el asíncrono Ktor Client y el servicio en la nube SendGrid. Aprenderá a enviar correos de texto plano y HTML, adjuntar archivos y manejar errores.
1. JavaMail — el estándar probado
JavaMail es la biblioteca estándar para trabajar con correo electrónico en el ecosistema Java/Kotlin. Soporta los protocolos SMTP, POP3 e IMAP, así como cifrado SSL/TLS. Para un proyecto Kotlin, basta con agregar la dependencia en build.gradle.kts:
dependencies { implementation("com.sun.mail:jakarta.mail:2.0.1")}Ejemplo de envío de un correo de texto plano a través de SMTP con autenticación:
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 = "¡Saludos desde Kotlin!" setText("Este es un correo de prueba enviado con JavaMail.") } Transport.send(message) println("¡Correo enviado exitosamente!") } catch (e: MessagingException) { println("Error al enviar: ${e.message}") }}Importante: Para Gmail es necesario usar una contraseña de aplicación (App Password), no la contraseña principal. También se puede configurar SMTP para Yandex, Mail.ru o su propio servidor.
2. Ktor Client — enfoque asíncrono
Si utiliza el framework Ktor para crear aplicaciones web, puede enviar correos electrónicos mediante solicitudes HTTP a APIs de correo (por ejemplo, Mailgun, SendGrid, Postmark). Esto es conveniente para servicios asíncronos y arquitectura de microservicios.
Agregue la dependencia:
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")}Ejemplo de envío de correo a través de la API de 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) { También en la biblioteca
Prisma para TypeScript: guía completa con ejemplos
Twig para PHP: guía completa con ejemplos prácticos
Trabajo con S3 y almacenamiento en la nube en Swift (iOS/macOS): AWSS3 y Amplify