Ejemplo n.º 1
0
  public void sendRenderedMessages(
      String key,
      List<String> userReferences,
      Map<String, String> replacementValues,
      String fromEmail,
      String fromName) {

    Map<EmailTemplateLocaleUsers, RenderedTemplate> tMap =
        this.getRenderedTemplates(key, userReferences, replacementValues);
    Set<Entry<EmailTemplateLocaleUsers, RenderedTemplate>> set = tMap.entrySet();
    Iterator<Entry<EmailTemplateLocaleUsers, RenderedTemplate>> it = set.iterator();

    while (it.hasNext()) {

      Entry<EmailTemplateLocaleUsers, RenderedTemplate> entry = it.next();
      RenderedTemplate rt = entry.getValue();
      EmailTemplateLocaleUsers etlu = entry.getKey();
      List<User> toAddress = getUsersEmail(etlu.getUserIds());
      log.info(
          "sending template "
              + key
              + " for locale "
              + etlu.getLocale().toString()
              + " to "
              + toAddress.size()
              + " users");
      StringBuilder message = new StringBuilder();
      message.append(MIME_ADVISORY);
      if (rt.getRenderedMessage() != null) {
        message.append(BOUNDARY_LINE);
        message.append("Content-Type: text/plain; charset=iso-8859-1\n");
        message.append(rt.getRenderedMessage());
      }
      if (rt.getRenderedHtmlMessage() != null) {
        // append the HMTL part
        message.append(BOUNDARY_LINE);
        message.append("Content-Type: text/html; charset=iso-8859-1\n");
        message.append(rt.getRenderedHtmlMessage());
      }

      message.append(TERMINATION_LINE);

      // we need to manually construct the headers
      List<String> headers = new ArrayList<String>();
      // the template may specify a from address
      if (StringUtils.isNotBlank(rt.getFrom())) {
        headers.add("From: \"" + rt.getFrom());
      } else {
        headers.add("From: \"" + fromName + "\" <" + fromEmail + ">");
      }
      // Add a To: header of either the recipient (if only 1), or the sender (if multiple)
      String toName = fromName;
      String toEmail = fromEmail;

      if (toAddress.size() == 1) {
        User u = toAddress.get(0);
        toName = u.getDisplayName();
        toEmail = u.getEmail();
      }

      headers.add("To: \"" + toName + "\" <" + toEmail + ">");

      // SAK-21742 we need the rendered subject
      headers.add("Subject: " + rt.getRenderedSubject());
      headers.add("Content-Type: multipart/alternative; boundary=\"" + MULTIPART_BOUNDARY + "\"");
      headers.add("Mime-Version: 1.0");
      headers.add("Precedence: bulk");

      String body = message.toString();
      log.debug("message body " + body);
      emailService.sendToUsers(toAddress, headers, body);
    }
  }