bbottema / simple-java-mail

Simple API, Complex Emails (Jakarta Mail smtp wrapper)
http://www.simplejavamail.org
Apache License 2.0
1.22k stars 265 forks source link

Third party error #276

Closed chunlai996 closed 4 years ago

chunlai996 commented 4 years ago

my code:

public Mailer mailer() {
        return MailerBuilder.withSMTPServer(emailProperties.getHost(),emailProperties.getPort(),emailProperties.getUsername(),emailProperties.getPassword())
                .withTransportStrategy(TransportStrategy.SMTPS)
                .withSessionTimeout(60 * 1000)
                .withThreadPoolSize(10)
                .withConnectionPoolCoreSize(4)
                .buildMailer();
}
email = EmailBuilder.startingBlank()
                            .withPlainText(template)
                            .from(emailProperties.getUsername())
                            .withSubject(emailTemplate.getName())
                            .toMultiple(sendEmailDto.getToEmails()).buildEmail();
AsyncResponse asyncResponse = mailer.sendMail(email,true);

below error:

2020-07-02 15:36:01.093 [Simple Java Mail async mail sender, executor 1 / thread 8] ERROR org.simplejavamail.internal.batchsupport.AsyncOperationHelper - Failed to run sendMail process org.simplejavamail.mailer.internal.MailerException: Third party error at org.simplejavamail.mailer.internal.SendMailClosure.executeClosure(SendMailClosure.java:85) at org.simplejavamail.mailer.internal.AbstractProxyServerSyncingClosure.run(AbstractProxyServerSyncingClosure.java:56) at org.simplejavamail.internal.batchsupport.AsyncOperationHelper$1.run(AsyncOperationHelper.java:76) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: javax.mail.MessagingException: Exception reading response at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2436) at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2313) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1799) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1276) at org.simplejavamail.mailer.internal.util.TransportRunner$1.run(TransportRunner.java:52) at org.simplejavamail.mailer.internal.util.TransportRunner.sendUsingConnectionPool(TransportRunner.java:86) at org.simplejavamail.mailer.internal.util.TransportRunner.runOnSessionTransport(TransportRunner.java:72) at org.simplejavamail.mailer.internal.util.TransportRunner.sendMessage(TransportRunner.java:48) at org.simplejavamail.mailer.internal.SendMailClosure.executeClosure(SendMailClosure.java:78) ... 7 common frames omitted Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:210) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) at sun.security.ssl.InputRecord.read(InputRecord.java:503) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:930) at sun.security.ssl.AppInputStream.read(AppInputStream.java:105) at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:102) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read(BufferedInputStream.java:265) at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:82) at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2416) ... 15 common frames omitted

org.simplejavamail.mailer.internal.MailerException: Third party error at org.simplejavamail.mailer.internal.SendMailClosure.executeClosure(SendMailClosure.java:85) at org.simplejavamail.mailer.internal.AbstractProxyServerSyncingClosure.run(AbstractProxyServerSyncingClosure.java:56) at org.simplejavamail.mailer.internal.MailerImpl.sendMail(MailerImpl.java:330) at org.simplejavamail.mailer.internal.MailerImpl.sendMail(MailerImpl.java:316) at com.slb.core.common.email.rpcservice.impl.RpcEmailServiceImpl.sendEmail(RpcEmailServiceImpl.java:97) at org.apache.dubbo.common.bytecode.Wrapper23.invokeMethod(Wrapper23.java) at org.apache.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:47) at org.apache.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:84) at org.apache.dubbo.config.invoker.DelegateProviderMetaDataInvoker.invoke(DelegateProviderMetaDataInvoker.java:56) at org.apache.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:56) at com.alibaba.dubbo.rpc.Invoker$CompatibleInvoker.invoke(Invoker.java:55) at io.seata.integration.dubbo.alibaba.AlibabaDubboTransactionPropagationFilter.invoke(AlibabaDubboTransactionPropagationFilter.java:43) at com.alibaba.dubbo.rpc.Filter.invoke(Filter.java:29) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at io.seata.integration.dubbo.ApacheDubboTransactionPropagationFilter.invoke(ApacheDubboTransactionPropagationFilter.java:65) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:55) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:92) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:48) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:81) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:96) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:148) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:41) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$CallbackRegistrationInvoker.invoke(ProtocolFilterWrapper.java:157) at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:152) at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:102) at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:193) at org.apache.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51) at org.apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:57) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: javax.mail.MessagingException: Can't send command to SMTP host at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2391) at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2378) at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2308) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1799) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1276) at org.simplejavamail.mailer.internal.util.TransportRunner$1.run(TransportRunner.java:52) at org.simplejavamail.mailer.internal.util.TransportRunner.sendUsingConnectionPool(TransportRunner.java:86) at org.simplejavamail.mailer.internal.util.TransportRunner.runOnSessionTransport(TransportRunner.java:72) at org.simplejavamail.mailer.internal.util.TransportRunner.sendMessage(TransportRunner.java:48) at org.simplejavamail.mailer.internal.SendMailClosure.executeClosure(SendMailClosure.java:78) ... 40 common frames omitted Caused by: java.net.SocketException: Connection reset at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:115) at java.net.SocketOutputStream.write(SocketOutputStream.java:155) at com.sun.mail.util.TimeoutOutputStream.write(WriteTimeoutSocket.java:390) at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431) at sun.security.ssl.OutputRecord.write(OutputRecord.java:417) at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:876) at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:847) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:116) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:2389) ... 49 common frames omitted

bbottema commented 4 years ago

So the SMTP server is closing the connection server it seems, there's not much I can do about that. Are you getting any mails out or does it fail at the first one? What if you connect and send without using the batch module, does that work?

chunlai996 commented 4 years ago

So the SMTP server is closing the connection server it seems, there's not much I can do about that. Are you getting any mails out or does it fail at the first one? What if you connect and send without using the batch module, does that work?

Whether it's batch processing or not,Sometimes work, sometimes get this exception,

bbottema commented 4 years ago

Sounds like you're being throttled or the server is too busy or having trouble with allocating resources.

If you control the server you should check its logs and resources. If not I suggest you try testing with another mail server.

richman666888 commented 1 year ago

@bbottema I also got same error : Third party error . why ? and it 's not smtp server thing . I use PHP is OK .

// kotlin code : val email: Email = EmailBuilder.startingBlank() .from("lollypop", "service@ali.com") .to("C. Cane", "gtegegght@hotmail.com") .cc("notification999@163.com") .withSubject("hey") .withPlainText("We should meet up! ;)") .buildEmail() val mailer: Mailer = MailerBuilder .withSMTPServer("smtpdm-ap-southeast-1.yun.com", 80, "info@888.com", "888") .buildMailer() mailer.sendMail(email).await()

error detail :

{ "msg": "Failed to send email [1158311587.1.1663815840084@pal], reason: Third party error", "trace": "[org.simplejavamail.mailer.internal.SendMailClosure.handleException(SendMailClosure.java:97) -> , org.simplejavamail.mailer.internal.SendMailClosure.executeClosure(SendMailClosure.java:89) -> , org.simplejavamail.mailer.internal.AbstractProxyServerSyncingClosure.run(AbstractProxyServerSyncingClosure.java:56) -> , org.simplejavamail.mailer.internal.MailerImpl.sendMail(MailerImpl.java:345) -> , org.simplejavamail.mailer.internal.MailerImpl.sendMail(MailerImpl.java:331) -> , com.queen.common.EmailKt.mail1(email.kt:31) -> , com.queen.route.Test1Kt$test1$18.invokeSuspend(test1.kt:218) -> , com.queen.route.Test1Kt$test1$18.invoke(test1.kt) -> , com.queen.route.Test1Kt$test1$18.invoke(test1.kt) -> , io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:127) -> , io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:85) -> , io.ktor.util.pipeline.SuspendFunctionGun.execute$ktor_utils(SuspendFunctionGun.kt:105) -> , io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:83) -> , io.ktor.server.routing.Routing$executeResult$$inlined$execute$1.invokeSuspend(Pipeline.kt:471) -> , io.ktor.server.routing.Routing$executeResult$$inlined$execute$1.invoke(Pipeline.kt) -> , io.ktor.server.routing.Routing$executeResult$$inlined$execute$1.invoke(Pipeline.kt) -> , io.ktor.util.debug.ContextUtilsKt.addToContextInDebugMode(ContextUtils.kt:18) -> , io.ktor.server.routing.Routing.executeResult(Routing.kt:171) -> , io.ktor.server.routing.Routing.interceptor(Routing.kt:47) -> , io.ktor.server.routing.Routing$Plugin$install$1.invokeSuspend(Routing.kt:122) -> , io.ktor.server.routing.Routing$Plugin$install$1.invoke(Routing.kt) -> , io.ktor.server.routing.Routing$Plugin$install$1.invoke(Routing.kt) -> , io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:127) -> , io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:85) -> , io.ktor.server.engine.BaseApplicationEngineKt$installDefaultTransformationChecker$1.invokeSuspend(BaseApplicationEngine.kt:122) -> , io.ktor.server.engine.BaseApplicationEngineKt$installDefaultTransformationChecker$1.invoke(BaseApplicationEngine.kt) -> , io.ktor.server.engine.BaseApplicationEngineKt$installDefaultTransformationChecker$1.invoke(BaseApplicationEngine.kt) -> , io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:127) -> , io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:85) -> , io.ktor.util.pipeline.SuspendFunctionGun.execute$ktor_utils(SuspendFunctionGun.kt:105) -> , io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:83) -> , io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1$invokeSuspend$$inlined$execute$1.invokeSuspend(Pipeline.kt:471) -> , io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1$invokeSuspend$$inlined$execute$1.invoke(Pipeline.kt) -> , io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1$invokeSuspend$$inlined$execute$1.invoke(Pipeline.kt) -> , io.ktor.util.debug.ContextUtilsKt.addToContextInDebugMode(ContextUtils.kt:18) -> , io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1.invokeSuspend(DefaultEnginePipeline.kt:118) -> , io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1.invoke(DefaultEnginePipeline.kt) -> , io.ktor.server.engine.DefaultEnginePipelineKt$defaultEnginePipeline$1.invoke(DefaultEnginePipeline.kt) -> , io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:127) -> , io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:85) -> , io.ktor.util.pipeline.SuspendFunctionGun.execute$ktor_utils(SuspendFunctionGun.kt:105) -> , io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:83) -> , io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1$invokeSuspend$$inlined$execute$1.invokeSuspend(Pipeline.kt:471) -> , io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1$invokeSuspend$$inlined$execute$1.invoke(Pipeline.kt) -> , io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1$invokeSuspend$$inlined$execute$1.invoke(Pipeline.kt) -> , io.ktor.util.debug.ContextUtilsKt.addToContextInDebugMode(ContextUtils.kt:18) -> , io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.invokeSuspend(NettyApplicationCallHandler.kt:121) -> , io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.invoke(NettyApplicationCallHandler.kt) -> , io.ktor.server.netty.NettyApplicationCallHandler$handleRequest$1.invoke(NettyApplicationCallHandler.kt) -> , kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55) -> , kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:112) -> , kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126) -> , kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56) -> , kotlinx.coroutines.BuildersKt.launch(Unknown Source) -> , io.ktor.server.netty.NettyApplicationCallHandler.handleRequest(NettyApplicationCallHandler.kt:41) -> , io.ktor.server.netty.NettyApplicationCallHandler.channelRead(NettyApplicationCallHandler.kt:33) -> , io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) -> , io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:61) -> , io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:370) -> , io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) -> , io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469) -> , io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503) -> , io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) -> , io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) -> , io.ktor.server.netty.EventLoopGroupProxy$Companion.create$lambda-1$lambda-0(NettyApplicationEngine.kt:258) -> , io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) -> , java.base/java.lang.Thread.run(Thread.java:833) -> ]" }

honorhs commented 1 year ago

@bbottema Intermittent occurrences of the same error mentioned by several individuals are being observed. Although batch-module is not being used, and emails are successfully delivered to the recipient through the mailer, it appears that a "Connection reset" error occurs before receiving a response from the recipient's server, resulting in the failure of email delivery.

This issue is suspected to be a serious bug in simpleJavaMail.

bbottema commented 2 days ago

This is not an error from this library, if there really is an issue here on the client side, its in the underlying framework, Jakarta Mail (Angus), where the error is coming from. Simple Java Mail is really just a usability layer around that, except for a few features that it adds (such as the batch-module, which is not used here). I'm highly suspicious of core scenario errors in this framework, which are extensively tested and used.

Again, to find out more about the connection issues, you should try to get a hold of the logs on the other end, the server side. Why is the server resetting the connections. It sounds like a server side resource choke issue to me and you're being throttled or the server is too busy or having trouble with allocating resources.