昨天发现一个有趣的事情,邮箱和短信是如何发送验证码的?所以我做了实践。经过测试之后,完成了,所以写这篇博客记录一下。
首先说一下邮箱发送验证码,邮箱发送验证码是免费的。可以通过网易邮箱进行发送。
首先写了个简单的jsp页面,后端就是用了简单的servlet写的,所以要导入导入jstl-1.2.jar,servlet-api.jar两个包,jsp页面代码如下:
<%--
Created by IntelliJ IDEA.
User: admin
Date: 2018/5/29
Time: 18:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form id="form1" method="post" action="validateEmail">
用户名:<input type="text" id="username" name="username">
<button type="submit" id="submit">发送验证码</button></br>
验证码: <input type="text" id="code" name="code">
</form>
</body>
</html>就是一个form表单我就不多说了。
就下来下一个生成随机六位验证码的方法,我这个可以生成大写小写字母,以及数字。代码如下:
//@1 生成随机六位验证码
public static String getRes() {
String s="";
for(int i=0;i<6;i++) {
int res=(int)(Math.random()*3);
if(res==0) {
s=s+(char)getUpper();
} else if(res==1) {
s=s+(char)getLower();
} else {
s=s+getNumber();
}
}
return s;
}
public static int getUpper() {//大写字母
return (int)(Math.random()*26+65);
}
public static int getLower() {//小写字母
return (int)(Math.random()*26+97);
}
public static int getNumber() {//得到数字
return (int)(Math.random()*10);
}接下来就到发送邮箱验证码的核心了,这里需要导入几个邮箱需要用的jar,mail-1.4.jar和activation-1.1.jar,去网上下载一下就可以了。
这部分的代码如下:
/**
*@2 邮箱初始化
*/
public static String account="**********";//你的163邮箱
public static String password="*********";//你的密码
// 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
// 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
public static String myEmailSMTPHost = "smtp.163.com";
//发送邮件的方法
public static void sendEmail(String to,String code) {//to发送到哪个邮箱,code随机生成的六位验证码
// 1.创建连接对象,链接到邮箱服务器
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", myEmailSMTPHost);
props.setProperty("mail.smtp.auth", "true");
// 2.根据配置创建会话对象, 用于和邮件服务器交互
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(account, password);
}
});
try {
// 3.创建邮件对象
Message message = new MimeMessage(session);
// 3.1设置发件人
message.setFrom(new InternetAddress(account));
// 3.2设置收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 3.3设置邮件的主题
message.setSubject("Love");
// 3.4设置邮件的正文
//message.setContent("<h1>您的验证码是:</h1><h3><a href='http://localhost:10080/Demo_JavaMail/active?code=" + code + "'>http://localhost:10080/Demo_JavaMail/active?code=" + code + "</h3>", "text/html;charset=UTF-8");
message.setContent("<h1>来自远方的呼唤,您的验证码是:" + code, "text/html;charset=UTF-8");
// 4.发送邮件
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}servlet的调用部分
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* Created by admin on 2018/5/29.
*/
@WebServlet(name ="validateEmail",urlPatterns = {"/validateEmail"})
public class ValidateEmail extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("发送执行");
String validateCode=SendEmail.getRes();
System.out.println(validateCode);
HttpSession session=req.getSession();
session.setAttribute("validateCode",validateCode);//将验证码存储到Session传到前端
String username=req.getParameter("username");
SendEmail.sendEmail(username,validateCode);
System.out.println("验证码已发送");
req.getRequestDispatcher("validateEmail.jsp").forward(req,resp);
}
}
OK,邮箱发送验证码还是挺简单的,想指导我短信发送验证码的各位请看我的下一篇文章。
版权声明:本文为qq_36771269原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。