首先说一下邮箱发送验证码,邮箱发送验证码是免费的。可以通过网易邮箱进行发送。
首先写了个简单的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,邮箱发送验证码还是挺简单的,想指导我短信发送验证码的各位请看我的下一篇文章。
文章来源: 邮箱发送验证码