阿里云LINUX服务不能用SMTP发邮件

  • 作者
  • KING

本文结构


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群联系我。


阿里云LINUX服务不能用SMTP发邮件

本文结构


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群联系我。