邮箱验证开发步骤
1.首先是需要去qq邮箱里面开启一些东西
打开琼琼邮箱----》设置----》账户-----》POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 ---->开启第一个按照操作发短信就能获得一个 授权码一定要记住之后回使用得到
2.去pom.xml里面导入邮箱依赖
<!--邮箱依赖-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
3.导入邮箱的验证信息类
public class MailUtil {
//修改为自己的qq邮箱账号
private static String myEmailAccount = "278359791@qq.com"; //使用的是QQ的发邮件服务器
//修改为自己的邮箱授权码 就是开启POP3/SMTP服务得到的授权码 yzqcjerpxepsbijd 这里就使用到了授权码
private static String myEmailPassword = "lgkzcqittrtnbijd";
//如果用qq邮箱不用修改,如果用163邮箱,修改为smtp.163.com 就是发邮件服务器
private static String myEmailSMTPHost = "smtp.qq.com";
//发送人的用户名
private static String sendUser = "你的小宝贝";
/**
* @param @param 收件人邮箱 receive
* @param @param 标题 title
* @param @param 内容 body 正文
* @param @throws Exception void
* @throws
* @Title: send
* @Description: TODD
*/
//要发送验证码所以返回值是String
public static String send(String receive,String title, String body) throws Exception {
// 1. 创建参数配置, 用于连接邮件服务器的参数配置,获得属性值
Properties props = new Properties();
// 使用的协议(JavaMail规范要求).在里面放协议
props.setProperty("mail.transport.protocol","smtp");
// 发件人的邮箱的 SMTP 服务器地址 注意key值只能写mail.smtp.host
props.setProperty("mail.smtp.host" , myEmailSMTPHost);
// 需要请求认证 true就是需要认证
props.setProperty("mail.smtp.auth", "true");
/*
* 需要SSL安全配置的需要以下配置
* SMTP 服务器的端口 (非 SSL 连接的端
口一般默认为 25, 可以不添加, 如果开启了 SSL 连
接,
* 需要改为对应邮箱的 SMTP 服务器的端
口, 具体可查看对应邮箱服务的帮助,
* QQ邮箱的SMTP(SLL)端口为465或587,
其他邮箱自行去查看)
*/
final String smtpPort = "465";
props.setProperty("mail.smtp.port", smtpPort);
props.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback","false");
props.setProperty("mail.smtp.socketFactory.port", smtpPort);
// 2. 根据配置创建会话对象, 用于和邮件服务器交互 需要通过Session来完成
Session session = Session.getDefaultInstance(props);
// 设置为debug模式, 可以查看详细的发送 log true表示查看
session.setDebug(true);
// 3. 创建一封邮件
MimeMessage message = createMimeMessage(session, myEmailAccount, receive, title, body);
//4. 根据 Session 获取邮件传输对象
Transport transport = session.getTransport();
//5.使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
transport.connect(myEmailAccount,myEmailPassword);
// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
transport.sendMessage(message, message.getAllRecipients());
// 7. 关闭连接
transport.close();
return body;//返回主题内容就是我们的验证码
}
/**
* @Title: createMimeMessage* @Description: TODO
* @param @param session 和邮件服务器交
* 互的会话对象
* @param @param sendMail 发件人的邮箱帐
* 号
* @param @param receiveMail 收件人的邮
* 箱帐号
* @param @param title 邮件主题
* @param @param body 邮件内容
* @param @return 创建的邮件对象
* @param @throws Exception MimeMessag
* e
* @throws
*/
private static MimeMessage createMimeMessage(Session session, String sendMail,String receiveMail, String title, String body) throws Exception {
// 1. 创建一封邮件
MimeMessage message = new MimeMessage(session);
// 2. From: 发件人(发件人邮箱地址,发件人名称, 编码格式)
message.setFrom(new InternetAddress(sendMail, sendUser,"UTF-8"));
// 3. To: 收件人(可以增加多个收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail,"尊敬的用户","UTF-8"));
// 4. Subject: 邮件主题
message.setSubject(title,"UTF-8");
// 5. Content: 邮件正文(可以使用html标签)
message.setContent(body,"text/html; charset=UTF-8 ");
// 6. 设置发件时间
message.setSentDate(new Date());
// 7. 保存设置
message.saveChanges();
return message;
}
//随机一个验证码
public static String randomCode() {
String num = "";
for (int i = 0; i < 6; i++) {
num += Math.round(Math.random()*9);
}
return num;
}
3.简单验证我们是否能够通过邮箱发送信息 在测试类里面写
public class MailTest {
@Test
public void testSend() throws Exception {
//body中的验证码 text/html 直接丢一个code进去
//发送一封邮件
//这个是验证是否能给邮箱发送一个信息 参数是 发给哪个邮箱 信息标题 信息内容
//MailUtil.send("3330779476@qq.com","龙哥哥我爱你","我是你的小baby,你是我的老baby");
//这里是如果我们发送的是一个网址,网址直接写入就可以了
//MailUtil.send("278359791@qq.com","龙哥哥我爱你","http://localhost:8080/index.d0");
//把验证码发送到我们的邮箱,这个是我们发送的信息是验证码
String mail = "";//这个是后来我们在前端页面输入进去的数据
//mail是我们前端页面传入得数据,,, 验证码是标题 MailUtil.randomCode() 是获得随机得验证码,返回的也是我们随机获得得验证码
String appCode = MailUtil.send(mail, "验证码", MailUtil.randomCode());
System.out.println(appCode);
}
}
4.如果我们想在前端页面通过邮箱获得验证码,那么我们就需要写一个前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>邮箱验证</title>
<script src="./static/js/jquery-1.12.4.min.js"></script>
</head>
<body>
<form action="/user/reg.do" method="post" onsubmit="return checkForm();">
用户名:<input type="text" placeholder="用户名" id="username"/><br>
邮箱号:<input type="text" placeholder="邮箱地址" id="mail"/><br>
<input type="button" value="发送验证码" onclick = "getCode();"/><br>
验证码:<input type="text" placeholder="输入验证码" onblur = "checkCode();" id="code"><span id="message"></span>
<input type="submit" value="提交" disabled id="sub"><br>
</form>
<script>
// ajax 异步请求
// 发送验证码
// 定义一个验证码的变量
var code = "";
// 前台获取验证码
function getCode() {
var mail = $("#mail").val();// 手机号
// 发送ajax请求
$.post("front/user/getMailCode.do", {"mail":mail},function (data) {
// 返回的是json类型的数据 ResultObject code msg data
//data.data
//$("#code").val(data.data);
// 验证码的校验
// 扩大验证码的作用范围
if (data.code == 200) {
code = data.data;
} else {
// 发送失败
alert("验证码请求发送失败!!");
}
});
}
// 校验验证码
function checkCode() {
var inputCode = $("#code").val();
if (code == inputCode) {
$("#message").html("<font color='green'>验证码正确</font>");
$("#sub").attr("disabled",false);// 可以点击
//$("#sub").removeAttr("disabled");// 删除disabled属性
}else {
$("#message").html("<font color='red'>验证码错误</font>");
$("#sub").attr("disabled",true);// 不可以点击
//$("#sub").attr("disabled","disabled");
}
}
</script>
</body>
</html>
5.设置controller控制层接收前端页面的信息,并通过MailUtil类调用我们的邮箱信息实现类的方法,
@Controller
@RequestMapping("/front/user") // 窄化路径
public class UserController {
//邮箱验证码
@RequestMapping("getMailCode.do")
@ResponseBody
public ResultObject getMailCode(String mail ) throws Exception {
// 获取邮件 这里的mail是我们在前端页面获取到得数据
String code = MailUtil.send(mail, "验证码", MailUtil.randomCode());
return new ResultObject(200,"发送成功",code);
}
}
6.里面会用到的ResultObject类
public class ResultObject {
private int code; // 状态码
private String msg; // 对返回值的信息说明
private Object data; // 需要返回的数据