In the past two days, I found the company's NetEase corporate mailbox,
In both the local and test environments, emails can be sent,
However, in the production Alibaba Cloud environment, emails cannot be sent.
The error is as follows:
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtphz.qiye.163.com:25
Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtphz.qiye.163.com, 25; timeout 60000
Caused by: java.net.SocketTimeoutException: connect timed out
Specific error message:
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtphz.qiye.163.com:25
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421) ~[commons-email-1.4.jar!/:1.4]
at org.apache.commons.mail.Email.send(Email.java:1448) ~[commons-email-1.4.jar!/:1.4]
at ef.linrun.util.CommonsEmailUtil.sendHtmlMail(CommonsEmailUtil.java:124) ~[classes!/:0.0.1-SNAPSHOT]
at ef.linrun.task.ServiceFeeSchedule.sendEmail(ServiceFeeSchedule.java:448) [classes!/:0.0.1-SNAPSHOT]
at ef.linrun.task.ServiceFeeSchedule.serviceFeeCalculate(ServiceFeeSchedule.java:203) [classes!/:0.0.1-SNAPSHOT]
at ef.linrun.task.ServiceFeeSchedule$$FastClassBySpringCGLIB$$9f111cca.invoke(<generated>) [classes!/:0.0.1-SNAPSHOT]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) [spring-core-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) [spring-aop-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294) ~[spring-tx-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) ~[spring-tx-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at ef.linrun.task.ServiceFeeSchedule$$EnhancerBySpringCGLIB$$89a629bf.serviceFeeCalculate(<generated>) ~[classes!/:0.0.1-SNAPSHOT]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) ~[spring-context-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_181]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_181]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_181]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[na:1.8.0_181]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_181]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_181]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_181]
Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtphz.qiye.163.com, 25; timeout 60000
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209) ~[javax.mail-1.6.2.jar!/:1.6.2]
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740) ~[javax.mail-1.6.2.jar!/:1.6.2]
at javax.mail.Service.connect(Service.java:388) ~[javax.mail-1.6.2.jar!/:1.6.2]
at javax.mail.Service.connect(Service.java:246) ~[javax.mail-1.6.2.jar!/:1.6.2]
at javax.mail.Service.connect(Service.java:195) ~[javax.mail-1.6.2.jar!/:1.6.2]
at javax.mail.Transport.send0(Transport.java:254) ~[javax.mail-1.6.2.jar!/:1.6.2]
at javax.mail.Transport.send(Transport.java:124) ~[javax.mail-1.6.2.jar!/:1.6.2]
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411) ~[commons-email-1.4.jar!/:1.4]
... 27 common frames omitted
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_181]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_181]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_181]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_181]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_181]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_181]
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:357) ~[javax.mail-1.6.2.jar!/:1.6.2]
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238) ~[javax.mail-1.6.2.jar!/:1.6.2]
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175) ~[javax.mail-1.6.2.jar!/:1.6.2]
... 34 common frames omitted
After some research,
It is found that Alibaba Cloud cannot use port 25 to send emails, and has to use ssl ciphertext.
So I changed the port from 25 to 994.
In addition, you need to set the SSL method, if you use cn.hutool.extra.mail.MailAccount
Then as follows:
If you use the mail object of org.apache.commons.mail, such as the following:
import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.HtmlEmail; import org.apache.commons.mail.MultiPartEmail; import org.apache.commons.mail.SimpleEmail;
They are all the same settings. Here is an example of HtmlEmail, focusing on the last sentence:
HtmlEmail mail = new HtmlEmail(); // Set email server information mail.setSmtpPort(port); mail.setHostName(host); // set password validator mail.setAuthentication(userName, password); // set the email sender mail.setFrom(userName); // set up email recipients mail.addTo(toEamil); // set email encoding mail.setCharset("UTF-8"); // set email subject mail.setSubject(subject); // set email content mail.setHtmlMsg(htmlText); // Set the email sending time mail.setSentDate(new Date()); mail.setSSL(true);
knock off