//JavaMail 发送邮件
//工具类
import javax.activation.*;
import javax.mail.Header;
import javax.mail.Multipart;
import javax.mail.internet.*;
import java.io.File;
import java.io.IOException;
import java.util.*;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Appender;
import org.apache.log4j.Logger;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMailMessage;
public class MailSender {
protected final Logger logger = Logger.getLogger(getClass());
//服务器地址
private String smtpServer;
//服务器用户名
private String smtpUser;
//登陆服务器密码
private String smtpPassword;
private Appender appender;
public void addAppender(Appender appender) {
this.appender = appender;
logger.addAppender(appender);
}
public void removeAppender() {
logger.removeAppender(this.appender);
}
public Appender getAppender() {
return appender;
}
/**
* send mail
* @param from 邮件显示地址
* @param to 邮件到发送地址(如果是有抄送,邮件以“,”隔开 。如:124@d.com,sss@w.com)
* @param subject 标题
* @param content 内容
* @param fileAttachments 附件sourceFileName
* @param sourceFileName 附件显示名称
* @throws Exception
*/
public void sendMail(String from, String to, String subject,
String content, List fileAttachments, List sourceFileName) throws Exception
{
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
if (!StringUtils.isEmpty(this.smtpUser) && !StringUtils.isEmpty(this.smtpPassword)) {
logger.info("Use Smtp Auth:" + this.smtpUser + "/" + this.smtpPassword);
Properties p = new Properties();
p.put("mail.smtp.auth", "true");
mailSender.setJavaMailProperties(p);
//设置用户名
mailSender.setUsername(this.smtpUser);
//设置密码
mailSender.setPassword(this.smtpPassword);
}
mailSender.setDefaultEncoding("gb2312");
//设置主机
mailSender.setHost(this.smtpServer);
logger.info("Set properties complete.");
//生成消息
MimeMessage message = mailSender.createMimeMessage();
MimeMailMessage mm = new MimeMailMessage(message);
//处理抄送
String[] cc = to.split(",");
String[] bcc = new String [cc.length-1];
if (cc.length > 1) {
for(int i = 0;i<cc.length;i++){
if(i==0){
to = cc[0].trim();
}else {
bcc[i-1] = cc[i].trim();
}
}
mm.setBcc(bcc);
}
//设置显示邮件
mm.setFrom(from);
//设置发送到邮箱
mm.setTo(to);
//设置标题
mm.setSubject(subject);
//multipart 设置附件
Multipart mp = new MimeMultipart();
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(content, "text/html;charset=gb2312");
mp.addBodyPart(mbp1);
logger.info("Set MimeMailMessage complete.");
int i = 0;
//处理附件
for (Object Attachment : fileAttachments) {
String fileAttachment = Attachment + "";
if (!StringUtils.isBlank(fileAttachment)) {
File file = new File(fileAttachment);
if (!file.exists()) {
throw new IOException("File Not Exists:" + fileAttachment);
}
MimeBodyPart mbp2 = new MimeBodyPart();
DataSource source = new FileDataSource(file);
mbp2.setDataHandler(new DataHandler(source));
String h = MimeUtility.encodeText(file.getName());
mbp2.setFileName(MimeUtility.encodeText(sourceFileName.get(i) + ""));
i++;
logger.info(mbp2.getFileName());
Enumeration e = mbp2.getAllHeaders();
while (e.hasMoreElements()) {
Header header = (Header) e.nextElement();
logger.info(header.getName() + "->" + header.getValue());
}
mp.addBodyPart(mbp2);
}
}
//设置内容
message.setContent(mp);
//multipart end
//发送消息
mailSender.send(message);
logger.info("email sent to:" + to);
}
public void setSmtpServer(String smtpServer) {
this.smtpServer = smtpServer;
}
public void setSmtpUser(String smtpUser) {
this.smtpUser = smtpUser;
}
public void setSmtpPassword(String smtpPassword) {
this.smtpPassword = smtpPassword;
}
}