java web邮箱找回密码

总体流程

1.使用的平台
2.找回过程
3.找回相关代码
4.相关截图
5.使用的jar包

使用平台

jsp+ servlet

MySql

找回过程

  • 生成密钥UUID
  • 设置过期时间outdata
  • 生成数字签名(由UUID、userid、outdata构成)
  • 将数字签名相关参数保存至数据库
  • 产生链接,发送用户邮箱
  • 用户点击链接验证身份后重置密码

找回相关代码

  1. 获取web工程链接前缀(对应产生重置密码链接的basePath)
// 在 servlet中,arg0为HttpServletRequest对象
  	String path=arg0.getContextPath();
    String basePath=arg0.getScheme()+"://"+arg0.getServerName()+":"+arg0.getServerPort()+path; 
  1. 产生重置密码链接
@param ui   model存储找回密码相关参数
public String createLink(model.userinfo ui,String basePath){
     
       //生成密钥  
       String secretKey=UUID.randomUUID().toString();  
       //设置过期时间  
       Date outDate = new Date(System.currentTimeMillis() + 30 * 60 * 1000);// 30分钟后过期  
//	    System.out.println(System.currentTimeMillis());  //System.currentTimeMillis()相当于是毫秒为单位
       long date = outDate.getTime() / 1000 * 1000;// 忽略毫秒数  mySql 取出时间是忽略毫秒数的  
         
       //此处应该更新Userinfo表中的过期时间、密钥信息  
       ui.setOutDate(date);  
       ui.setValidataCode(secretKey);
   try {
   		userinfo.postIn(ui);
   	} catch (SQLException e) {
   		e.printStackTrace();
   	} 
       //将用户名、过期时间、密钥生成链接密钥  
       String key =ui.getUserid()+ "$" + date + "$" + secretKey;  
         
       String digitalSignature = MD5Util.getMd5(key);// 数字签名  
         
       String resetPassHref = basePath +  "/toFindPassword3?sid="+ digitalSignature +"&id="+ui.getUserid();  
         
       String emailContent =  resetPassHref+ "\n"+"请勿回复本邮件.点击下面的链接,重设密码,本邮件超过30分钟,链接将会失效,需要重新申请找回密码." ;  
       return emailContent;  
}

3.发送带链接邮件

// 发件人的邮箱账号如:xxx@163.com
	public static String sendEmailAccount = "你的邮箱";
	// 发件人的邮箱的授权码(自己在邮箱服务器中开启并设置)
	public static String sendEmailPassword = "你的邮箱授权码";
	// 发件人邮箱的SMTP服务器地址,如:smtp.163.com
	public static String sendEmailSMTPHost = "smtp.qq.com";
	// 收件人的邮箱账号
	public static String receiveMailAccount = "";
 
	// 把发送邮件封装为函数,参数为收件人的邮箱账号和要发送的内容
	public boolean sendMail(String receiveMailAccount, String mailContent,String Subject) {
		boolean result=false;
		// 创建用于连接邮件服务器的参数配置
		Properties props = new Properties();
		// 设置使用SMTP协议
		props.setProperty("mail.transport.protocol", "smtp");
		// 设置发件人的SMTP服务器地址
		props.setProperty("mail.smtp.host", sendEmailSMTPHost);
		// 设置需要验证
		props.setProperty("mail.smtp.auth", "true");
 
		// 根据配置创建会话对象, 用于和邮件服务器交互
		Session session = Session.getInstance(props);
		// 设置debug模式,便于查看发送过程所产生的日志
//		session.setDebug(true);
 
		try {
			// 创建一封邮件
			MimeMessage message = createMimeMessage(session, sendEmailAccount, receiveMailAccount, mailContent,Subject);
 
			// 根据 Session 获取邮件传输对象
			Transport transport = session.getTransport();
 
			transport.connect(sendEmailAccount, sendEmailPassword);
 
			// 发送邮件, 发到所有的收件地址, 通过message.getAllRecipients() 可以获取到在创建邮件对象时添加的所有收件人
			transport.sendMessage(message, message.getAllRecipients());
 
			// 关闭连接
			transport.close();
			
			//判断是否发送成功
			result=true;
		} 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();
		}
		return result;
	}
 
	/**
	 * 
	 * @param session
	 *            和服务器交互的会话
	 * @param sendMail
	 *            发件人邮箱
	 * @param receiveMail
	 *            收件人邮箱
	 * @return
	 * @throws Exception
	 */
	public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail,
			String mailContent,String Subject) throws Exception {
		// 创建一封邮件
		MimeMessage message = new MimeMessage(session);
 
		// 设置发件人姓名和编码格式
		message.setFrom(new InternetAddress(sendMail, "小何", "UTF-8"));
 
		// 收件人
		message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "尊敬的用户", "UTF-8"));
 
		// 设置邮件主题
		message.setSubject(Subject, "UTF-8");
 
		// 设置邮件正文
		message.setContent(mailContent, "text/html;charset=UTF-8");
 
		// 设置发件时间
		message.setSentDate(new Date());
 
		// 保存设置
		message.saveChanges();
 
		return message;
	}

相关截图

邮件链接

使用的jar包

https://pan.baidu.com/mbox/homepage?short=qZN9MBq.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值