Envío de correo electrónico en Kotlin: bibliotecas y ejemplos de código

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 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) {

Recommendations