java-springmvc 郵箱發送驗證碼

springmvc 郵箱發送驗證碼

這是基於mave項目,springmvc的郵箱發送驗證碼。
要實現發送驗證碼,無論你是使用網易郵箱還是qq郵箱,
都要開啓POP3/SMTP服務 ,獲取一個授權碼。

項目部署如下圖:

在這裏插入圖片描述

1. 創建web的maven項目,導入一下包,pom.xml文件的配置如下:
	<!-- spring的依賴包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.2.3.RELEASE</version>
		</dependency>

		<!-- 郵件發送的支持包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>5.2.3.RELEASE</version>
		</dependency>

		<!-- 郵件發送 -->
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4.7</version>
		</dependency>
2. spring-beans.xml文件裏面需要配置發件人的賬號和密碼(即授權碼)
						<!--  class:發送郵件的核心代碼的位置  -->
    <bean id="sendMailUtil" class="com.yjj.email.util.SendMailUtil">
   			 <!--  給屬性賦值  name:賬號   pwd:授權碼 -->
   		<property name="sendEmail" value="[email protected]"></property>
   		<property name="pwd" value="IDYARWQUPSSUGM"></property>
   	</bean>
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="<!DOCTYPE html><html><head><meta charset='UTF-8'></head><body>"
					+"<p style='font-size:20px;font-weight:blod;'>尊敬的:"+ name +",您好</p>"
					+"<p style='text-indent:2em;font-size:20px'>歡迎使用relax酒店預訂系統,您本次的驗證碼是"
					+"<span style='font-size:30px; font-weight:blod; color:red;'>"+ code +"</span>"
					+",3分鐘之內有效,請儘快使用!</p><p style='text-align:right; padding-right:20px;'>"
					+"<a href='http://www.hyycinfo.com' style='font-size18px;'>長沙市relax酒店</a></p>"
					+"<span style='font-size:18px; float:right; margin-right:60px;'>"+ sdf.format(new Date()) +"</span></body></html>";
			
			//設置郵件的正文
			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
如果是關閉狀態,開啓之後就會有一個授權碼。(我的是已經開啓了所以顯示已開啓)
在這裏插入圖片描述
QQ郵箱獲取授權碼方式:
設置–>賬戶
下拉找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務
只需要開啓第一項就可以了,就可以獲取一個授權碼
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章