用户注册邮箱验证时,如果用户所给邮箱为无效邮箱,JavaMailSender不能捕获错误。
@Service
public class MailService {
@Value("${spring.mail.username}")
String fromUser;
@Resource
JavaMailSender javaMailSender;
public boolean sendSimpleMail() {
try {
SimpleMailMessage message = new SimpleMailMessage();
-
message.setFrom(fromUser);
message.setTo({"abc@abc.abc"});
-
javaMailSender.send(message);
return true;
} catch (Exception e) {
System.out.println("邮件发送异常!");
return false;
}
}
}
这里只要给出的接收邮箱格式正确,即使这个邮箱abc@abc.abc实际不存在,也会返回true,不会出现“邮件发送异常”。
我查看过JavaMailSenderImpl,其中send方法设定是抛异常的,但我尝试过好几个原本不存在的邮箱,都没有抛出异常。
当用户给出的注册邮箱不存在时,在尝试发送验证码时能够捕获这种异常。
这不会有异常,这是邮件服务器的事情,邮箱发不出去,也是响应给邮件服务器,不算代码级别的异常 。
因为只要你愿意,你也可以搭建@abc.abc的邮箱服务器,不能通过这个判断地址无效。
如有帮助,请采纳,十分感谢!
spring boot 导入版本为2.6.2
Set前先用正则表达式验证一下不行吗
无效的邮箱,你肯定需要先验证一下啊。
没必要再调用邮件接口返回异常的情况下再验证。
在接收用户输入邮箱的时候,就应该判断,如果不满足邮箱规则,就提示用户重新输入有效的邮箱。
既然是用户注册,那么你要在前端做校验,后端也做一层,当用户将注册信息传到后端,你就正则表达式校验邮箱是否正确,不正确就抛异常,可记录下日志
这个不会返回错误,给不存在或无效的邮箱发邮件异常只会在邮箱服务器抛异常,在异常邮件中能查到。你能做的是发送前校验一下邮箱格式对不对,不对的抛异常。
springboot集成Hibernate Validation,然后通过@Email注解即可校验是否正确的邮箱格式,或者自定义一个方法,通过正则表达式匹配,网上一大堆校验的正则表达式