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: descripción general de bibliotecas y ejemplos prácticos



Kotlin es un lenguaje de programación moderno que se utiliza activamente para crear aplicaciones de servidor, backend y microservicios. La capacidad de enviar correos electrónicos programáticamente es una de las funciones clave para muchos proyectos: notificaciones, confirmaciones de registro, boletines. En este artículo, analizaremos cómo organizar el envío de correos electrónicos en Kotlin, qué bibliotecas usar y cómo configurar una conexión SMTP.



Formas principales de enviar correo electrónico en Kotlin



Dado que Kotlin se ejecuta en la JVM, puede usar cualquier biblioteca de Java. La forma más popular y probada es JavaMail (Jakarta Mail). Una alternativa es Ktor Client (parte del framework Ktor), que puede trabajar con SMTP directamente. Analicemos ambos enfoques.



1. Envío de correo electrónico con Jakarta Mail (JavaMail)



Jakarta Mail (anteriormente JavaMail) es una biblioteca estándar para trabajar con correo electrónico en el ecosistema Java. Es perfecta para Kotlin, ya que es totalmente compatible con la JVM. Deberá agregar la dependencia en build.gradle.kts:



dependencies {    implementation("com.sun.mail:jakarta.mail:2.0.1")}


Después de agregar la biblioteca, puede escribir una función de envío simple:



import jakarta.mail.*import jakarta.mail.internet.InternetAddressimport jakarta.mail.internet.MimeMessageimport java.util.*

fun sendEmail( host: String, port: Int, username: String, password: String, from: String, to: String, subject: String, body: String) { val props = Properties().apply { put("mail.smtp.host", host) put("mail.smtp.port", port.toString()) put("mail.smtp.auth", "true") put("mail.smtp.starttls.enable", "true") }

val session = Session.getInstance(props, object : Authenticator() { override fun getPasswordAuthentication(): PasswordAuthentication { return PasswordAuthentication(username, password) } })

try { val message = MimeMessage(session).apply { setFrom(InternetAddress(from)) setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)) setSubject(subject) setText(body) } Transport.send(message) println("Correo electrónico enviado exitosamente a $to") } catch (e: MessagingException) { println("Error al enviar: ${e.message}") }}


Llamada a la función:



fun main() {    sendEmail(        host = "smtp.gmail.com",        port = 587,        username = "youremail@gmail.com",        password = "your-app-password",        from = "youremail@gmail.com",        to = "recipient@example.com",        subject = "¡Hola desde Kotlin!",        body = "Este es un correo de prueba enviado a través de Kotlin y Jakarta Mail."    )}


2. Envío de correo electrónico con archivos adjuntos (Jakarta Mail)



Para enviar un correo con un archivo, debe usar MimeBodyPart y MimeMultipart:



import jakarta.mail.internet.MimeBodyPartimport jakarta.mail.internet.MimeMultipartimport java.io.File

fun sendEmailWithAttachment( session: Session, from: String, to: String, subject: String, body: String, attachmentPath: String) { val message = MimeMessage(session).apply { setFrom(InternetAddress(from)) setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)) setSubject(subject) }

// Parte de texto val textPart = MimeBodyPart().apply { setText(body) }

// Archivo adjunto val attachmentPart = MimeBodyPart().apply { attachFile(File(attachmentPath)) }

// Ensamblamos multipart val multipart = MimeMultipart().apply { addBodyPart(textPart)

Recommendations