Вложение в Kotlin
Письмо с текстом и файлом собирают как
MimeMultipart: первая MimeBodyPart -
обычный текст, вторая - вложение с именем файла и
данными из ByteArrayDataSource.
Байты создают в программе, без чтения с диска. После отправки проверяют, что принято одно составное сообщение:
import com.icegreen.greenmail.util.GreenMail
import com.icegreen.greenmail.util.ServerSetupTest
import jakarta.activation.DataHandler
import jakarta.mail.Message
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 jakarta.mail.util.ByteArrayDataSource
import java.util.Properties
fun main() {
val server = GreenMail(ServerSetupTest.SMTP)
server.start()
server.setUser("reader@local.test", "reader", "pass")
val props = Properties()
props["mail.smtp.host"] = "127.0.0.1"
props["mail.smtp.port"] = server.smtp.port.toString()
props["mail.smtp.auth"] = "false"
val session = Session.getInstance(props)
val textPart = MimeBodyPart()
textPart.setText("See the attached note.")
val fileBytes = "price=19".toByteArray(Charsets.UTF_8)
val filePart = MimeBodyPart()
filePart.fileName = "quote.txt"
filePart.dataHandler = DataHandler(
ByteArrayDataSource(fileBytes, "text/plain"),
)
val parts = MimeMultipart()
parts.addBodyPart(textPart)
parts.addBodyPart(filePart)
val letter = MimeMessage(session)
letter.setFrom(InternetAddress("writer@local.test"))
letter.setRecipient(
Message.RecipientType.TO,
InternetAddress("reader@local.test"),
)
letter.subject = "With attachment"
letter.setContent(parts)
Transport.send(letter)
val saved = server.receivedMessages[0]
val multipart = saved.content as MimeMultipart
println(multipart.count)
server.stop()
}
Число 2 означает две части: текст и вложение.
Имя quote.txt попадает в заголовок части с
файлом.
Добавьте вложение data.bin из четырех байт
1, 2, 3 и 4.
Выведите число частей принятого письма.
Оставьте текстовую часть с фразой "Attached."
и вторую часть с байтами строки "ok".
Имя файла задайте "flag.txt". Выведите
count у MimeMultipart из ящика.