文章目录
导入依赖包
<!--邮箱发送包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
从qq邮箱官网中开启POP3/SMTP服务
开启服务后一定要记下服务密码,很重要!!
在配置文件application.properties中写上qq邮箱的基本信息
spring.mail.username=xxx@qq.com
spring.mail.password=xxx #注意这里的密码不是邮箱密码,是前面开启POP3/SMTP服务时弹出的密码
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.stmp.ssl.enable=true
编写业务类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailSendException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Service;
@Service
public class EmailService {
@Autowired
JavaMailSenderImpl mailSender;
//从配置文件中获取发件人
@Value("{spirng.mail.username}")
private String sender;
public String sendEmailVerCode(String receiver, String verCode) throws MailSendException {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("验证码"); //设置邮件标题
message.setText("尊敬的用户,您好:\n"
+ "\n本次请求的邮件验证码为:" + verCode + ",本验证码5分钟内有效,请及时输入。(请勿泄露此验证码)\n"
+ "\n如非本人操作,请忽略该邮件。\n(这是一封自动发送的邮件,请不要直接回复)"); //设置邮件正文
message.setTo(receiver); //设置收件人
message.setFrom("xxx@qq.com"); //设置发件人
mailSender.send(message); //发送邮件
return verCode;
}
}
这里最关键的业务操作其实springboot已经帮我们完成了,在自动注入JavaMailSenderImpl时,会自动检索配置文件application.properties中的账户密码以及主机信息,加载到对象中。
写一个生成验证码的工具类VerCodeGenerateUtil
import java.security.SecureRandom;
import java.util.Random;
public class VerCodeGenerateUtil {
private static final Random RANDOM = new SecureRandom();
/**
* 生成6位随机数字
* @return 返回6位数字验证码
*/
public static String generateVerCode() {
char[] nonceChars = new char[6];
for (int index = 0; index < nonceChars.length; ++index) {
nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(10));
}
return new String(nonceChars);
}
}
在controller层中发送邮箱
@PostMapping("/sendEmail")
@ResponseBody
public JsonResult sendEmail(String email, HttpSession session){
String code=VerCodeGenerateUtil.generateVerCode();
System.out.println(code);
String result= emailService.sendEmailVerCode(email, code);
session.setAttribute("email",result);
System.out.println(result);
return new JsonResult(200,"发送成功");
}
写页面表单封装email到请求("/sendEmail")中发送给后端,也可以使用postman进行测试。