InícioProjetosArtigosSobreContato

Email sender com ktor

Rodrigo Leutz

Dependencias do gradle

implementation("jakarta.mail:jakarta.mail-api:2.1.3")
implementation("org.eclipse.angus:jakarta.mail:2.0.3")

Classe para enviar email

class JakartaMailApi {

    fun send(
        username: String,
        token: String,
        senderName: String,
        senderEmail: String,
        receiverName: String,
        receiverEmail: String,
        subject: String,
        body: String,
        isHtml: Boolean = false
    ): String? {
        val props = Properties().apply {
            put("mail.smtp.host", DataConstants.SMTP_SERVER)
            put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
            put("mail.smtp.socketFactory.port", "465")
            put("mail.smtp.port", "465")
            put("mail.smtp.auth", "true")
            put("mail.smtp.connectiontimeout", "5000")
            put("mail.smtp.timeout", "5000")
            put("mail.smtp.writetimeout", "5000")
        }

        val session = Session.getDefaultInstance(props, object : Authenticator() {
            override fun getPasswordAuthentication(): PasswordAuthentication? {
                return PasswordAuthentication(username, token)
            }
        })

//        session.debug = true // Habilita o log
//        System.setProperty("mail.debug", "true")
//        System.setProperty("mail.debug.verbose", "true")

        try {
            val message = MimeMessage(session)
            message.setFrom(InternetAddress(senderEmail, senderName))
            message.setRecipient(Message.RecipientType.TO, InternetAddress(receiverEmail, receiverName))
            message.subject = subject

            if (isHtml) {
                message.setContent(body, "text/html; charset=utf-8")
            } else {
                message.setText(body)
            }

            message.setHeader("X-Mailer", "eleutzShoplist/1.0")
            message.setHeader("Return-Path", senderEmail)

            Transport.send(message)
            return message.messageID
        } catch (e: MessagingException) {
            System.err.println("Error sending email: $\{e.message}")
            e.printStackTrace()
            return null
        } catch (e: Exception) {
            System.err.println("Error sending email: $\{e.message}")
            e.printStackTrace()
            return null
        }
    }
}