Пример отправки электронного письма с вложением через Amazon на Java

Есть ли у кого-нибудь пример отправки электронного письма с вложением через Amazon SES (на Java)?

9
задан Jason 1 November 2011 в 07:07
поделиться

1 ответ

https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-raw.html имеет пример, который отправляет и HTML и текстовые тела (с вложением, конечно). FWIW, вот преобразование и перестройка его кода Java к Kotlin. Зависимость 'com.sun.mail:javax.mail:1.6.2'.

data class Attachment(val fileName: String, val contentType: String, val data: ByteArray)

fun sendEmailWithAttachment(from: String, to: List<String>, subject: String, htmlBody: String, textBody: String,
                            attachment: Attachment) {
    try {
        val textPart = MimeBodyPart().apply {
            setContent(textBody, "text/plain; charset=UTF-8")
        }

        val htmlPart = MimeBodyPart().apply {
            setContent(htmlBody, "text/html; charset=UTF-8")
        }

        // Create a multipart/alternative child container.
        val childPart = MimeMultipart("alternative").apply {
            // Add the text and HTML parts to the child container.
            addBodyPart(textPart)
            addBodyPart(htmlPart)
        }

        // Create a wrapper for the HTML and text parts.
        val childWrapper = MimeBodyPart().apply {
            setContent(childPart)
        }

        // Define the attachment
        val dataSource = ByteArrayDataSource(attachment.data, attachment.contentType)
        // val dataSource = FileDataSource(filePath)  // if using file directly
        val attPart = MimeBodyPart().apply {
            dataHandler = DataHandler(dataSource)
            fileName = attachment.fileName
        }

        // Create a multipart/mixed parent container.
        val parentPart = MimeMultipart("mixed").apply {
            // Add the multipart/alternative part to the message.
            addBodyPart(childWrapper)
            addBodyPart(attPart)  // Add the attachment to the message.
        }

        // JavaMail representation of the message
        val s = Session.getDefaultInstance(Properties())
        val mimeMessage = MimeMessage(s).apply {
            // Add subject, from and to lines
            this.subject = subject
            setFrom(InternetAddress(from))
            to.forEach() {
                addRecipient(javax.mail.Message.RecipientType.TO, InternetAddress(it))
            }

            // Add the parent container to the message.
            setContent(parentPart)
        }

        // Create Raw message
        val rawMessage = with(ByteArrayOutputStream()) {
            mimeMessage.writeTo(this)
            RawMessage(ByteBuffer.wrap(this.toByteArray()))
        }

        val rawEmailRequest = SendRawEmailRequest(rawMessage).apply {
            source = from
            setDestinations(to)
        }

        // Send Mail
        val client = AmazonSimpleEmailServiceClientBuilder.standard()
                .withRegion(Regions.US_EAST_1).build()
        client.sendRawEmail(rawEmailRequest)
        println("Email with attachment sent to $to")
    } catch (e: Exception) {
        println(e)
    }
}
0
ответ дан 4 December 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: