Envio de email em Kotlin: visão geral das bibliotecas e exemplos práticos
Kotlin é uma linguagem de programação moderna, amplamente utilizada para criar aplicações server-side, backend e microsserviços. A capacidade de enviar emails programaticamente é uma das funções-chave para muitos projetos: notificações, confirmações de registro, newsletters. Neste artigo, vamos abordar como organizar o envio de email em Kotlin, quais bibliotecas usar e como configurar a conexão SMTP.
Principais formas de enviar email em Kotlin
Como o Kotlin roda na JVM, você pode usar qualquer biblioteca Java. A forma mais popular e testada é JavaMail (Jakarta Mail). Uma alternativa é o Ktor Client (parte do framework Ktor), que pode trabalhar diretamente com SMTP. Vamos analisar ambas as abordagens.
1. Envio de email com Jakarta Mail (JavaMail)
Jakarta Mail (anteriormente JavaMail) é a biblioteca padrão para trabalhar com email no ecossistema Java. Para Kotlin, ela é ideal, pois é totalmente compatível com a JVM. Você precisará adicionar a dependência no build.gradle.kts:
dependencies { implementation("com.sun.mail:jakarta.mail:2.0.1")}Após adicionar a biblioteca, você pode escrever uma função simples de envio:
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("Email enviado com sucesso para $to") } catch (e: MessagingException) { println("Erro ao enviar: ${e.message}") }}Chamada da função:
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 = "Olá do Kotlin!", body = "Este é um email de teste enviado via Kotlin e Jakarta Mail." )}2. Envio de email com anexos (Jakarta Mail)
Para enviar um email com arquivo, você precisa usar MimeBodyPart e 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) }
// Anexo val attachmentPart = MimeBodyPart().apply { attachFile(File(attachmentPath)) }
// Montando o multipart val multipart = MimeMultipart().apply { addBodyPart(textPart) Também na biblioteca
Compression em JavaScript (Node.js): guia completo com exemplos
Frameworks CLI para TypeScript: visão geral completa e exemplos de uso
Configuração de aplicativos Swift: biblioteca SwiftyConfig
Validação de dados em TypeScript: Zod, Yup e outras ferramentas