邮箱发送验证码

昨天发现一个有趣的事情,邮箱和短信是如何发送验证码的?所以我做了实践。经过测试之后,完成了,所以写这篇博客记录一下。

首先说一下邮箱发送验证码,邮箱发送验证码是免费的。可以通过网易邮箱进行发送。
首先写了个简单的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版权协议,转载请附上原文出处链接和本声明。