阿里ECS发邮件报Couldn't connect to host, port: smtp.163.com, 25

问题描述

Web项目使用apache的commons-email发送邮件,本地运行正常,部署到aliyun服务器后无法发送邮件。

原因

查看日志发现报错,内容如下:

org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.163.com:25
        at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1421)
        at org.apache.commons.mail.Email.send(Email.java:1448)
        at com.lyn.petadopt.service.impl.SendEmailRunnable.run(SecurityServiceImpl.java:61)
        at java.lang.Thread.run(Thread.java:748)
Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.163.com, 25; timeout 60000; nested exception is:
java.net.SocketTimeoutException: connect timed out
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2053)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)
        at javax.mail.Service.connect(Service.java:386)
        at javax.mail.Service.connect(Service.java:245)
        at javax.mail.Service.connect(Service.java:194)
        at javax.mail.Transport.send0(Transport.java:253)
        at javax.mail.Transport.send(Transport.java:124)
        at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411)
        ... 3 more

查询资料发现,aliyun考虑到安全方面,默认关闭发送邮件的25端口,导致无法连接到邮件服务器。

解决方案

共两种解决方案:

方案1

向aliyun提交申请,解封25端口,需要3-5天。
由于未找到提交解封申请的入口,此处不做详细描述。

方案2

放弃25端口,使用ssl加密并改用465端口。
在apache commons-email中使用方法如下:

//启用ssl加密
email.setSSLOnConnect(true);
//使用465端口(不设置也可,ssl默认为465)
email.setSslSmtpPort("465");

重新部署,问题解决。

你可能感兴趣的:(阿里ECS发邮件报Couldn't connect to host, port: smtp.163.com, 25)