在 Kotlin 中发送电子邮件:库和代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Kotlin 中发送电子邮件:库和工具完整指南



发送电子邮件是现代网络应用程序中的关键任务之一:从注册确认到通知和营销邮件。Kotlin 作为一种面向 JVM 的现代语言,提供了多种处理邮件的方法。在本文中,我们将介绍三种主要方案:经典的 JavaMail、异步的 Ktor Client 和云服务 SendGrid。您将学习如何发送简单的文本和 HTML 邮件、附加文件以及处理错误。



1. JavaMail — 久经考验的标准



JavaMail 是 Java/Kotlin 生态系统中用于处理电子邮件的标准库。它支持 SMTP、POP3 和 IMAP 协议,以及 SSL/TLS 加密。对于 Kotlin 项目,只需在 build.gradle.kts 中添加依赖项:



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


通过 SMTP 发送简单文本邮件并进行身份验证的示例:



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 = "来自 Kotlin 的问候!" setText("这是一封使用 JavaMail 发送的测试邮件。") } Transport.send(message) println("邮件发送成功!") } catch (e: MessagingException) { println("发送错误:${e.message}") }}


重要提示: 对于 Gmail,必须使用应用密码 (App Password),而不是主密码。您也可以为 Yandex、Mail.ru 或您自己的服务器配置 SMTP。



2. Ktor Client — 异步方法



如果您使用 Ktor 框架构建网络应用程序,则可以通过 HTTP 请求向邮件 API(例如 Mailgun、SendGrid、Postmark)发送电子邮件。这对于异步服务和微服务架构非常方便。



添加依赖项:



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")}


通过 SendGrid API 发送邮件的示例:



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) {

推荐