JavaWeb中实现通过邮箱找回密码
在开发JavaWeb项目中,利用邮箱帮用户找回密码。
效果展示: 
需要一个发送邮件的jar包 : javax.mail .jar
1.JSP页面(设置邮箱输入框)
HTML:
<p >请输入您账户关联的邮箱</p>
邮箱:<input type="email" name="email" id="email" placeholder="请您输入邮箱" required>
<button type="submit" id="retrievePassword">提交</button>
JS:
$(document).ready(function () {
$("#retrievePassword").click(function(){
var email = $("#email").val();
if(email == null || email == ""){
alert("邮箱不能为空");
return;
}
//正则表达式判断邮箱地址是否正确
var emreg=/^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
if(emreg.test(email.value)== true){
alert("您输入的不是一个合法邮箱格式!");
return;
}
var postData = {
"email":email
}
// ajax后端数据请求
$.ajax({
type : "post",
url : "user/xxx",
data : postData,
success : function(data) {
//todo
},
error : function() {
//todo
}
});
});
});
2.Controller(控制层)代码(根据用户输入的邮箱账号找到用户修改为新的密码,并生成发送邮件类的实例,再设置收件人和要发送的内容,最后发送邮件)
//找回密码控制器
@RequestMapping(value = "/xxx", method = RequestMethod.POST, produces = "text/html;charset=UTF-8;")
@ResponseBody // 此注解不能省略 否则ajax无法接受返回值
public String retrievePassword(HttpServletRequest request, HttpServletResponse response)
throws UnsupportedEncodingException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8"); HttpSession session = request.getSession();
Map<String, Object> map = new HashMap<String, Object>();
String email = request.getParameter("email");// email //实例化一个发送邮件的对象
SendMail mySendMail = new SendMail();
//修改密码并返回
//产生随机的6位数密码
int Password = ((int)((Math.random()*9+1)*100000));
//根据邮箱寻找是否有该用户信息,找到就修改密码,否则就提示用户无效的用户Email,此步代码省略。。。。 //修改密码成功后进行发送邮件
//设置收件人和消息内容
mySendMail.sendMail(email, "xxx提醒,您的密码为:"+ Password);
map.put("code", 200);
map.put("msg", "恭喜,找回密码成功,请前往邮箱查看密码!");
JSONObject jsonFail = new JSONObject(map);
return jsonFail.toString();
}
3.发送邮件类
package com.xxx.xxx.util;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties; public class SendMail {
// 发件人的邮箱账号如:xxx@163.com
public static String sendEmailAccount = "xxx@163.com";
// 发件人的邮箱的授权码(自己在邮箱服务器中开启并设置)
public static String sendEmailPassword = "xxx";
// 发件人邮箱的SMTP服务器地址,如:smtp.163.com
public static String sendEmailSMTPHost = "smtp.163.com";
// 收件人的邮箱账号
public static String receiveMailAccount = ""; // 把发送邮件封装为函数,参数为收件人的邮箱账号和要发送的内容
public void sendMail(String receiveMailAccount, String mailContent) {
// 创建用于连接邮件服务器的参数配置
Properties props = new Properties();
// 设置使用SMTP协议
props.setProperty("mail.transport.protocol", "smtp");
// 设置发件人的SMTP服务器地址
props.setProperty("mail.smtp.host", sendEmailSMTPHost);
// 设置需要验证
props.setProperty("mail.smtp.auth", "true"); //Linux端口25没有开放,放弃25端口,使用ssl加密并改用465端口--此举可以兼顾window和Linux
//使用ssl加密
props.setProperty("mail.smtp.ssl.enable", "true");
//设置端口
props.setProperty("mail.smtp.port", "465"); // 根据配置创建会话对象, 用于和邮件服务器交互
Session session = Session.getInstance(props);
// 设置debug模式,便于查看发送过程所产生的日志
session.setDebug(true); try {
// 创建一封邮件
MimeMessage message = createMimeMessage(session, sendEmailAccount, receiveMailAccount, mailContent); // 根据 Session 获取邮件传输对象
Transport transport = session.getTransport(); transport.connect(sendEmailAccount, sendEmailPassword); // 发送邮件, 发到所有的收件地址, 通过message.getAllRecipients() 可以获取到在创建邮件对象时添加的所有收件人
transport.sendMessage(message, message.getAllRecipients()); // 关闭连接
transport.close();
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
*
* @param session
* 和服务器交互的会话
* @param sendMail
* 发件人邮箱
* @param receiveMail
* 收件人邮箱
* @return
* @throws Exception
*/
public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail,
String mailContent) throws Exception {
// 创建一封邮件
MimeMessage message = new MimeMessage(session); // 设置发件人姓名和编码格式
message.setFrom(new InternetAddress(sendMail, "xxx平台", "UTF-8")); // 收件人
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "尊敬的用户", "UTF-8")); // 设置邮件主题
message.setSubject("找回密码提醒", "UTF-8"); // 设置邮件正文
message.setContent(mailContent, "text/html;charset=UTF-8"); // 设置发件时间
message.setSentDate(new Date()); // 保存设置
message.saveChanges(); return message;
}
}
注意此处用的授权码,需要自己登录邮箱去设置,如163邮箱设置如下:


参考:https://blog.csdn.net/qq_40348465/article/details/83629000
JavaWeb中实现通过邮箱找回密码的更多相关文章
- AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码
AspNetCore - MVC实战系列目录 . 爱留图网站诞生 . AspNetCore - MVC实战系列(一)之Sqlserver表映射实体模型 . AspNetCore-MVC实战系列(二)之 ...
- spring mvc下实现通过邮箱找回密码功能
1功能分析 通过spring mvc框架实现通过邮箱找回密码. 2 实现分析 主要是借助某个邮箱的pop3/smtp服务实现的邮件代发功能. 3 源码分析 3.1首先在用户表对应的javabean中加 ...
- django项目中使用邮箱找回密码功能
本文使用qq邮箱,需要登录邮箱,在设置-账户里面开启SMTP服务,要记下授权码 前端html {#找回密码的表单#} <form action="" method=" ...
- Java实现邮箱找回密码 --转载
通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的 ...
- Java实现邮箱找回密码
通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的 ...
- php邮箱找回密码功能
原理很简单: 用户找回密码的时候,填写用户名,程序得到用户名便可以去数据库取出用户对应的密码以及当时填写的邮箱, 根据用户名和密码生成一个key=md5(username+password),然后$s ...
- [py][mx]django通过邮箱找回密码
忘记密码处理流程 注意: 这个文章里的找回密码页面截取有问题. 找回密码页应该是让输入邮箱 直接上代码 class ActiveView(View): # 主要功能是修改user_profile里的i ...
- Django 邮箱找回密码!!!!!!!!!!!!!!!!
1.大概流程. @首先在完善登陆页面,增加忘记密码的链接. @为了账户安全,需要对操作者进行验证,向邮箱发随机数验证! @在重置验证码页面,验证验证码是否匹配(验证成功跳转至更改密码也页面). @ 重 ...
- 修复 WordPress 通过邮箱 找回密码时的链接无效&新用户注册时提示的链接无效
感谢大佬:https://blog.csdn.net/xiaobinqt/article/details/83055058 感谢大佬:https://www.wpdaxue.com/lost-pass ...
随机推荐
- Mybatis工作流程源码分析
1.简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单 ...
- Intellij 生成exe可执行文件
生成jar包 编写源代码 此处我使用kotlin来编码,主函数实际功能就是输出一行文字. /** * 应用入口 * @author mazaiting */ object TestExe { @J ...
- 抖音抖一抖-SVG和CSS视觉故障艺术小赏
故障艺术,英文名称叫glitch,在很多赛博朋克作品中经常看到,其实就是故意表现一种显示设备的小故障效果,抖音的图标其实就是这种的效果,我们看下这个图标 这个图标中的红色和蓝色的偏移其实就是一种故障艺 ...
- MySQL5.6.36 自动化安装脚本
背景 很好的朋友邱启明同学,擅长MySQL,目前任职某大型互联网业MySQL DBA,要来一套MySQL自动安装的Shell脚本,贴出来保存一些. 此版本为 MySQL 5.6.365 ###### ...
- vsftp安装和配置
2013-10-10 10:49:48| 分类: Linux|举报|字号 订阅 源码下载地址:ftp://vsftpd.beasts.org/users/cevans/untar/ 1. ...
- ASI和AFN的区别
ASI总结 发送请求的2个对象 1.发送GET请求 ASIHttpRequest 2.发送POST请求 ASIFormDataRequest 二发送请求 1.同步请求 startSynchronous ...
- 在文件夹下所有文件中查找字符串(linux/windows)
在linux下可以用 grep "String" filename.txt#字符串 文件名grep -r "String" /home/#递归查找目录下所有文件 ...
- 华为云EI人脸识别接口初探
0. 准备工作 开户及申请开通人脸识别服务,可以参考https://education.huaweicloud.com:8443/courses/course-v1:HuaweiX+CBUCNXE01 ...
- Redis 命令执行过程(上)
今天我们来了解一下 Redis 命令执行的过程.在之前的文章中<当 Redis 发生高延迟时,到底发生了什么>我们曾简单的描述了一条命令的执行过程,本篇文章展示深入说明一下,加深读者对 R ...
- 数据库Oracle通用函数
通用函数:可用于任意数据类型,并且适用于空值.• NVL (expr1, expr2) • NVL2 (expr1, expr2, expr3) • NULLIF (expr1, expr2) • C ...