Envio de email em Kotlin: bibliotecas, exemplos e configuração SMTP

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 {

Recommendations