Отправка email на Kotlin: библиотеки и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Отправка email на Kotlin: обзор библиотек и практические примеры

Kotlin — современный язык программирования, который активно используется для создания серверных приложений, бэкенда и микросервисов. Возможность программно отправлять электронные письма — одна из ключевых функций для многих проектов: уведомления, подтверждения регистрации, рассылки. В этой статье мы разберём, как организовать отправку email на Kotlin, какие библиотеки использовать и как настроить SMTP-соединение.

Основные способы отправки email в Kotlin

Поскольку Kotlin работает на JVM, вы можете использовать любые Java-библиотеки. Самый популярный и проверенный способ — JavaMail (Jakarta Mail). Альтернативный вариант — Ktor Client (часть фреймворка Ktor), который умеет работать с SMTP напрямую. Рассмотрим оба подхода.

1. Отправка email с помощью Jakarta Mail (JavaMail)

Jakarta Mail (ранее JavaMail) — стандартная библиотека для работы с email в экосистеме Java. Для Kotlin она подходит идеально, так как полностью совместима с JVM. Вам потребуется добавить зависимость в build.gradle.kts:

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

После добавления библиотеки можно написать простую функцию отправки:

import jakarta.mail.*
import jakarta.mail.internet.InternetAddress
import jakarta.mail.internet.MimeMessage
import 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 успешно отправлен на $to")
    } catch (e: MessagingException) {
        println("Ошибка отправки: ${e.message}")
    }
}

Вызов функции:

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 = "Привет из Kotlin!",
        body = "Это тестовое письмо, отправленное через Kotlin и Jakarta Mail."
    )
}

2. Отправка email с вложениями (Jakarta Mail)

Чтобы отправить письмо с файлом, нужно использовать MimeBodyPart и MimeMultipart:

import jakarta.mail.internet.MimeBodyPart
import jakarta.mail.internet.MimeMultipart
import 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)
    }

    // Текстовая часть
    val textPart = MimeBodyPart().apply {
        setText(body)
    }

    // Вложение
    val attachmentPart = MimeBodyPart().apply {
        attachFile(File(attachmentPath))
    }

    // Собираем multipart
    val multipart = MimeMultipart().apply {
        addBodyPart(textPart)
        addBodyPart(attachmentPart)
    }

    message.setContent(multipart)
    Transport.send(message)
}

3. Отправка email через Ktor Client

Ktor — асинхронный фреймворк для Kotlin. Для отправки email можно использовать клиентскую часть Ktor с поддержкой SMTP. Это хороший выбор, если вы уже используете Ktor в проекте. Добавьте зависимость в build.gradle.kts:

dependencies {
    implementation("io.ktor:ktor-client-core:2.3.0")
    implementation("io.ktor:ktor-client-cio:2.3.0")
    implementation("io.ktor:ktor-client-smtp:2.3.0")
}

Пример отправки письма с использованием Ktor:

import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.smtp.*
import io.ktor.client.request.*
import io.ktor.client.statement.*

suspend fun sendEmailViaKtor() {
    val client = HttpClient(CIO) {
        install(SmtpPlugin) {
            host = "smtp.gmail.com"                    

Рекомендаций