今天在扩展论坛项目的邮箱验证功能的时候,遇到了一个有些头疼的问题

功能开发的很顺利,在我的电脑上面是没有问题的,新注册的用户会验证邮箱的真实性,通过邮箱验证的用户视为已激活的用户(可以登录),否则需要再次进行邮箱验证.

验证原理:

  1. 在数据库中添加两个字段,一个是激活的状态,另一个是激活码
  2. 通过向用户的邮箱发送激活链接实现用户激活的功能

在本机上测试是没有问题的,但是一放在远程服务器上面就不行了
首先是当进行到发送邮件的步骤的时候,浏览器会非常的缓慢,一直等待响应,我一猜就是发送邮件这里有问题,后来查看日志
报了下面这个错

Could not connect to SMTP host: smtp.qq.com, port: 25

改了端口之后又报错

javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1

研究一番之后找到以下资料:

25端口(SMTP):25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。
465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。

所以需要在我原来的配置脸面增加以下代码

props.setProperty("mail.smtp.port", "465");        
props.setProperty("mail.smtp.auth", "true");//开启认证        
props.setProperty("mail.debug", "true");//启用调试        
props.setProperty("mail.smtp.timeout", "1000");//设置链接超时        
props.setProperty("mail.smtp.port", "465");//设置端口        
props.setProperty("mail.smtp.socketFactory.port", "465");//设置ssl端口      
props.setProperty("mail.smtp.socketFactory.fallback", "false");        
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

然后问题就解决了

最后修改日期:2020-01-19

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。