Envio de email em Kotlin: guia completo de bibliotecas e ferramentas
O envio de email é uma das tarefas essenciais em aplicações web modernas: desde confirmação de cadastro até notificações e campanhas de marketing. Kotlin, como uma linguagem moderna para JVM, oferece várias abordagens para trabalhar com email. Neste artigo, abordaremos três opções principais: o clássico JavaMail, o assíncrono Ktor Client e o serviço em nuvem SendGrid. Você aprenderá a enviar emails simples de texto e HTML, anexar arquivos e tratar erros.
1. JavaMail — o padrão consolidado
JavaMail é a biblioteca padrão para trabalhar com email no ecossistema Java/Kotlin. Ela suporta os protocolos SMTP, POP3 e IMAP, além de criptografia SSL/TLS. Para um projeto Kotlin, basta adicionar a dependência no build.gradle.kts:
dependencies { implementation("com.sun.mail:jakarta.mail:2.0.1")}Exemplo de envio de um email simples de texto via SMTP com autenticação:
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 = "Olá do Kotlin!" setText("Este é um email de teste enviado com JavaMail.") } Transport.send(message) println("Email enviado com sucesso!") } catch (e: MessagingException) { println("Erro ao enviar: ${e.message}") }}Importante: Para o Gmail, é necessário usar uma senha de aplicativo (App Password), e não a senha principal. Você também pode configurar SMTP para Yandex, Mail.ru ou seu próprio servidor.
2. Ktor Client — abordagem assíncrona
Se você utiliza o framework Ktor para criar aplicações web, pode enviar emails por meio de requisições HTTP para APIs de email (por exemplo, Mailgun, SendGrid, Postmark). Isso é conveniente para serviços assíncronos e arquitetura de microsserviços.
Adicione a dependência:
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")}Exemplo de envio de email via API do 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) {