content: package com.taobao.yugong.common.alarm;
  
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Properties;
  
  import org.apache.commons.lang.StringUtils;
  import org.springframework.mail.SimpleMailMessage;
  import org.springframework.mail.javamail.JavaMailSender;
  import org.springframework.mail.javamail.JavaMailSenderImpl;
  
  /**
   * 发送邮件进行报警
   *
   * @author agapple 2013-9-6 上午11:42:04
   * @since 1.0.0
   */
  public class MailAlarmService extends AbstractAlarmService {
  
      private static final String TITLE      = "alarm_from_yugong";
      private JavaMailSender      mailSender;
      private String              emailUsername;
      private String              emailPassword;
      private String              emailHost;
      private int                 stmpPort   = 465;
      private boolean             sslSupport = true;
  
      @Override
      public void start() {
          super.start();
          JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
          mailSender.setUsername(emailUsername);
          mailSender.setPassword(emailPassword);
          mailSender.setHost(emailHost);
          mailSender.setDefaultEncoding("UTF-8");
          Properties pros = new Properties();
          pros.put("mail.smtp.auth", true);
          pros.put("mail.smtp.timeout", 25000);
          pros.put("mail.smtp.port", stmpPort);
          pros.put("mail.smtp.socketFactory.port", stmpPort);
          pros.put("mail.smtp.socketFactory.fallback", false);
          if (sslSupport) {
              pros.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
          }
  
          mailSender.setJavaMailProperties(pros);
  
          this.mailSender = mailSender;
      }
  
      public void sendAlarm(AlarmMessage data) {
          SimpleMailMessage mail = new SimpleMailMessage(); // 只发送纯文本
          mail.setText(data.getMessage());// 邮件内容
          mail.setSubject(TITLE);// 主题
          mail.setFrom(emailUsername);
  
          String receiveKeys[] = StringUtils.split(StringUtils.replace(data.getReceiveKey(), ";", ","), ",");
          List<String> address = new ArrayList<String>();
          for (String receiveKey : receiveKeys) {
              if (isEmailAddress(receiveKey)) {
                  address.add(receiveKey);
              } else if (isMobileNumber(receiveKey)) {
                  // do nothing
              }
          }
  
          if (address != null && !address.isEmpty()) {
              mail.setTo(address.toArray(new String[address.size()]));
              sendMail(mail);
          }
      }
  
      private void sendMail(SimpleMailMessage mail) {
          // 正确设置了账户/密码，才尝试发送邮件
          if (StringUtils.isNotEmpty(emailUsername) && StringUtils.isNotEmpty(emailPassword)) {
              mailSender.send(mail);
          }
      }
  
      public void setMailSender(JavaMailSender mailSender) {
          this.mailSender = mailSender;
      }
  
      public void setEmailHost(String emailHost) {
          this.emailHost = emailHost;
      }
  
      public void setEmailUsername(String emailUsername) {
          this.emailUsername = emailUsername;
      }
  
      public void setEmailPassword(String emailPassword) {
          this.emailPassword = emailPassword;
      }
  
      public void setStmpPort(int stmpPort) {
          this.stmpPort = stmpPort;
      }
  
      public void setSslSupport(boolean sslSupport) {
          this.sslSupport = sslSupport;
      }
  
  }
  