/*
* 系统名称: QuickBundle --> rmdemo
*
* 文件名称: org.quickbundle.tools.support.mail --> MailHandler.java
*
* 功能描述:
*
* 版本历史: 2005-11-23 17:11:16 创建1.0.0版 (baixiaoyong)
*
*/
package org.quickbundle.tools.support.mail;
import java.io.IOException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import org.quickbundle.tools.support.log.RmLogHelper;
/**
* 功能、用途、现存BUG:
*
* @author 白小勇
* @version 1.0.0
* @see 需要参见的其它类
* @since 1.0.0
*/
public class RmMailHandler {
public static String DEFAULT_MAIL_ENCODING = "UTF-8";
private String mailSmtpHost;
private String sendMailUser;
private String sendMailPassword;
private String mailFrom;
Transport transport = null;
/**
* @param mailConfig
* [0]mailSmtpHost--mail1.quickbundle.org,
* [1]sendMailUser--test,
* [2]sendMailPassword--******,
* [3]mailFrom--noreply@quickbundle.org
*/
public RmMailHandler(String[] mailConfig) {
mailSmtpHost = mailConfig[0];
sendMailUser = mailConfig[1];
sendMailPassword = mailConfig[2];
mailFrom = mailConfig[3];
}
/**
* @param mailto 收件人
* @param subject 标题
* @param bodyText 正文文本, 可以为NULL
* @param bodyHtml 正文html, 可以为NULL
* @param aAffix 附件数组{{"显示名", "附件"}, {"a", "/a.jpg"}}
*/
public void send(String mailto, String subject, String bodyText, String bodyHtml, String[][] aAffix) {
try {
/**
* 1、设置邮件服务器,创建session
*/
String encoding = MimeUtility.mimeCharset(DEFAULT_MAIL_ENCODING);
Properties props = new Properties();
// Setup mail server
props.put("mail.smtp.localhost", mailSmtpHost);
props.put("mail.smtp.host", mailSmtpHost);
props.put("mail.smtp.auth", "true"); // 这样才能通过验证
// Get session
Session session = Session.getDefaultInstance(props);
// watch the mail commands go by to the mail server
session.setDebug(true);
/**
* 2、创建邮件MimeMessage
*/
// Define message
MimeMessage mes = new MimeMessage(session);
mes.setFrom(new InternetAddress(mailFrom));
mes.addRecipients(RecipientType.TO, InternetAddress.parse(mailto, false));
mes.setSubject(subject, encoding);
/**
* 3、填充邮件的正文(文本、html、附件)
*/
{
//设置邮件正文部分
MimeMultipart multipart = new MimeMultipart();
//文本、超文本、附件形式
multipart.setSubType("mixed");
//设置邮件正文文本
if(bodyText != null && bodyText.length() > 0) {
MimeBodyPart txtbodyPart = new MimeBodyPart();
txtbodyPart.setText(bodyText, encoding);
multipart.addBodyPart(txtbodyPart);
}
//设置邮件正文HTML部分
if(bodyHtml != null && bodyHtml.length() > 0) {
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(bodyHtml, "text/html;charset=" + encoding);
multipart.addBodyPart(htmlBodyPart);
}
//发送附件
if (aAffix != null && aAffix.length > 0) {
for (int i = 0; i < aAffix.length; i++) {
MimeBodyPart affixPart = new MimeBodyPart();
//附件的设置
affixPart.setDataHandler(new DataHandler(new FileDataSource(aAffix[i][1])));
affixPart.setFileName(MimeUtility.encodeText(aAffix[i][0], encoding, "Q"));
//设置图片的id,供链接引用,暂不支持
//affixPart.setContentID(aAffix[i][0]);
multipart.addBodyPart(affixPart);
}
}
// 加入message
mes.setContent(multipart);
}
if(transport == null || !transport.isConnected()) {
transport = session.getTransport("smtp");
transport.connect(props.getProperty("mail.smtp.host"), sendMailUser, sendMailPassword);
}
transport.sendMessage(mes, mes.getAllRecipients());
//transport.close();
} catch (MessagingException e) {
throw new RuntimeException("send mail:" + e.getMessage(), e);
} catch (IOException e) {
throw new RuntimeException("send mail:" + e.getMessage(), e);
}
}
/**
* 显式关闭连接
*/
public void close() {
if(transport == null) {
return;
}
try {
transport.close();
} catch (MessagingException e) {
RmLogHelper.getLogger(this.getClass()).error("close():" + e.toString());
}
}
}