1. 程式人生 > >java帶圖片的郵件傳送方法實現

java帶圖片的郵件傳送方法實現

package sendEmail;


import java.util.Properties;


import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
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;


public class AttchImgMail {
// JavaMail需要Properties來建立一個session物件。它將尋找字串"mail.smtp.host",屬性值就是傳送郵件的主機.
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
// properties.put("mail.smtp.host", "mailcas.chinapnr.com");// 設定smtp主機
properties.put("mail.smtp.host", "smtp.163.com");// 設定smtp主機
properties.put("mail.smtp.auth", "true");// 使用smtp身份驗證
/*
* 在 JavaMail 中,可以通過 extends Authenticator 抽象類,在子類中覆蓋父類中的
* getPasswordAuthentication() 方法,就可以實現以不同的方式來進行登入郵箱時的使用者身份認證。JavaMail
* 中的這種設計是使用了策略模式(Strategy
*/
MimeMessage message = new MimeMessage(Session.getInstance(properties,
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(//設定傳送帳號密碼
"帳號", "密碼");
}
}));
// 設定郵件的屬性
// 設定郵件的發件人
message.setFrom(new InternetAddress("發件人"));
// 設定郵件的收件人 cc表示抄送 bcc 表示暗送
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
"收件人"));
// 設定郵件的主題
message.setSubject("系統自動傳送郵件");
// 建立郵件的正文
MimeBodyPart text = new MimeBodyPart();
// setContent(“郵件的正文內容”,”設定郵件內容的編碼方式”)
text.setContent("此郵件為系統自動傳送<img src='cid:a'><img src='cid:b'>",
"text/html;charset=gb2312");


// 點到點的傳送
// 一對多傳送只要改一個地方如下:

// // 構建一個群發地址陣列
// InternetAddress[] adr=new InternetAddress[toMore.length];
// for(int i=0;i<toMore.length;i++){ adr[i]=new
// InternetAddress(toMore[i]); }
// // Message的setRecipients方法支援群發。。注意:setRecipients方法是複數和點 到點不一樣
// message.setRecipients(Message.RecipientType.TO,adr);
 


// 建立圖片
MimeBodyPart img = new MimeBodyPart();
/*
* JavaMail API不限制資訊只為文字,任何形式的資訊都可能作繭自縛MimeMessage的一部分.
* 除了文字資訊,作為檔案附件包含在電子郵件資訊的一部分是很普遍的. JavaMail
* API通過使用DataHandler物件,提供一個允許我們包含非文字BodyPart物件的簡便方法.
*/
DataHandler dh = new DataHandler(new FileDataSource("src//a.jpg"));//圖片路徑
img.setDataHandler(dh);
// 建立圖片的一個表示用於顯示在郵件中顯示
img.setContentID("a");


MimeBodyPart img2 = new MimeBodyPart();
DataHandler dh2 = new DataHandler(new FileDataSource("src//b.jpg"));//第二張圖片路徑
img2.setDataHandler(dh2);
img2.setContentID("b");
// 建立附件
// MimeBodyPart attch = new MimeBodyPart();
// DataHandler dh1 = new DataHandler(new FileDataSource("src//b.jpg"));
// attch.setDataHandler(dh1);
// String filename1 = dh1.getName();
// MimeUtility 是一個工具類,encodeText()用於處理附件字,防止中文亂碼問題
// attch.setFileName(MimeUtility.encodeText(filename1));
// 關係 正文和圖片的
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(img);
mm.setSubType("related");// 設定正文與圖片之間的關係
// 圖班與正文的 body
MimeBodyPart all = new MimeBodyPart();
all.setContent(mm);
// 附件與正文(text 和 img)的關係
MimeMultipart mm2 = new MimeMultipart();
mm2.addBodyPart(all);
mm2.addBodyPart(img2);
mm2.setSubType("mixed");// 設定正文與附件之間的關係


message.setContent(mm2);
message.saveChanges(); // 儲存修改


Transport.send(message);// 傳送郵件
System.out.println("郵件傳送成功");


}
}