美文网首页扣丁学堂Java培训
扣丁学堂Java在线视频讲解Java发送邮箱验证码、sessio

扣丁学堂Java在线视频讲解Java发送邮箱验证码、sessio

作者: 994d14631d16 | 来源:发表于2018-06-21 11:40 被阅读5次

Java大家都比较熟悉了,但是Java发送邮箱验证码、session校验功能还有不少的小伙伴没有弄明白,废话不多说了,下面小编就带大家看一下扣丁学堂Java在线视频讲解的Java发送邮箱验证码、session校验功能,下面我们开始吧:

扣丁学堂Java在线视频

1、引入的jar包是mail-1.4.jar

2、java底层发送邮箱方法

public boolean sendEMail(Map map) {

    log.info("電子郵件接口執行開始!");

    String from = Cache.getInstance().getParamsConstant.EMAIL_FROM);

    String pwd = Cache.getInstance().getParams(Constant.EMAIL_PWD);

    String to = String.valueOf(map.get("mail"));

    String subject = String.valueOf(map.get("subject"));

    String content = String.valueOf(map.get("content"));

    String smtpHost = Cache.getInstance().getParams(Constant.EMAIL_SMTPHOST);

    if(StringUtils.isBlank(to) || StringUtils.isBlank(subject) || StringUtils.isBlank(content)){

      log.info("郵件地址("+to+")、主題("+subject+")、內容("+content+")有為空項,不符合發送條件");

      return false;

    }

    try{

       Properties props = new Properties();

       props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)

       props.setProperty("mail.smtp.host", smtpHost); // 发件人的邮箱的 SMTP服务器地址

       props.setProperty("mail.smtp.auth", "true"); // 请求认证,参数名称与具体实现有关

       // 创建Session实例对象

       Session session = Session.getDefaultInstance(props);

       // 创建MimeMessage实例对象

       MimeMessage message = new MimeMessage(session);

       // 设置发件人

       message.setFrom(new InternetAddress(from));

       // 设置收件人

       message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));

       // 设置发送日期

       message.setSentDate(new Date());

       // 设置邮件主题

       message.setSubject(subject);

       // 设置纯文本内容的邮件正文

       message.setText(content);

       // 保存并生成最终的邮件内容

       message.saveChanges();

       // 设置为debug模式, 可以查看详细的发送 log

       session.setDebug(true);

       // 获取Transport对象

       Transport transport = session.getTransport("smtp");

       // 第2个参数需要填写的是QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?

       transport.connect(from, pwd);

       // 发送,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人

       transport.sendMessage(message, message.getAllRecipients());

       transport.close();

    }catch(Exception e){

      log.error(e.getMessage(), e);

      return false;

    }

    log.info("電子郵件接口執行完成,執行成功!");

    return true;

  }

3、java业务逻辑层调用发送邮箱、验证码加密存储在session中

@RequestMapping("/sendEMail.do")

  public void sendEMail(HttpServletRequest request, HttpServletResponse response) {

    String json = "{\"success\":false,\"message\":\"操作失败\",\"returnVal\":\"\"}";

    boolean res = false;//发送邮件标记

    Map map = new HashMap();

    try {

      String username = request.getParameter("username");

      User user = this.userService.findUserByLoginname(username);

      if(null == user){

        json = "{\"success\":false,\"message\":\"无此人员\",\"returnVal\":\"\"}";

        return;

      }

      //获取当前绑定邮箱地址

      String mail = user.getEmail();

      //验证邮箱地址

      if(StringUtils.isBlank(mail) || "null".equals(mail)){

        json = "{\"success\":false,\"message\":\"当前用户尚未绑定邮箱\",\"returnVal\":\"\"}";

        return;

      }

      //生成验证码

      String checkcode = Common.getCode();

      //发送验证码

      String _debug = Cache.getInstance().getParams(Constant.UIAS_DEBUG);

      if("1".equals(_debug)){//调试模式 不真发送 直接回显

        map.put("checkcode", checkcode);

        res = true;

      }else{//非调试模式 真实发送邮件

        //验证是否频繁发送验证码请求  单位 秒

        String intervalTime = Cache.getInstance().getParams(Constant.EMAIL_INTERVAL_TIME);

        Object emailTimeFlag = request.getSession().getAttribute("emailTimeFlag");

        boolean checkTime = true;

        if (emailTimeFlag != null) {

          int miao = (int) (((new Date()).getTime() - (Long) emailTimeFlag) / 1000);

          if (miao <= Integer.parseInt(intervalTime)) {

            checkTime=false;

          }

        }

        if(checkTime){

          //组装数据

          String email_validity = Cache.getInstance().getParams(Constant.EMAIL_VALIDITY);

          String vartime= String.valueOf((Integer.parseInt(email_validity)/60000));

          String content = Cache.getInstance().getParams(Constant.EMAIL_CONTENT);

          String subject = Cache.getInstance().getParams(Constant.EMAIL_SUBJECT);

          content = content.replaceAll("\\$code", checkcode);

          content = content.replaceAll("\\$time",vartime);

          map.put("mail", mail);

          map.put("subject", subject);

          map.put("content", content);

          //调用发送

          res = ieMailService.sendEMail(map);

        }else{

          json = "{\"success\":false,\"message\":\"请耐心等待,不要频繁发送验证码申请\",\"returnVal\":\"\"}";

          return;

        }

      }

      //发送成功后续操作

      if(res){

        //把验证时间放在session里

        request.getSession().setAttribute("emailTimeFlag", new Date().getTime());

        //把验证码放在session里  md5 2次加密验证码

        String codeMd5 = DigestUtils.md5Hex((DigestUtils.md5Hex(checkcode).toLowerCase()));

        request.getSession().setAttribute("emailCodeFlag", codeMd5);

        if("1".equals(_debug)){

          json = "{\"success\":true,\"message\":\"邮箱验证码发送成功,已经待填到验证码框!\",\"returnVal\":\"\",\"checkcode\":\""+checkcode+"\"}";

        }else{

          json = "{\"success\":true,\"message\":\"邮箱验证码发送成功,请查收邮件!\",\"returnVal\":\"\"}";

        }

      }

    } catch (Exception e) {

      logger.error("发送邮件验证码异常", e);

    }finally{

      renderHtml(response, json, "encoding:UTF-8");

    }

  }

 4、java验证邮箱,比对session中的验证码和提交上来的验证码

@RequestMapping("/check.do")

  public void check(HttpServletRequest request, HttpServletResponse response) {

    String json = "{\"success\":false,\"message\":\"操作失败\",\"returnVal\":\"\"}";

    try {

      //验证码有效期校验

      String email_validity = Cache.getInstance().getParams(Constant.EMAIL_VALIDITY);

      Object emailTimeFlag = request.getSession().getAttribute("emailTimeFlag");

      if (emailTimeFlag != null) {

        int miao = (int) (((new Date()).getTime() - (Long) emailTimeFlag) / 1000);

        if (miao >= Integer.parseInt(email_validity)) {

          json = "{\"success\":false,\"message\":\"验证码已过有效期,请重新获取!\",\"returnVal\":\"\"}";

        }else{

          //在有效期内 比对验证码准确性

          String checkcode = request.getParameter("checkcode");

          // md5 2次加密验证码

          String codeMd5 = DigestUtils.md5Hex((DigestUtils.md5Hex(checkcode).toLowerCase()));

          Object emailCodeFlag = request.getSession().getAttribute("emailCodeFlag");

          boolean res = codeMd5.equals(String.valueOf(emailCodeFlag));

          if(res){

            json = "{\"success\":true,\"message\":\"验证码通过!\",\"returnVal\":\"\"}";

          }else{

            json = "{\"success\":false,\"message\":\"验证码不匹配,请重新核对!\",\"returnVal\":\"\"}";

          }

        }

      }

    } catch (Exception e) {

      logger.error("验证码异常", e);

    }finally{

      renderHtml(response, json, "encoding:UTF-8");

    }

  }

5、小插曲,java处理要展示到页面的邮箱和手机号加*号隐藏的正则表达式

// 括号表示组,被替换的部分$n表示第n组的内容

        mail = mail.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4");

// 括号表示组,被替换的部分$n表示第n组的内容

        phone = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

6、HTML 获取验证码按钮                 

 

7、js 函数调用  按钮60秒倒计时

//获取邮箱验证码

function start_mail_button(){

  var username = $('#username').val().trim();//用戶名

  if('' == username){

    ErrorMsg("请输入用户名");

    return;

  }

  $.ajax({

    url: basePath+'/sendEMail.do',type: 'post',dataType: 'json',

    data: {username: username},

    success: function(data){

      if(data.success){

        SuccMsg(data.message);

        //页面获取验证码按钮样式处理

         $("#btnMail").attr('disabled','disabled');

         var count = 1 ;

         var sum = 60;

         var i = setInterval(function(){

          if(count > 60){

           $("#btnMail").attr('disabled',false);

           $("#btnMail").val("获取邮箱验证码");

           clearInterval(i);

          }else{

           $("#btnMail").val("剩余"+parseInt(sum - count)+'秒');

          }

          count++;

         },1000);

         //debug模式待填

         if(data.checkcode){

           $("#checkcode").val(data.checkcode);

         }

      }else{

        ErrorMsg("获取失败!"+data.message);

      }

    }

  });

}

8、提交验证码的js没什么特别的,就不上代码了。

  以上就是扣丁学堂Java在线视频讲解Java发送邮箱验证码、session校验功能,想要了解更多内容的小伙伴请关注扣丁学堂官网、微信等平台,想要参加Java培训学习Java开发的小伙伴不要在犹豫了,扣丁学堂IT职业在线学习教育平台为您提供权威的Java技术视频教程系统,通过千锋扣丁学堂金牌讲师录制的Java在线教程定能让你快速掌握Java技术的从入门到精通开发实战技能。

相关文章

网友评论

    本文标题:扣丁学堂Java在线视频讲解Java发送邮箱验证码、sessio

    本文链接:https://www.haomeiwen.com/subject/tesqyftx.html