服了,就这问题困扰了几天,终于搞定。总结一下:
遇到问题还得自己认真看日志,别人写的文章,建议都是引导;
多看看源码,理解他的原理;
不啰嗦了,上问题
本地推送日志没问题
没问题能发送邮件,但是到了linux服务器以后就报错如图:
原因出在哪了呢?看源码根据报错1678行,跟踪到SMTPTransport类这段代码
啥意思呢,这儿取的是域名信息,而内网没有域名啊,而连接邮箱服务器的时候它要带上系统域名信息,才能返回连接信息,邮箱服务器通了以后要跟主机互通,可是我的linux服务器的只通内网,内网也不需要域名啊,域名把打通信息带跑偏了,一直报错。
看源码感觉日志里面这EHLo host-10-211-72-238.openstackloca7有问题,就是不知道问题在哪,看localHostName = localHost.getCanonicalHostName()方法,它是取的域名,linux主机内网系统哪来的域名,跟linux主机名也不一致啊,后来我在配置里面加上prop.setProperty("mail.smtp.localhost", inetAddr.getHostName()); 获取主机名称,这样第一步互通打好了。如下图
这就取到主机名称,调到邮箱服务器以后,服务器根据主机名称找回到发送主机。我感觉这儿应该改成IP是最好的。IP获取如下
InetAddress inetAddr = InetAddress.getLocalHost();
//获得本地主机的IP地址
String ip = inetAddr.getHostAddress();
其他情况文章很多,可以找到,我这种情况独特全网没有描述,所以记录一下,可以交流