//发送邮件通知密码重置成功
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setTo(email);
mailMessage.setFrom("2*******6@qq.com");//一定要写,501 mail from address must be same as authorization user的错误
String textX="您的密码已经重置成功,密码为:"+pwd+" ,请您尽快修改!";
mailMessage.setSubject("密码重置成功!");
mailMessage.setText(textX);
mailSender.send(mailMessage);
以上代码在Controller层中执行会导致前端无法Ajax无法接收到返回的数据。
解决方式:
使用线程,从同步执行改为异步执行,这样不会影响返回结果
public class EmailThread implements Runnable {
//邮件发送
private JavaMailSenderImpl mailSender;
private String email;
private String pwd;
public EmailThread(JavaMailSenderImpl mailSender, String email, String pwd) {
this.mailSender = mailSender;
this.email = email;
this.pwd = pwd;
}
@Override
public void run() {
//发送邮件通知密码重置成功
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setTo(email);
mailMessage.setFrom("2*******6@qq.com");//一定要写,501 mail from address must be same as authorization user的错误
String textX="您的密码已经重置成功,密码为:"+pwd+" ,请您尽快修改!";
mailMessage.setSubject("密码重置成功!");
mailMessage.setText(textX);
mailSender.send(mailMessage);
}
}
Controller层需要注入 JavaMailSenderImpl 然后以构造函数的方式注入进线程
@Autowired
//邮件发送
private JavaMailSenderImpl mailSender;
@RequestMapping("/updatePwdByAid")
public JsonResponseBody updatePwdByAid(Ataff ataff){
/*
创建发送邮件的线程
如果不用线程发送邮件,会导致Json无法返回数据
*/
EmailThread emailThread = new EmailThread(mailSender, email, pwd);
Thread t = new Thread(emailThread);
t.start();
return jsonResponseBody;
}