java-springmvc 邮箱发送验证码

springmvc 邮箱发送验证码

这是基于mave项目,springmvc的邮箱发送验证码。
要实现发送验证码,无论你是使用网易邮箱还是qq邮箱,
都要开启POP3/SMTP服务 ,获取一个授权码。

项目部署如下图:

java-springmvc 邮箱发送验证码_第1张图片

1. 创建web的maven项目,导入一下包,pom.xml文件的配置如下:
	
		
			org.springframework
			spring-webmvc
			5.2.3.RELEASE
		

		
		
			org.springframework
			spring-context-support
			5.2.3.RELEASE
		

		
		
			javax.mail
			mail
			1.4.7
		
2. spring-beans.xml文件里面需要配置发件人的账号和密码(即授权码)
						
    
   			 
   		
   		
   	
3.SendMailUtil.java邮箱发送的具体代码:
package com.yjj.email.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

public class SendMailUtil {
	private String sendEmail;//发件箱
	private String pwd;//发件箱的授权码
	
	
	public void setSendEmail(String sendEmail) {
		this.sendEmail = sendEmail;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	/**
	 * 发送html格式的邮件
	 * @param receiveEmail	收件箱
	 * @param name	称呼
	 * @param code	验证码
	 * @return
	 */
	public boolean sendHtmlMail(String receiveEmail,String name,String code){
		
		try {
			JavaMailSenderImpl senderImpl=new JavaMailSenderImpl();
			
			//邮箱的主机  如果是qq邮箱就是smtp.qq.com
			senderImpl.setHost("smtp.163.com");
			//编码集
			senderImpl.setDefaultEncoding("utf-8");
			
			//建立邮件消息,我们需要发送的是html格式邮件
			MimeMessage mimeMessage=senderImpl.createMimeMessage();
			MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage);
			
			//设置收件人,寄件人
			messageHelper.setTo(receiveEmail);//收件人
			messageHelper.setFrom(sendEmail);//发件人
			messageHelper.setSubject("relax酒店预订系统");//设置邮件的主题
			
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
			
			String str=""
					+"

尊敬的:"+ name +",您好

"
+"

欢迎使用relax酒店预订系统,您本次的验证码是" +""+ code +"" +",3分钟之内有效,请尽快使用!

" +"长沙市relax酒店

"
+""+ sdf.format(new Date()) +""; //设置邮件的正文 messageHelper.setText(str,true); //发件箱的名称 senderImpl.setUsername(sendEmail); //发件箱的密码 状态码 senderImpl.setPassword(pwd); Properties prop=new Properties(); prop.put("mail.smtp.auth", "true");//让服务器去认证用户名和密码 prop.put("mail.smtp.timeout", "2500");//连接超时时间 senderImpl.setJavaMailProperties(prop); senderImpl.send(mimeMessage); return true; } catch (Exception e) { e.printStackTrace(); } return false; } }
4.SendEmail.java 控制器代码,处理前端请求的
package com.yjj.email.controller;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yjj.email.util.SendMailUtil;

@Controller
public class SendEmail {
	
	@Autowired
	private SendMailUtil sendMailUtil;
	
	@RequestMapping("/code")
	@ResponseBody
	public int sendEmail(String email,HttpSession session){
		String code="";
		//随机产生验证码
		Random rd=new Random();
		while(code.length()<6){
			code+=rd.nextInt(10);
		}
		
		//如果验证码发送成功
		if(sendMailUtil.sendHtmlMail(email, "yjjs", code)){
			session.setAttribute("vcode", code);
			
			//创建TimerTask用来三分钟之后移出vcode
			TimerTask task=new TimerTask(){

				@Override
				public void run() {
					session.removeAttribute("vcode");
				}
			};
			
			//实例化这个task任务
			Timer timer=new Timer();
			timer.schedule(task, 180000);//三分钟之后执行task任务
			return 1;
		}
		
		return 0;
	}
}

5.login.html 前端界面代码,为了方便测试,只是简单的写了一下,当点击发送验证码时,发送请求
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>邮箱发送</title>
</head>
<body>
	邮箱:<input placeholder="请输入你的邮箱" id="email" name="email"><br>
	<input type="button" value="发送验证码" onclick="sendEmail()">
</body>
<script src="js/jquery-1.11.3.js"></script>
<script>
	function sendEmail(){
		//获取收件邮箱
		var email=$("#email").val();
		
		if(email==null || email==""){
			return;
		}
		
		//发送请求
		$.post("code",{email:email},function(data){
			console.log(data);
		},"text");
	}
</script>
</html>

网易邮箱获取授权码方式:
设置–>POP3/SMTP/IMAP
如果是关闭状态,开启之后就会有一个授权码。(我的是已经开启了所以显示已开启)
java-springmvc 邮箱发送验证码_第2张图片
QQ邮箱获取授权码方式:
设置–>账户
下拉找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
只需要开启第一项就可以了,就可以获取一个授权码
java-springmvc 邮箱发送验证码_第3张图片

你可能感兴趣的:(java-springmvc 邮箱发送验证码)