java mail实现发送邮件验证码功能

前言

本篇文章我们来实现邮箱验证码发送和验证功能,主要运用的技术有springmvc,java mail包,redis,java mail中已经封装好了一些常用的发送邮件等类,直接使用就好,非常简单方便,下面将一步步展现效果。

首先附上java mail 包的下载地址

链接: https://github.com/javaee/javamail/releases
图片:选择javax.mail.jar

html页面

	此页面为简化版的,只为实现发送验证码邮件和校验验证码是否一致功能,自己可优化哦~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="jquery.js"></script>
<!-- 此处jquery路径请改成自己的-->
</head>
<script type="text/javascript">

$(function(){
	/*单击发送验证码按钮发送邮件*/
	$("#btn").click(function(){
		var madd = $("#mailAddress").val();
		
		$.post(
				"/pcdnManager/sendMailController/sendMail.do",
				{"mailAddress":madd},
				function(data){
					if(data ==1	){
						alert("发送验证码成功!!")
					}else{
						alert("邮箱不正确呢!")
					}
				},"json"
			)
	});

	/*单击校验验证码验证是否一致*/
	$("#btn1").click(function(){
		var yzm = $("#yanzm").val();
		
		$.post(
				"/pcdnManager/sendMailController/getYan.do",
				{"yzm":yzm},
				function(data){
					if(data == 1	){
						alert("验证成功!!")
					}else if(data == 2){
						alert("验证码已过期!请重新发送!")
					}else if(data == 0){
						alert("验证码不正确!注意区分大小写")
					}
				},"json"
			)
		
	})
		
})	
</script>
<body>
<input type="text" placeholder="请输入邮箱地址" id="mailAddress">
<input type="text" placeholder="请在此处输入验证码!" id="yanzm">
<button id="btn">发送验证码</button>
<button id="btn1">验证验证码</button>
</body>
</html>

发送邮件的类

	邮件的发送类,设置好发送方邮箱和接收方邮箱就好了~

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMailText {

	// 发件人地址 此处要修改成发送方的邮箱地址
	public static String senderAddress = "AAA@126.com";
	// 收件人地址 此处要修改成接收方的邮箱地址
	public static String recipientAddress = "BB@qq.com";
	// 发件人账户名
	public static String senderAccount = "AAA";
	// 发件人账户密码
	public static String senderPassword = "ABC";

	/**
	 * 获得创建一封邮件的实例对象
	 * 
	 * @param session
	 * @return
	 * @throws MessagingException
	 * @throws AddressException
	 */
	public static MimeMessage getMimeMessage(Session session,String yzm) throws Exception {
		// 创建一封邮件的实例对象
		MimeMessage msg = new MimeMessage(session);
		// 设置发件人地址
		msg.setFrom(new InternetAddress(senderAddress));
		/**
		 * 设置收件人地址(可以增加多个收件人、抄送、密送),即下面这一行代码书写多行 MimeMessage.RecipientType.TO:发送
		 * MimeMessage.RecipientType.CC:抄送 MimeMessage.RecipientType.BCC:密送
		 */
		msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipientAddress));
		// 设置邮件主题
		msg.setSubject("邮箱验证码邮件", "UTF-8");

		// 设置邮件正文
		msg.setContent("您的邮箱验证码为:&nbsp;&nbsp;<b>" + yzm + "</b><p>请在5分钟内输入,超时将失效哦!</p><p>-----ps 打死也别把验证码告诉别人哦!</p>",
				"text/html;charset=UTF-8");
		// 设置邮件的发送时间,默认立即发送
		msg.setSentDate(new Date());
		// 结束

		return msg;
	}

	/**
	 * 发送邮件的方法
	 * 
	 * @throws MessagingException
	 * 
	 */
	public static void sendMail(String yzm) throws MessagingException {
		// 1、连接邮件服务器的参数配置
		Properties props = new Properties();
		// 设置用户的认证方式
		props.setProperty("mail.smtp.auth", "true");
		// 设置传输协议
		props.setProperty("mail.transport.protocol", "smtp");
		// 设置发件人的SMTP服务器地址  此处一般使用的是什么邮箱就是用什么后缀  如:smtp.qq.com
		props.setProperty("mail.smtp.host", "smtp.126.com");
		// 2、创建定义整个应用程序所需的环境信息的 Session 对象
		Session session = Session.getInstance(props);
		// 设置调试信息在控制台打印出来
		session.setDebug(true);
		// 3、创建邮件的实例对象
		Message msg = null;
		try {
			msg = getMimeMessage(session,yzm);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 4、根据session对象获取邮件传输对象Transport
		Transport transport = session.getTransport();
		// 设置发件人的账户名和密码
		transport.connect(senderAccount, senderPassword);
		// 发送邮件,并发送到所有收件人地址,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
		transport.sendMessage(msg, msg.getAllRecipients());

		// 5、关闭邮件连接
		transport.close();
	}
}

生成随机验证码的类

	生成随机数字加字母的验证码类~


import java.util.Random;

public class StringRandom {

	public String getStringRandom(int length) {

		String val = "";
		Random random = new Random();

//参数length,表示生成几位随机数
		for (int i = 0; i < length; i++) {

			String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
			if ("char".equalsIgnoreCase(charOrNum)) {
				int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
				val += (char) (random.nextInt(26) + temp);
			} else if ("num".equalsIgnoreCase(charOrNum)) {
				val += String.valueOf(random.nextInt(10));
			}
		}
		return val;
	}

}


controller类

	controller类中有两个方法,一个是发送邮件,一个是验证验证码~


import javax.mail.MessagingException;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.djnet.utils.SendMailText;
import com.djnet.utils.StringRandom;

import redis.clients.jedis.Jedis;

@Controller
@RequestMapping("sendMailController")
public class SendMailController {

     private StringRandom sr = new StringRandom();
	
	@RequestMapping("sendMail.do")
	@ResponseBody
	public String sendMail(String mailAddress) throws MessagingException {
		String str = sr.getStringRandom(5);
		SendMailText.recipientAddress = mailAddress;
		SendMailText.sendMail(str);
		//调用redis将验证码存进redis中,方便拿前台的验证码来对比
		Jedis jedis = new Jedis("localhost");
		jedis.set("yzm", str);
		//设置验证码的有效时间,此处设置为100秒后失效,要重新获取
		jedis.expire("yzm", 100);
		jedis.close();
		return "1";
	}
	
	@RequestMapping("getYan.do")
	@ResponseBody
	public String getyan(String yzm) throws MessagingException {
		Jedis jedis = new Jedis("localhost");
		String str = jedis.get("yzm");
		if(str==null) {
			//如果redis中key值为空,就表示验证码已失效
			jedis.close();
			return "2";
		}else if(yzm.equals(str)) {
			//验证码正确,每次使用完一个验证码就清除该key
			jedis.del("yzm");
			jedis.close();
			return "1";
		}else{
			jedis.close();
			return "0";
		}
	}
		
}


发送邮件成功的截图

在这里插入图片描述

验证码过期截图:

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值