阿里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");

重新部署,问题解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。