已解决:网易邮箱smtphz.qiye.163.com在阿里云环境发不出邮件的问题

这两天发现公司的网易企业邮箱,

在本地和测试环境,都可以发送邮件,

但是在生产的阿里云环境中,却发不出邮件,

报错如下:

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

具体错误信息:

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

研究一番之后,

发现是阿里云不能用25端口发邮件,得用ssl密文方式。

于是把端口从25改到了994 。

另外还要设置SSL的方式,如果用的是cn.hutool.extra.mail.MailAccount

则如下:

如果用的是org.apache.commons.mail的邮件对象,比如下面的:

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

 都是一样设置,这里举一个HtmlEmail的例子,重点在最后一句:

HtmlEmail mail = new HtmlEmail();
// 设置邮箱服务器信息
mail.setSmtpPort(port);
mail.setHostName(host);
// 设置密码验证器
mail.setAuthentication(userName, password);
// 设置邮件发送者
mail.setFrom(userName);
// 设置邮件接收者
mail.addTo(toEamil);
// 设置邮件编码
mail.setCharset("UTF-8");
// 设置邮件主题
mail.setSubject(subject);
// 设置邮件内容
mail.setHtmlMsg(htmlText);
// 设置邮件发送时间
mail.setSentDate(new Date());
mail.setSSL(true);

收工

猜你喜欢

转载自blog.csdn.net/u013282737/article/details/123703787
今日推荐