kotlin发邮件

1. 依赖

dependencies{
    implementation("jakarta.mail:jakarta.mail-api:2.1.2")
}

2. 实现

import jakarta.activation.DataHandler
import jakarta.activation.FileDataSource
import jakarta.mail.Authenticator
import jakarta.mail.Message
import jakarta.mail.PasswordAuthentication
import jakarta.mail.Session
import jakarta.mail.Transport
import jakarta.mail.internet.InternetAddress
import jakarta.mail.internet.MimeBodyPart
import jakarta.mail.internet.MimeMessage
import jakarta.mail.internet.MimeMultipart
import java.util.*

fun main() {
    val account = "你的账号@qq.com"
    val password = "填邮箱密码或key"
    val personal = "发信使用的昵称"
    val to = "接收账号@qq.com"
    val props = mapOf(
// 认证
        "mail.smtp.auth" to "true",
// smtp服务器
        "mail.smtp.host" to "smtp.qq.com",
// smtp端口
        "mail.smtp.port" to "587",
    )
    val subject = "主题"
    val text = "内容"
    val html= "<h5>这是HTML</h5>"
    val filePath1 = """D:\图片\aaa.jpg"""
    val filePath2 = """D:\图片\0.png"""
    val filename = "绝命响应.png"

    val properties = Properties().apply { putAll(props) }

    val authenticator = object : Authenticator() {
        override fun getPasswordAuthentication(): PasswordAuthentication {
            return PasswordAuthentication(account, password)
        }
    }

    val mailSession = Session.getInstance(properties, authenticator)

    val textMessage = MimeMessage(mailSession).apply {
        setFrom(InternetAddress(account, personal, "UTF-8"))
        setRecipient(Message.RecipientType.TO, InternetAddress(to))
        setSubject(subject)

        setText(text)
    }

    val htmlMessage = MimeMessage(mailSession).apply {
        setFrom(InternetAddress(account, personal, "UTF-8"))
        setRecipient(Message.RecipientType.TO, InternetAddress(to))
        setSubject(subject)

        setContent(html, "text/html")
    }

    val multipartMessage = MimeMessage(mailSession).apply {
        setFrom(InternetAddress(account, personal, "UTF-8"))
        setRecipient(Message.RecipientType.TO, InternetAddress(to))
        setSubject(subject)

        val multipart = MimeMultipart().apply {
            addBodyPart(MimeBodyPart().apply {
                setContent(html, "text/html")
            })
// 若setContent设置为HTML,则前后都无法显示setText中内容
//            addBodyPart(MimeBodyPart().apply { setText("this is a text") })

            addBodyPart(MimeBodyPart().apply { attachFile(filePath1) })

            addBodyPart(MimeBodyPart().apply {
                val source=FileDataSource(filePath2)
                dataHandler = DataHandler(source)
                fileName=filename
            })
        }

        setContent(multipart)
    }


//    Transport.send(textMessage)
//    Transport.send(htmlMessage)
    Transport.send(multipartMessage)

}
posted @ 2021-12-12 01:40  SoClear  阅读(203)  评论(0编辑  收藏  举报