在开发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中实现通过邮箱找回密码的更多相关文章

  1. AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码

    AspNetCore - MVC实战系列目录 . 爱留图网站诞生 . AspNetCore - MVC实战系列(一)之Sqlserver表映射实体模型 . AspNetCore-MVC实战系列(二)之 ...

  2. spring mvc下实现通过邮箱找回密码功能

    1功能分析 通过spring mvc框架实现通过邮箱找回密码. 2 实现分析 主要是借助某个邮箱的pop3/smtp服务实现的邮件代发功能. 3 源码分析 3.1首先在用户表对应的javabean中加 ...

  3. django项目中使用邮箱找回密码功能

    本文使用qq邮箱,需要登录邮箱,在设置-账户里面开启SMTP服务,要记下授权码 前端html {#找回密码的表单#} <form action="" method=" ...

  4. Java实现邮箱找回密码 --转载

    通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的 ...

  5. Java实现邮箱找回密码

    通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的 ...

  6. php邮箱找回密码功能

    原理很简单: 用户找回密码的时候,填写用户名,程序得到用户名便可以去数据库取出用户对应的密码以及当时填写的邮箱, 根据用户名和密码生成一个key=md5(username+password),然后$s ...

  7. [py][mx]django通过邮箱找回密码

    忘记密码处理流程 注意: 这个文章里的找回密码页面截取有问题. 找回密码页应该是让输入邮箱 直接上代码 class ActiveView(View): # 主要功能是修改user_profile里的i ...

  8. Django 邮箱找回密码!!!!!!!!!!!!!!!!

    1.大概流程. @首先在完善登陆页面,增加忘记密码的链接. @为了账户安全,需要对操作者进行验证,向邮箱发随机数验证! @在重置验证码页面,验证验证码是否匹配(验证成功跳转至更改密码也页面). @ 重 ...

  9. 修复 WordPress 通过邮箱 找回密码时的链接无效&新用户注册时提示的链接无效

    感谢大佬:https://blog.csdn.net/xiaobinqt/article/details/83055058 感谢大佬:https://www.wpdaxue.com/lost-pass ...

随机推荐

  1. C语言基础——进制转换 / 数据表示

    第一部分:进制转换 二进制:由0~1构成,逢2进1 八进制:由0~7构成,逢8进1 十六进制:由0~9.A~F构成,逢16进1 两个基本概念 基数:n进制基数为n 123.4 = 1*10^2 + 2 ...

  2. Selenium WebDriver 中鼠标事件

    鼠标点击操作  鼠标点击事件有以下几种类型:  清单 1. 鼠标左键点击   Actions action = new Actions(driver);action.click();// 鼠标左键在当 ...

  3. 安装Linux基本工具

    yum install wget httpd-tools vim lrzsz Linux安装wget:yum -y install wget Linux安装vim编辑器:yum -y install ...

  4. 炸裂函数explode

    ateral viem 表的关联只能和explode使用 hive> select explode(info) from t_map where id=1; hive> create ta ...

  5. Windows Server 2012R2 DHCP服务介绍及搭建 转载

    转载链接:https://blog.csdn.net/KamRoseLee/article/details/79251830   一.什么是DHCP DHCP(DynamicHost Configur ...

  6. 05-kubernetes Pod控制器应用进阶

    目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 实际操作 livenessProbe 实战 livenessProbe exec 测试 livenessProbe httpGet ...

  7. vim介绍、颜色显示和移动光标、一般模式下移动光标及复制、剪切和粘贴

    第4周第4次课(4月12日) 课程内容: 5.1 vim介绍5.2 vim颜色显示和移动光标5.3 vim一般模式下移动光标5.4 vim一般模式下复制.剪切和粘贴 5.1 vim介绍 centos7 ...

  8. 切换控制器的三种手段push modal 切换window的rootViewController

  9. 如何切换本地的GIT账号

    如何切换本地的GIT账号 1.为什么登陆第一次Git之后,就不用登陆了呢? 因为电脑已经将你的登陆凭据给保存起来了. 这也正是你不知道如何切换账号的原因. 2.在哪里能看已经保存的登陆凭证呢?并能够切 ...

  10. 2019-2020-1 20199304《Linux内核原理与分析》第七周作业

    进程的描述和进程的创建 1.进程描述 1.1操作系统的三大管理功能以及对应的抽象概念: 进程管理 内存管理 文件系统 1.2Linux进程的状态: (1)Linux中进程的状态细分可以分为七种: R运 ...