simple-java-mail
simple-java-mail copied to clipboard
Cannot send an email.
fun main() {
try {
val email: Email = EmailBuilder.startingBlank()
.from("....")
.to("....")
.withSubject("Hello")
.withPlainText("AA")
.buildEmail()
val mailer: Mailer = MailerBuilder
.withSMTPServer("smtp.gmail.com", 587, "....", "...")
.withDebugLogging(true)
.withTransportStrategy(TransportStrategy.SMTP_TLS)
.withSessionTimeout(15000)
.buildMailer()
//mailer.testConnection()
mailer.sendMail(email, true)
println("sended")
} catch (ex: Exception) {
ex.printStackTrace()
}
}
//mailer.testConnection()-> Success
DEBUG: setDebug: Jakarta Mail version 2.1.2
DEBUG: getProvider() returning jakarta.mail.Provider[TRANSPORT,smtp,org.eclipse.angus.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: need username and password for authentication
DEBUG SMTP: protocolConnect returning false, host=smtp.gmail.com, [email protected], password=<null>
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 smtp.gmail.com ESMTP wb1-20020a170907d50100b00a3ec215f130sm2915268ejc.103 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587
EHLO host.docker.internal
250-smtp.gmail.com at your service, [31.222.3.86]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO host.docker.internal
250-smtp.gmail.com at your service, [31.222.3.86]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: protocolConnect login, host=smtp.gmail.com, [email protected], password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
QUIT
221 2.0.0 closing connection wb1-20020a170907d50100b00a3ec215f130sm2915268ejc.103 - gsmtp
sended
Process finished with exit code 0
mailer.sendMail(email)
DEBUG: setDebug: Jakarta Mail version 2.1.2
DEBUG: getProvider() returning jakarta.mail.Provider[TRANSPORT,smtp,org.eclipse.angus.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: need username and password for authentication
DEBUG SMTP: protocolConnect returning false, host=smtp.gmail.com, [email protected], password=<null>
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 smtp.gmail.com ESMTP mn6-20020a1709077b0600b00a3e12ded9b7sm5084081ejc.169 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587
EHLO host.docker.internal
250-smtp.gmail.com at your service, [31.222.3.86]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO host.docker.internal
250-smtp.gmail.com at your service, [31.222.3.86]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: protocolConnect login, host=smtp.gmail.com, [email protected], password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<[email protected]>
250 2.1.0 OK mn6-20020a1709077b0600b00a3e12ded9b7sm5084081ejc.169 - gsmtp
RCPT TO:<[email protected]>
250 2.1.5 OK mn6-20020a1709077b0600b00a3e12ded9b7sm5084081ejc.169 - gsmtp
DEBUG SMTP: Verified Addresses
DEBUG SMTP: [email protected]
DATA
354 Go ahead mn6-20020a1709077b0600b00a3e12ded9b7sm5084081ejc.169 - gsmtp
Date: Wed, 21 Feb 2024 23:50:05 +0100 (CET)
From: [email protected]
To: [email protected]
Message-ID: <[email protected]>
Subject: Hello
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
QUIT
DEBUG SMTP: exception reading response, THROW:
java.net.SocketTimeoutException: Read timed out
at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283)
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309)
at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966)
at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478)
at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472)
at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1455)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1059)
at org.eclipse.angus.mail.util.TraceInputStream.read(TraceInputStream.java:107)
at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:244)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:263)
at org.eclipse.angus.mail.util.LineInputStream.readLine(LineInputStream.java:104)
at org.eclipse.angus.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2489)
at org.eclipse.angus.mail.smtp.SMTPTransport.close(SMTPTransport.java:1401)
at org.simplejavamail.mailer.internal.util.TransportRunner.runOnSessionTransport(TransportRunner.java:82)
at org.simplejavamail.mailer.internal.util.TransportRunner.sendMessage(TransportRunner.java:56)
at org.simplejavamail.mailer.internal.SendMailClosure.executeClosure(SendMailClosure.java:69)
at org.simplejavamail.mailer.internal.AbstractProxyServerSyncingClosure.run(AbstractProxyServerSyncingClosure.java:56)
at org.simplejavamail.mailer.internal.MailerImpl.sendMail(MailerImpl.java:364)
at org.simplejavamail.mailer.internal.MailerImpl.sendMail(MailerImpl.java:349)
at cz.coffeerequired.skriptmail.RKt.main(R.kt:26)
at cz.coffeerequired.skriptmail.RKt.main(R.kt)
org.simplejavamail.mailer.internal.MailerException: Failed to send email [ID: '<[email protected]>'], reason: Unknown error
at org.simplejavamail.mailer.internal.SendMailClosure.handleException(SendMailClosure.java:85)
at org.simplejavamail.mailer.internal.SendMailClosure.executeClosure(SendMailClosure.java:76)
at org.simplejavamail.mailer.internal.AbstractProxyServerSyncingClosure.run(AbstractProxyServerSyncingClosure.java:56)
at org.simplejavamail.mailer.internal.MailerImpl.sendMail(MailerImpl.java:364)
at org.simplejavamail.mailer.internal.MailerImpl.sendMail(MailerImpl.java:349)
at cz.coffeerequired.skriptmail.RKt.main(R.kt:26)
at cz.coffeerequired.skriptmail.RKt.main(R.kt)
Caused by: java.lang.ClassCastException: class com.sun.mail.handlers.text_plain cannot be cast to class jakarta.activation.DataContentHandler (com.sun.mail.handlers.text_plain and jakarta.activation.DataContentHandler are in unnamed module of loader 'app')
at jakarta.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:620)
at jakarta.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:573)
at jakarta.activation.DataHandler.getDataContentHandler(DataHandler.java:591)
at jakarta.activation.DataHandler.writeTo(DataHandler.java:290)
at jakarta.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1683)
at jakarta.mail.internet.MimeMessage.writeTo(MimeMessage.java:1911)
at org.eclipse.angus.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1305)
at org.simplejavamail.mailer.internal.util.TransportRunner.lambda$sendMessage$0(TransportRunner.java:61)
at org.simplejavamail.mailer.internal.util.TransportRunner.runOnSessionTransport(TransportRunner.java:81)
at org.simplejavamail.mailer.internal.util.TransportRunner.sendMessage(TransportRunner.java:56)
at org.simplejavamail.mailer.internal.SendMailClosure.executeClosure(SendMailClosure.java:69)
... 5 more
Suppressed: jakarta.mail.MessagingException: Exception reading response;
nested exception is:
java.net.SocketTimeoutException: Read timed out
at org.eclipse.angus.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2509)
at org.eclipse.angus.mail.smtp.SMTPTransport.close(SMTPTransport.java:1401)
at org.simplejavamail.mailer.internal.util.TransportRunner.runOnSessionTransport(TransportRunner.java:82)
... 7 more
Caused by: java.net.SocketTimeoutException: Read timed out
at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283)
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309)
at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966)
at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478)
at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472)
at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1455)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1059)
at org.eclipse.angus.mail.util.TraceInputStream.read(TraceInputStream.java:107)
at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:244)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:263)
at org.eclipse.angus.mail.util.LineInputStream.readLine(LineInputStream.java:104)
at org.eclipse.angus.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2489)
... 9 more
Okey i did check thats happens only on Kotlin
on the Classic maven its works fine
Totaly same source code
I'm not sure what I should do about this. I can't reproduce this issue and from your SMTP log it seems it goes wrong after the DATA command, which looks like a timeout on the server end. Have you tried it a bunch of times in a row, maybe in a loop with a delay? Feels like a shoddy connection, perhaps a problematic proxy or server. Is it consistently failing?
That ClassCastException I will deal with separately. That's not related to your issue, but needs to be fixed too (but it won't block you from using the library in any way).
I can see you reduced the session timeout from 60 seconds to 15 seconds. Does your exception occur after 15 seconds?
Also, you could try to increase other timings, although the default already is infinite:
yourMailerBuilder
.withProperty("mail.smtp.timeout", "90000")
.withProperty("mail.smtp.writetimeout", "90000")
Also, try different servers and see if it is consistently an issue with Kotlin or something else.
You could try Gmail for example. If you clone the Github repo (or just download the zip from Github), there's a test class "FullEmailDemoApp" that you run (just fill in your gmail address and password in the DemoAppBase super class). That should work in both Java and Kotlin.