import java.io.File;
import java.io.FileOutputStream;
import java.net.URL;
import java.util.Map;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.activation.URLDataSource;
import javax.mail.Message;
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.apache.commons.io.IOUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
/**
*
* @className MailUtil.java
* @classDescription 郵件工具
* @author
* @createTime 2017-10-16
*
*/
public class MailUtil {
/**
* @Method: createAttachMail
* @Description: 創建一封帶附件的郵件
* @param session
* @param content
* @return
* @throws Exception
*/
public static MimeMessage createAttachMail(Session session, Map<String, String> content) throws Exception{
MimeMessage message = new MimeMessage(session);
//設置郵件的基本信息
//發件人
message.setFrom(new InternetAddress(content.get("fromAddress")));
//收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(content.get("toAddress")));
//郵件標題
message.setSubject(content.get("subject"));
//創建郵件正文,爲了避免郵件正文中文亂碼問題,需要使用charset=UTF-8指明字符編碼
MimeBodyPart text = new MimeBodyPart();
text.setContent(content.get("content"), "text/html;charset=UTF-8");
//創建容器描述數據關係
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(text);
mp.setSubType("mixed");
//創建郵件附件
if (content.get("attachPath") != null) {
MimeBodyPart attach = new MimeBodyPart();
//DataHandler dh = new DataHandler(new FileDataSource("D:\\upload\\測試表格.xls"));//本地文件
DataHandler dh = new DataHandler(new URLDataSource(new URL(content.get("attachPath"))));//網絡文件
attach.setDataHandler(dh);
//attach.setFileName(content.get("attachName"));
attach.setFileName(MimeUtility.encodeWord(content.get("attachName"), "UTF-8", null)); //附件中文名稱
mp.addBodyPart(attach);
}
message.setContent(mp);
message.saveChanges();
//將創建的Email 存儲起來
if (content.get("savePath") != null) {
message.writeTo(new FileOutputStream(content.get("savePath") + File.separator + "attachMail.eml"));
}
//返回生成的郵件
return message;
}
/**
* 發送郵件
* @param config
* @param content
* @throws Exception
*/
public static void send(Properties config, Map<String, String> content) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.host", config.getProperty("mail.host"));
prop.setProperty("mail.transport.protocol", config.getProperty("mail.transport.protocol"));
prop.setProperty("mail.smtp.auth", "true");
//使用JavaMail發送郵件的5個步驟
//1、創建session
Session session = Session.getInstance(prop);
//開啓Session的debug模式,這樣就可以查看到程序發送Email的運行狀態
session.setDebug("true".equals(config.getProperty("mail.Debug")) ? true : false);
//2、通過session得到transport對象
Transport ts = session.getTransport();
//3、連上郵件服務器
ts.connect(config.getProperty("mail.user"), config.getProperty("mail.password"));
//4、創建郵件
Message message = createAttachMail(session, content);
//5、發送郵件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
}
}