Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Sonar, open source software quality management tool.
   * Copyright (C) 2008-2012 SonarSource
   * mailto:contact AT sonarsource DOT com
   *
   * Sonar is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 3 of the License, or (at your option) any later version.
  *
  * Sonar is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with Sonar; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
  */
 package org.sonar.plugins.emailnotifications;
 
 import java.net.URL;
 
References:
  • Registration of Mail and MIME Header Fields
  • List-Id: A Structured Field and Namespace for the Identification of Mailing Lists
  • GitHub: Threaded Email Notifications

Since:
2.10
 
 public class EmailNotificationChannel extends NotificationChannel {
 
   private static final Logger LOG = LoggerFactory.getLogger(EmailNotificationChannel.class);

  
 
   private static final int SOCKET_TIMEOUT = 30000;

  
Email Header Field: "List-ID". Value of this field should contain mailing list identifier as specified in RFC 2919.
 
   private static final String LIST_ID_HEADER = "List-ID";

  
Email Header Field: "List-Archive". Value of this field should contain URL of mailing list archive as specified in RFC 2369.
 
   private static final String LIST_ARCHIVE_HEADER = "List-Archive";

  
Email Header Field: "In-Reply-To". Value of this field should contain related message identifier as specified in RFC 2822.
 
   private static final String IN_REPLY_TO_HEADER = "In-Reply-To";

  
Email Header Field: "References". Value of this field should contain related message identifier as specified in RFC 2822
 
   private static final String REFERENCES_HEADER = "References";
 
   private static final String FROM_NAME_DEFAULT = "Sonar";
   private static final String SUBJECT_DEFAULT = "Notification";
 
   private EmailTemplate[] templates;
   private UserFinder userFinder;
 
   public EmailNotificationChannel(EmailConfiguration configurationEmailTemplate[] templatesUserFinder userFinder) {
     this. = configuration;
     this. = templates;
     this. = userFinder;
   }
 
   @Override
   public void deliver(Notification notificationString username) {
     User user = .findByLogin(username);
     if (StringUtils.isBlank(user.getEmail())) {
       .debug("Email not defined for user: " + username);
      return;
    }
    EmailMessage emailMessage = format(notification);
    if (emailMessage != null) {
      emailMessage.setTo(user.getEmail());
      deliver(emailMessage);
    }
  }
  private EmailMessage format(Notification notification) {
    for (EmailTemplate template : ) {
      EmailMessage email = template.format(notification);
      if (email != null) {
        return email;
      }
    }
    .warn("Email template not found for notification: {}"notification);
    return null;
  }

  
Visibility has been relaxed for tests.
  void deliver(EmailMessage emailMessage) {
    if (StringUtils.isBlank(.getSmtpHost())) {
      .debug("SMTP host was not configured - email will not be sent");
      return;
    }
    try {
      send(emailMessage);
    } catch (EmailException e) {
      .error("Unable to send email"e);
    }
  }
  private void send(EmailMessage emailMessagethrows EmailException {
    // Trick to correctly initilize javax.mail library
    ClassLoader classloader = Thread.currentThread().getContextClassLoader();
    try {
      .debug("Sending email: {}"emailMessage);
      String host = null;
      try {
        host = new URL(.getServerBaseURL()).getHost();
      } catch (MalformedURLException e) {
        // ignore
      }
      SimpleEmail email = new SimpleEmail();
      if (StringUtils.isNotBlank(host)) {
        /*
        * Set headers for proper threading: GMail will not group messages, even if they have same subject, but don't have "In-Reply-To" and
        * "References" headers. TODO investigate threading in other clients like KMail, Thunderbird, Outlook
        */
        if (StringUtils.isNotEmpty(emailMessage.getMessageId())) {
          String messageId = "<" + emailMessage.getMessageId() + "@" + host + ">";
          email.addHeader(messageId);
          email.addHeader(messageId);
        }
        // Set headers for proper filtering
        email.addHeader("Sonar <sonar." + host + ">");
      }
      // Set general information
      email.setCharset("UTF-8");
      String from = StringUtils.isBlank(emailMessage.getFrom()) ?  : emailMessage.getFrom() + " (Sonar)";
      email.setFrom(.getFrom(), from);
      email.addTo(emailMessage.getTo(), " ");
      String subject = StringUtils.defaultIfBlank(StringUtils.trimToEmpty(.getPrefix()) + " """)
          + StringUtils.defaultString(emailMessage.getSubject(), );
      email.setSubject(subject);
      email.setMsg(emailMessage.getMessage());
      // Send
      if (StringUtils.equalsIgnoreCase(.getSecureConnection(), "SSL")) {
        email.setSSL(true);
        email.setSslSmtpPort(.getSmtpPort());
        // this port is not used except in EmailException message, that's why it's set with the same value than SSL port.
        // It prevents from getting bad message.
        email.setSmtpPort(Integer.parseInt(.getSmtpPort()));
      } else if (StringUtils.isBlank(.getSecureConnection())) {
        email.setSmtpPort(Integer.parseInt(.getSmtpPort()));
      } else {
        throw new SonarException("Unknown type of SMTP secure connection: " + .getSecureConnection());
      }
      if (StringUtils.isNotBlank(.getSmtpUsername()) || StringUtils.isNotBlank(.getSmtpPassword())) {
      }
      email.send();
    } finally {
      Thread.currentThread().setContextClassLoader(classloader);
    }
  }

  
Send test email. This method called from Ruby.

Throws:
org.apache.commons.mail.EmailException when unable to send
  public void sendTestEmail(String toAddressString subjectString messagethrows EmailException {
    try {
      EmailMessage emailMessage = new EmailMessage();
      emailMessage.setTo(toAddress);
      emailMessage.setSubject(subject);
      emailMessage.setMessage(message);
      send(emailMessage);
    } catch (EmailException e) {
      .error("Fail to send test email to: " + toAddresse);
      throw e;
    }
  }
New to GrepCode? Check out our FAQ X