1.首先在pom.xml文件中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
2.去QQ邮箱中 设置-账户中开启pop3服务-生成授权码(授权码自己保密,不要泄露)
3.配置邮件类
/**
* 邮件配置类
*/
@Configuration
public class Mailconfig {
/**
* @return 获取邮件发送实例
*/
@Bean
public MailSender mailSender(){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
//指定用来发送Emai的邮件服务器主机名
mailSender.setHost("smtp.qq.com");
//默认端口
mailSender.setPort(587);
//设置用户名
mailSender.setUsername("xxx@foxmail.com");
mailSender.setPassword("上一步开启pop3服务中的授权码");
return mailSender;
}
}
4.测试 fandBackPassword.html
<form action="" method="post">
<div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">
<div class="layadmin-user-login-main">
<div class="layadmin-user-login-box layadmin-user-login-body layui-form">
<div class="layui-form-item">
<label class="layadmin-user-login-icon layui-icon layui-icon-cellphone" for="yzm"></label>
<input type="text" name="email" lay-verify="email" placeholder="请输入注册时的邮箱"
class="layui-input">
</div>
<div class="layui-form-item">
<div class="layui-row">
<div class="layui-col-xs7">
<label class="layadmin-user-login-icon layui-icon layui-icon-vercode" for="yzmBtn"></label>
<input type="text" name="yzm" id="yzm" placeholder="短信验证码"
class="layui-input">
</div>
<div class="layui-col-xs5">
<div style="margin-left: 10px;">
<button class="layui-btn layui-btn-primary layui-btn-fluid"
id="yzmBtn" lay-submit="" lay-filter="sendEmail">获取验证码
</button>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid" lay-submit lay-filter="submitForm">找回密码</button>
</div>
</div>
</div>
</div>
</form>
<script>
layui.use('form', function () {
var form = layui.form;
form.on('submit(sendEmail)', function (data) { //传form进去 表单内容
var email = data.field.email;
console.log(email)
//把验证码按钮disabled 防止重复乱发短信
/*$("#yzmBtn").attr({"disabled": "disabled"})*/
layer.msg("发送中....");
$.post("user/sendEmail", {email: email}, function (result) {
if (result.success) {
layer.msg("验证码已发送到你的邮箱,请注意查收,如长时间未收到邮件,请联系管理员", {
icon: 1,
time: 5000
}, function () {
$("#yzm").focus() //获得焦点
});
} else {
layer.msg(result.errorInfo, {
icon: 5,
time: 5000
}, function () {
$("#yzmBtn").remove()
});
}
}, "json")
return false;
});
//提交 监听
form.on('submit(submitForm)', function (data) { //传form进去 表单内容
var yzm = $("#yzm").val();//获得验证码的值
console.log(yzm)
if(yzm==''){
layer.msg("请输入验证码")
//把焦点放在验证码上
$("#yzm").focus();
return false;
}
$.post("user/checkYzm", {yzm: yzm}, function (result) {
if (result.success) {
layer.msg("已通过验证,密码已经重置为123456,请登录后修改密码!", {
icon: 1,
time: 5000
}, function () {
parent.window.location.reload(); //刷新
});
} else {
layer.msg(result.errorInfo, {
icon: 5,
time: 5000
});
}
}, "json")
return false;
});
});
</script>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200219223644849.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MzczMjIz,size_16,color_FFFFFF,t_70)
控制器:
/**
* 发送邮件
*
* @param session
* @param email
* @return
*/
@ResponseBody
@RequestMapping("/sendEmail")
public Map<String, Object> sendEmail(String email, HttpSession session) {
Map<String, Object> map = new HashMap<>();
if (StringUtils.isEmpty(email)) {
map.put("success", false);
map.put("errorInfo", "邮箱不能为空");
return map;
}
//验证邮件是否存在
User userEmail = userService.findByEmail(email);
if (userEmail == null) {
map.put("success", false);
map.put("errorInfo", "邮箱不存在");
return map;
}
//获得六位验证码
String mailCOde = Time.getSixCode();
//发送邮件
SimpleMailMessage message = new SimpleMailMessage();
//发件人
message.setFrom("xxxx@qq.com.com");
//收件人
message.setTo(email);
//主题
message.setSubject("用户找回密码");
//正文内容
message.setText("本次的验证码是:" + mailCOde);
//发送
mailSender.send(message);
System.out.println(mailCOde);
//把验证码存进session
session.setAttribute("mailCode", mailCOde);
//session.setMaxInactiveInterval(3);
//把userId存进去 帮用户修改一个默认密码
session.setAttribute("userId", userEmail.getUserId());
map.put("success", true);
return map;
}
/**
* @param yzm 邮件验证码判断
* @param session
* @return
*/
@ResponseBody
@RequestMapping("/checkYzm")
public Map<String, Object> check(String yzm, HttpSession session) {
Map<String, Object> map = new HashMap<>();
if (StringUtils.isEmpty(yzm)) {
map.put("success", false);
map.put("errorInfo", "验证码不能为空");
return map;
}
//从session取出验证码
String mailCode = (String) session.getAttribute("mailCode");
String userId = (String) session.getAttribute("userId");
if (!mailCode.equals(yzm)) {
map.put("success", false);
map.put("errorInfo", "验证码错误");
return map;
}
/**
*
* 重置前先把用户信息查出来
* 取出密码
* 给用户重置密码为123456
* 执行sql语句更新
*/
User user = userService.getById(userId);
user.setPassword(EncryptionUtil.md5("123456", EncryptionUtil.SALT));
userService.updateById(user);
map.put("success", true);
return map;
}
/**
* @return 生成六位验证码
*/
public static String getSixCode(){
Random random = new Random();
String result="";
for (int i=0;i<6;i++){
result+=random.nextInt(10);
}
return result;
}
总体大概就是这样,有啥问题,大家一起留言加油。毕竟我也是萌新。大佬求带