邮箱验证

邮箱验证开发步骤

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; // 需要返回的数据

最终执行过程顺序

前端页面传入我们的邮箱---------->controller层获得这个页面提交的邮箱数据,并通过调用MailUtil类里面的send方法表示向指定邮箱中发送随机验证码------随机验证码通过调用MailUtil类里面的randomCode方法得到随机数 ,并返回一个验证码------->把我们返回的验证码传输到前端页面,和我们得到的验证码做对比,如果两个验证码愿意那么我们就验证成功

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值