SpringBoot实现发邮箱验证码简单实现
一、maven导入依赖
<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version>
</dependency>
二、配置yml文件配置
spring:mail:host: smtp.qq.comusername: XXXXX@qq.compassword: //这里的密码并不是邮箱密码,而是需要开启POP3/IMAP/SMTP/Exchange/CardDAV 服务port: 587 //端口号default-encoding: UTF-8properties:mail:smtp:socketFactoryClass: javax.net.ssl.SSLSocketFactorydebug: true
三、以qq邮箱为例开启POP3/IMAP/SMTP/Exchange/CardDAV 服务
进入qq邮箱点击设置->账户,如下图:
下滑看到POP3/IMAP/SMTP/Exchange/CardDAV 服务,点击开启,如下图:
通过绑定的手机进行验证,会得到一串字符串,将该字符串复制到配置文件的password后即可。注:开启服务并不是永久有效,在一定时间后程序报错,是因为时效过期,需重新申请。
三、发送邮箱验证码代码实现
发生文本邮箱:
public void sendSimpleMail(String code,String touser) {// 构建一个邮件对象SimpleMailMessage message = new SimpleMailMessage();// 设置邮件主题message.setSubject("邮箱注册码");// 设置邮件发送者,这个跟application.yml中设置的要一致 username:message.setFrom(username);// 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似// message.setTo("10@qq.com","12qq.com");message.setTo(touser);// 设置邮件发送日期message.setSentDate(new Date());// 设置邮件的正文message.setText("邮箱注册码:" + code);// 发送邮件javaMailSender.send(message);
}
调用方法
@ResponseBody
@PostMapping(value = "/sendCode")
@CrossOrigin
public Response sendCode(@RequestParam String touser, HttpServletRequest request) {try {int code = (int)((Math.random()*9+1)*1000);sendSimpleMail(code+"",touser);return Response.success(code);} catch (Exception e) {return Response.error();}
}
四、说明
一般邮箱验证码有时效性,后续注册账户时,生成的验证码需使用redis保存,并设置时效性。后续用户点击注册时,从redis中去拿验证码去校验即可。