java中遇到的问题及解决方法

问题遇到的现象和发生背景

用户注册邮箱验证时,如果用户所给邮箱为无效邮箱,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注解即可校验是否正确的邮箱格式,或者自定义一个方法,通过正则表达式匹配,网上一大堆校验的正则表达式