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 ...
随机推荐
- 手动模拟实现Spring IOC功能(基于javaConfig风格)
以下文中spring特指spring frameWork项目,不含其它:如spring cloud等. 作为刚开始研究spring源码的小白,对于spring两大核心功能之一的IOC,虽说大致了解了B ...
- day20190911笔记
js_访问节点元素_document系列方法: first_jQuery.html <!DOCTYPE html><html> <head> <meta ch ...
- c语言I博客专业04
问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8655 我在 ...
- VMware中linux虚拟机的安装
打开安装的VMware 15,点击新建虚拟机 2.选择典型即可,点击下一步 3.选择“稍后安装操作系统”,点击下一步 4.选择想安的版本,点击下一步 5.设置虚拟机名称及安装位置(路径必须全英文!) ...
- Matlab交叉验证函数——crossvalind
Generate cross-validation indices 生成交叉验证索引 Syntax语法 Indices = crossvalind('Kfold', N, K) %K折交叉验证 ...
- react-starter-projects
react-starter-projects These are repositories that you copy and modify to create your own React app. ...
- Python-Excel 模块哪家强 #华为云·寻找黑马程序员#
python操作excel 最原始的莫过于两位老牌黄金搭档xlrd xlwt了,针对二者的封装有如下模块: xlutils & xlrd & xlwt 为什么把这三个一起说? 首先,x ...
- mac mysql start ERROR! The server quit without updating PID file
在mac下安装完mysql,启动时出现error: ERROR! The server quit without updating PID file (/usr/local/var/mysql/nal ...
- NetCore 3.0 中使用Swagger生成Api说明文档及升级报错原因
认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参 ...
- IOS UIAlertView(警告框)方法总结
转自:my.oschina.net/u/2340880/blog/408873?p=1 IOS中UIAlertView(警告框)常用方法总结 一.初始化方法 - (instancetype)initW ...