本文结构
BUG背景
今日下午,找群里伙伴帮忙点点各处功能。兄弟们很热情,在此谢过了。当然,我谢谢还没有说出口,各种说问题的声音,此起彼伏,一浪接一浪。虽然音浪很强,但此时我的内心甚至毫无波动(因为前端确实很多BUG)。但突然在众多浪叫声中,一哥哥的声音特别刺耳,只因他说,他卡死了。这样的话,我听到是,非常惊慌的呀。我前端浪就算了,怎么还有卡死这样的问题呢。心里和所有程序猿第一反应一样一样的:"这不科学呀,我这里没有问题呀..."
但在事实面前,再加上我又是求人帮忙测试,这时我低下高傲的头颅.去问情况了.
吾:怎么卡死的...不应该呀
兄:就直接卡死了
吾:有什么操作么(此时内心很懵逼呀,直接卡死,是什么鬼)
兄:没有,就之前点了个验证码。
至此,我陷入无限的沉思中。我用的是阿里云服务器提供的免费邮箱服务,好歹也是国内数一数二的云服务器供应商,不至于因为免费的,就这么弱鸡呀。
找出原因
1.分析
2.验证
a.查看API项目日志找到如下信息:
DEBUG SMTP: trying to connect to host "***.****.***", port 25, isSSL false Exception: Could not connect to SMTP host: ***.****.***, port: 25;
b.此时对SMTP地址进行PING,能通,没有问题.然后TELNET,发现不行.但此时比较奇怪的是,我在本地WINDOWS上没有任何问题的
c.此时觉得应该,我机器防火墙有问题,准备直接去修改,但转念一想,我没有禁过这个端口
d.于是到阿里云服务器官网查了一下,发现阿里为了云服务器安全,所有机器25出方向默认禁止,需要提工单解封见网址:
https://help.aliyun.com/knowledge_detail/56130.html
同是也有一些别的解决方案,比如用465 SSL进行发送。由于考虑到工单可以要晚一点,阿里云官方才能解决,所以就决定用第二种方式试一把。
解决问题
修改代码将原来运用25发送改为用465,主要代码如下:
import java.util.Properties; Properties properties = new Properties(); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.host", ConfigHelper.getSMTP());//SMTP地址 properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.socketFactory.port", ConfigHelper.getSMTPPort());//其值为465 properties.put("mail.smtp.port", ConfigHelper.getSMTPPort()); properties.put("mail.user", ConfigHelper.getFromEmail()); properties.put("mail.password", ConfigHelper.getSMTPPassword()); // 访问SMTP服务时需要提供的密码 properties.put("mail.smtp.ssl.enable", "true");// 设定用SSL方式 //下面这行的实际内容("mail.transport.protocol","smtp") properties.setProperty(ConfigHelper.getMailTransportProtocol(), ConfigHelper.getMailTransportProtocolValue());
测试OK.
到此,问题解决。谢谢,众兄弟.
如果有需要发送邮件相关代码或者有其它疑问的,可以加页面底部的QQ,或者QQ群联系我。
阿里云大力度优惠.云服务器最低可以两折起。也很多优惠券。具体【点击优惠进行详细了解。】