查看: 95|回复: 0

扣丁学堂Java在线视频讲解Java发送邮箱验证码、session校验功能

发表于 2018-6-21 11:49:18
Java大家都比较熟悉了,但是Java发送邮箱验证码、session校验功能还有不少的小伙伴没有弄明白,废话不多说了,下面小编就带大家看一下扣丁学堂Java在线视频讲解的Java发送邮箱验证码、session校验功能,下面我们开始吧:
1、引入的jar包是mail-1.4.jar
2、java底层发送邮箱方法
public boolean sendEMail(Map<String, Object> 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<String, Object> map = new HashMap<String, Object>();
    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");
    }
  }
  以上就是扣丁学堂Java在线视频讲解Java发送邮箱验证码、session校验功能,想要了解更多内容的小伙伴请关注扣丁学堂官网、微信等平台,想要参加Java培训学习java开发的小伙伴不要在犹豫了,扣丁学堂IT职业在线学习教育平台为您提供权威的Java技术视频教程系统,通过千锋扣丁学堂金牌讲师录制的Java在线教程定能让你快速掌握Java技术的从入门到精通开发实战技能。Java技术交流群:670348138。
文章转载自:扣丁学堂http://www.codingke.com/



回复

使用道具 举报