使用javax.mail發(fā)送郵件(二)--帶附件郵件
package SendEmailTest;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.io.File;
import java.util.Properties;
/**
* Created by mi on 2017/5/12.
*/
public class SendEmailWithAttach {
public static void sendMail(String fromMail, String user, String password, String toMail, String mailTitle, String mailContent) {
//加載一個(gè)配置文件
Properties props = new Properties();
// smtp:簡單郵件傳輸協(xié)議
// 設(shè)置郵件服務(wù)器主機(jī)名
props.put("mail.smtp.host", "smtp.163.com");
//發(fā)送服務(wù)器需要通過驗(yàn)證
props.put("mail.smtp.auth", "true");
//設(shè)置環(huán)境信息
Session session = Session.getInstance(props);//根據(jù)屬性新建一個(gè)郵件會(huì)話
session.setDebug(true); //會(huì)打印一些調(diào)試信息曹鸠。
//由郵件會(huì)話新建一個(gè)消息對(duì)象
MimeMessage message = new MimeMessage(session);
Transport transport = null;
//設(shè)置郵件內(nèi)容
try {
message.setFrom(new InternetAddress(fromMail));//設(shè)置發(fā)件人的地址
message.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail));//設(shè)置收件人,并設(shè)置其接收類型為TO
message.setSubject(mailTitle);//設(shè)置標(biāo)題
//設(shè)置信件內(nèi)容
//因?yàn)樾枰虞d附件诵原,需要裝載多個(gè)主體部件
MimeMultipart partList = new MimeMultipart("mixed");
message.setContent(partList);
//創(chuàng)建一個(gè)部件
MimeBodyPart part1 = new MimeBodyPart();
part1.setText(mailContent);
partList.addBodyPart(part1);
//再創(chuàng)建一個(gè)部件
MimeBodyPart part2 = new MimeBodyPart();
// 添加附件的內(nèi)容
DataSource source = new FileDataSource("D:/export.xlsx");
part2.setDataHandler(new DataHandler(source));
//指定附件的名字筐高,使用MimeUtility.encode()對(duì)中文進(jìn)行編碼
part2.setFileName(MimeUtility.encodeText("數(shù)據(jù)報(bào)表.xlsx")); //設(shè)置的這個(gè)新的名字一定要帶有后綴格式啊.xlsx!!!
partList.addBodyPart(part2);
//發(fā)送郵件
transport = session.getTransport("smtp");
transport.connect(user, password);
transport.sendMessage(message, message.getAllRecipients());//發(fā)送郵件,其中第二個(gè)參數(shù)是所有已設(shè)好的收件人地址
}catch (Exception e) {
e.printStackTrace();
}finally {
try{
transport.close(); //這個(gè)最好放到finally中哎
}catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try{
sendMail("xxx@163.com", "xxx@163.com", "xxx",
"xxx@qq.com",
"Java Mail 正式郵件",
"這是一個(gè)特別重要的郵件:<b>超級(jí)超級(jí)重要</b>");
}catch (Exception e) {
e.printStackTrace();
}
}
}
That's all. Thank U~