1、背景:
SpringMVC简单发送邮件,代码部署在海外
以下为代码简单配置
在国内用国内的邮箱测试发邮件是没问题的,但是换成海外的邮箱发件,抛异常报错
Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1
Exception in thread "main" javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
nested exception is:
java.net.ConnectException: Connection timed out: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
at javax.mail.Service.connect(Service.java:291)
at javax.mail.Service.connect(Service.java:172)
开始怀疑是邮件服务器连接不同了,但是telnet smtp.gmail.com. port 465 是能连得通的
2、原因:
465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。
3、解决:
加上如下代码即可
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>