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;
}
}