阿里云:Could not connect to SMTP host: smtp.163.com, port: 25

博客讲述了在部署Java程序时遇到的SMTP连接超时问题,详细记录了解决过程。首先,问题表现为无法通过smtp.163.com的25端口发送邮件。然后,博主尝试手动telnet验证,发现确实无法连接。解决思路包括解封25端口(不推荐)或使用SSL安全连接(如465端口)。最后,通过修改JavaMail的配置,启用SSL连接并设置正确端口,成功发送邮件。
摘要由CSDN通过智能技术生成

问题描述:

自己写了个监控程序,通过javamail发送监控信息,当部署到服务执行就报错:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;

DEBUG SMTP: trying to connect to host "smtp.163.com", port 25, isSSL false
javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;
  nested exception is:
        java.net.ConnectException: Connection timed out (Connection timed out)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
        at javax.mail.Service.connect(Service.java:295)
        at javax.mail.Service.connect(Service.java:176)
        at javax.mail.Service.connect(Service.java:196)
        at com.sonkwo.bi.quartz.util.EmailUtils.sendEmail(EmailUtils.java:108)
        at com.sonkwo.bi.quartz.task.RyTask.toSendCheckSyncData(RyTask.java:109)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

意思是说:服务器无法通过host: smtp.163.com, port: 25进行连接

通过手动telnet验证,确实无法连通

telnet smtp.163.com 25
Trying 220.181.15.161...

解决思路有两个:

  1. 解封25号端口(不推荐);
  2. 使用其他端口(465号端口,推荐)。

想起来了,在做azkaban发送邮件通知的时候就遇到过这个问题,最终是通过重新编译azkaban源码,才将25端口改成了465端口,具体见:【(21条消息) Azkaban重新编译,解决:Could not connect to SMTP host: smtp.163.com, port: 465【2022年01月10日】_打不死的小强哥哥的博客-CSDN博客

最终解决办法:

修改javamail中的端口号,添加如下代码:

// PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
        //     如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
        //     打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
        /*
        // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
        //                  需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
        //                  QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
        final String smtpPort = "465";
        props.setProperty("mail.smtp.port", smtpPort);
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.socketFactory.port", smtpPort);

问题最终解决,邮件顺利发出了。。。

ps:若想获得javamail的源码,请见【(21条消息) 通过javaMail发送邮件_打不死的小强哥哥的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值