zoukankan      html  css  js  c++  java
  • 代码珍藏之发送邮件

    /**
    * 发送重置密码邮件
    * @return
    */
    @RequestMapping(params="sendResetPwdMail")
    @ResponseBody
    public AjaxJson sendResetPwdMail(String email,HttpServletRequest request){
    AjaxJson ajaxJson = new AjaxJson();
    try {
    if(StringUtils.isEmpty(email)){
    ajaxJson.setSuccess(false);
    ajaxJson.setMsg("邮件地址不能为空");
    return ajaxJson;
    }
    TSUser user = systemService.findUniqueByProperty(TSUser.class, "email", email);
    if(user == null){
    ajaxJson.setSuccess(false);
    ajaxJson.setMsg("用户名对应的用户信息不存在");
    return ajaxJson;
    }
    String hql = "from TSPasswordResetkey bean where bean.username = ? and bean.isReset = 0 order by bean.createDate desc limit 1";
    List<TSPasswordResetkey> resetKeyList = systemService.findHql(hql,user.getUserName());
    if(resetKeyList != null && !resetKeyList.isEmpty()){
    TSPasswordResetkey resetKey = resetKeyList.get(0);
    Date now = new Date();
    if(resetKey.getEmail().equals(email) && (now.getTime() - resetKey.getCreateDate().getTime()) < (1000*60*60*3 - 1000*60*5)){
    ajaxJson.setSuccess(false);
    ajaxJson.setMsg("已发送重置密码邮件,请稍候再次尝试发送");
    return ajaxJson;

    }
    }
    TSPasswordResetkey passwordResetKey = new TSPasswordResetkey();
    passwordResetKey.setEmail(email);
    passwordResetKey.setUsername(user.getUserName());
    passwordResetKey.setCreateDate(new Date());
    passwordResetKey.setIsReset(0);
    userService.save(passwordResetKey);
    String content = ResourceUtil.getConfigByName("resetpwd.mail.content");
    if(content.indexOf("${username}") > -1){
    content = content.replace("${username}", user.getUserName());
    }
    String url = request.getScheme() + "://" + request.getServerName()+ ":" + request.getServerPort() + request.getContextPath() +"/loginController.do?goResetPwd&key=" + passwordResetKey.getId();

    //配置邮件模板参数
    Map<String, Object> mailConfig = new HashMap<String, Object>();
    mailConfig.put("title", ResourceUtil.getConfigByName("resetpwd.mail.title"));
    mailConfig.put("content",content);
    mailConfig.put("url",url);
    mailConfig.put("commentUrl","http://www.jeecg.org");

    String mailContent = new FreemarkerHelper().parseTemplate("export/mail/password_reset.ftl", mailConfig);

    MailUtil.sendEmail(ResourceUtil.getConfigByName("mail.smtpHost"), email,"邮箱重置密码", mailContent, ResourceUtil.getConfigByName("mail.sender"), ResourceUtil.getConfigByName("mail.user"), ResourceUtil.getConfigByName("mail.pwd"));
    ajaxJson.setMsg("成功发送密码重置邮件");


    } catch (Exception e) {
    if("javax.mail.AuthenticationFailedException".equals(e.getClass().getName())){
    ajaxJson.setSuccess(false);
    ajaxJson.setMsg("发送邮件失败:邮箱账号信息设置错误" );
    log.error("重置密码发送邮件失败:邮箱账号信息设置错误",e);
    }else{
    ajaxJson.setSuccess(false);
    ajaxJson.setMsg("发送邮件失败:" + e.getMessage());
    log.error("发送邮件失败:" + e.getMessage(),e);
    }

    }
    return ajaxJson;
    }

    /**
    * 发送电子邮件
    *
    * @param smtpHost
    * 发信主机
    * @param receiver
    * 邮件接收者
    * @param title
    * 邮件的标题
    * @param content
    * 邮件的内容
    * @param sender
    * 邮件发送者
    * @param user
    * 发送者邮箱用户名
    * @param pwd
    * 发送者邮箱密码
    * @throws MessagingException
    */
    public static void sendEmail(String smtpHost, String receiver,
    String title, String content, String sender, String user, String pwd) throws MessagingException
    {
    Properties props = new Properties();
    props.put("mail.host", smtpHost);
    props.put("mail.transport.protocol", "smtp");
    // props.put("mail.smtp.host",smtpHost);//发信的主机,这里要把您的域名的SMTP指向正确的邮件服务器上,这里一般不要动!
    props.put("mail.smtp.auth", "true");
    Session s = Session.getDefaultInstance(props);
    s.setDebug(true);
    MimeMessage message = new MimeMessage(s);
    // 给消息对象设置发件人/收件人/主题/发信时间
    // 发件人的邮箱
    InternetAddress from = new InternetAddress(sender);
    message.setFrom(from);
    InternetAddress to = new InternetAddress(receiver);
    message.setRecipient(Message.RecipientType.TO, to);
    message.setSubject(title);
    message.setSentDate(new Date());
    // 给消息对象设置内容
    BodyPart mdp = new MimeBodyPart();// 新建一个存放信件内容的BodyPart对象
    mdp.setContent(content, "text/html;charset=gb2312");// 给BodyPart对象设置内容和格式/编码方式防止邮件出现乱码
    Multipart mm = new MimeMultipart();// 新建一个MimeMultipart对象用来存放BodyPart对
    // 象(事实上可以存放多个)
    mm.addBodyPart(mdp);// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
    message.setContent(mm);// 把mm作为消息对象的内容

    message.saveChanges();
    Transport transport = s.getTransport("smtp");
    transport.connect(smtpHost, user, pwd);// 设置发邮件的网关,发信的帐户和密码,这里修改为您自己用的
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
    }

    配置:

    mail.smtpHost=smtp.qq.com
    mail.sender=826449550@qq.com
    mail.user=826449550@qq.com
    mail.pwd=*********

  • 相关阅读:
    BottomNavigationBarItem fixed
    Flutter进阶—点击、拖动和其他手势
    semaphore demo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
    微信小程序
    Socket套接字 =======================
    socket
    flutter packages.
    安卓抓包https
    Flutter 输入控件TextField设置内容并保持光标(cursor)在末尾
    textfield reload issue and other things reload problem.===================================
  • 原文地址:https://www.cnblogs.com/tjlr/p/9954929.html
Copyright © 2011-2022 走看看