Solved: Netease mailbox smtphz.qiye.163.com cannot send emails in Alibaba Cloud environment

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

Guess you like

Origin blog.csdn.net/u013282737/article/details/123703787