private void sendSubscriberNotification(
      String email, String code, String blogTitle, String virtualUser, String blogAccessCode) {

    String userLanguage = WebFileSys.getInstance().getUserMgr().getLanguage(virtualUser);

    try {
      String templateFilePath =
          WebFileSys.getInstance().getConfigBaseDir()
              + "/languages/blogChangeNotification_"
              + userLanguage
              + ".template";

      MailTemplate notificationTemplate = new MailTemplate(templateFilePath);

      notificationTemplate.setVarValue("BLOGTITLE", blogTitle);

      String blogURL =
          WebFileSys.getInstance().getClientUrl()
              + "/visitor/"
              + virtualUser
              + "/"
              + blogAccessCode;
      notificationTemplate.setVarValue("BLOGURL", blogURL);

      String unsubscribeURL =
          WebFileSys.getInstance().getClientUrl()
              + "/servlet?command=blog&cmd=unsubscribe&virtualUser="******"&email="
              + UTF8URLEncoder.encode(email)
              + "&code="
              + code;
      notificationTemplate.setVarValue("UNSUBSCRIBEURL", unsubscribeURL);

      String mailText = notificationTemplate.getText();

      String subject =
          LanguageManager.getInstance()
              .getResource(
                  userLanguage, "blog.subjectChangeNotification", "New entries in the Blog");

      (new SmtpEmail(email, subject, mailText)).send();

      Logger.getLogger(getClass())
          .info("blog subscriber notification mail sent to " + email + " for blog " + blogTitle);

    } catch (IllegalArgumentException iaex) {
      System.out.println(iaex);
    }
  }
  protected void inspectDiskQuotas() {
    long startTime = System.currentTimeMillis();

    Logger.getLogger(getClass()).info("disk quota inspection for webspace users started");

    UserManager userMgr = WebFileSys.getInstance().getUserMgr();

    StringBuffer adminMailBuffer = new StringBuffer();

    ArrayList<String> allUsers = userMgr.getListOfUsers();

    for (int i = 0; i < allUsers.size(); i++) {
      String userid = allUsers.get(i);

      String role = userMgr.getRole(userid);

      if (role.equals("webspace")) {
        String homeDir = userMgr.getDocumentRoot(userid);

        if ((homeDir != null) && (!homeDir.startsWith("*"))) {
          long diskQuota = userMgr.getDiskQuota(userid);

          if (diskQuota > 0) {
            FileSysStat fileSysStat = new FileSysStat(homeDir);

            Vector statList = fileSysStat.getStatistics();

            if (fileSysStat.getTotalSizeSum() > diskQuota) {
              Logger.getLogger(getClass())
                  .warn(
                      "disk quota exceeded for user "
                          + userid
                          + " ("
                          + (diskQuota / 1024l)
                          + " / "
                          + (fileSysStat.getTotalSizeSum() / 1024l)
                          + ")");

              if (WebFileSys.getInstance().getMailHost() != null) {
                StringBuffer mailContent = new StringBuffer("Disk quota exceeded for user ");
                mailContent.append(userid);
                mailContent.append("\r\n\r\n");
                mailContent.append("disk quota   : ");
                mailContent.append(diskQuota / 1024l);
                mailContent.append(" KByte\r\n");
                mailContent.append("current usage: ");
                mailContent.append(fileSysStat.getTotalSizeSum() / 1024l);
                mailContent.append(" KByte\r\n");

                if (WebFileSys.getInstance().isMailNotifyQuotaUser()) {
                  String email = userMgr.getEmail(userid);

                  if ((email != null) && (email.trim().length() > 0)) {
                    String userLanguage = userMgr.getLanguage(userid);

                    String mailText = mailContent.toString();

                    try {
                      String templateFilePath =
                          WebFileSys.getInstance().getConfigBaseDir()
                              + "/languages/diskquota_"
                              + userLanguage
                              + ".template";

                      MailTemplate diskQuotaTemplate = new MailTemplate(templateFilePath);

                      diskQuotaTemplate.setVarValue("LOGIN", userid);
                      diskQuotaTemplate.setVarValue("QUOTA", "" + (diskQuota / 1024l));
                      diskQuotaTemplate.setVarValue(
                          "USAGE", "" + (fileSysStat.getTotalSizeSum() / 1024l));

                      mailText = diskQuotaTemplate.getText();
                    } catch (IllegalArgumentException iaex) {
                      System.out.println(iaex);
                    }

                    String subject =
                        LanguageManager.getInstance()
                            .getResource(userLanguage, "subject.diskquota", "Disk quota exceeded");

                    (new SmtpEmail(email, subject, mailText)).send();
                  }
                }

                adminMailBuffer.append(mailContent.toString());
                adminMailBuffer.append("\r\n\r\n");
              }
            }
          }
        }
      }
    }

    long endTime = System.currentTimeMillis();

    if ((WebFileSys.getInstance().getMailHost() != null)
        && WebFileSys.getInstance().isMailNotifyQuotaAdmin()) {
      if (adminMailBuffer.length() == 0) {
        adminMailBuffer.append("no disk quota exceeded");
      }

      ArrayList<String> adminUserEmailList = userMgr.getAdminUserEmails();

      (new SmtpEmail(
              adminUserEmailList,
              "Disk quota report "
                  + WebFileSys.getInstance().getLogDateFormat().format(new Date(endTime)),
              adminMailBuffer.toString()))
          .send();
    }

    Logger.getLogger(getClass())
        .info("disk quota inspection ended (" + ((endTime - startTime) / 1000) + " sec)");
  }