Envio de email em Kotlin: visão geral das ferramentas e exemplos de código
O envio de emails é uma das tarefas típicas no desenvolvimento web, notificações e serviços em segundo plano. No ecossistema Kotlin, que roda na JVM, é possível usar tanto bibliotecas Java clássicas quanto soluções modernas orientadas a Kotlin. Neste artigo, abordaremos três abordagens principais: javax.mail (Jakarta Mail), Ktor Client e Apache Commons Email. Você aprenderá como configurar um cliente SMTP, enviar um email simples e adicionar anexos.
1. javax.mail (Jakarta Mail) — padrão clássico
A biblioteca mais comum para trabalhar com email em Java e Kotlin. Ela suporta totalmente os protocolos SMTP, IMAP e POP3. Para um projeto Kotlin, basta adicionar a dependência no build.gradle.kts:
dependencies { implementation("com.sun.mail:javax.mail:1.6.2")}Exemplo de envio de um email de texto simples:
import javax.mail.*import javax.mail.internet.InternetAddressimport javax.mail.internet.MimeMessageimport java.util.Properties
fun sendSimpleEmail() { val props = Properties().apply { put("mail.smtp.auth", "true") put("mail.smtp.starttls.enable", "true") put("mail.smtp.host", "smtp.gmail.com") put("mail.smtp.port", "587") }
val session = Session.getInstance(props, object : Authenticator() { override fun getPasswordAuthentication(): PasswordAuthentication { return PasswordAuthentication("your-email@gmail.com", "your-password") } })
val message = MimeMessage(session).apply { setFrom(InternetAddress("from-email@gmail.com")) setRecipients(Message.RecipientType.TO, InternetAddress.parse("to-email@example.com")) subject = "Olá do Kotlin!" setText("Este é um email de teste enviado usando javax.mail.") }
Transport.send(message) println("Email enviado com sucesso!")}Importante: para o Gmail, será necessária uma senha de aplicativo ou OAuth2. Não armazene credenciais no código — use variáveis de ambiente.
Envio de email com anexo
import javax.activation.DataHandlerimport javax.activation.FileDataSourceimport javax.mail.internet.MimeBodyPartimport javax.mail.internet.MimeMultipart
fun sendEmailWithAttachment() { // ... configuração da session como acima ... val message = MimeMessage(session).apply { setFrom(InternetAddress("from@gmail.com")) setRecipients(Message.RecipientType.TO, InternetAddress.parse("to@example.com")) subject = "Email com anexo" }
val multipart = MimeMultipart()
// Parte de texto val textPart = MimeBodyPart().apply { setText("Veja o anexo.") } multipart.addBodyPart(textPart)
// Anexo val attachmentPart = MimeBodyPart().apply { dataHandler = DataHandler(FileDataSource("/path/to/file.pdf")) fileName = "documento.pdf" } multipart.addBodyPart(attachmentPart)
message.setContent(multipart) Transport.send(message)}2. Ktor Client — abordagem assíncrona moderna
Se o seu projeto já utiliza Ktor para requisições HTTP, você pode enviar emails via SMTP usando o plugin ktor-client-smtp. Isso oferece as vantagens de corrotinas e execução assíncrona. Dependência:
dependencies { implementation("io.ktor:ktor-client-core:2.3.0") implementation("io.ktor:ktor-client-smtp:2.3.0")}Exemplo de envio:
import io.ktor.client.*import io.ktor.client.smtp.*import io.ktor.client.request.*import io.ktor.client.statement.*
suspend fun sendViaKtor() { val client = HttpClient { Também na biblioteca
Métricas do Prometheus em Go (Golang): guia completo de monitoramento
Validação de dados em PHP com a biblioteca Respect\\Validation