这两天发现公司的网易企业邮箱,
在本地和测试环境,都可以发送邮件,
但是在生产的阿里云环境中,却发不出邮件,
报错如下:
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密文方式。
扫描二维码关注公众号,回复:
14773827 查看本文章
于是把端口从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);
收工