複雜的郵件開發(帶有圖檔的郵件)
1. 首先,我們看一下一個郵件主題的組成結構:
(參考\javamail-1.4.4\docs\mail1-4.pdf中的Chapter4部分)

仔細看一下上面這個圖,下面自己畫圖解釋一下:
對于有圖檔的一封郵件,正文部分有兩部分Bodypart: 文本和圖檔。
因為頭部部分我們在上一部分已經設定好了,是以,接下來我們主要是對正文部分進行編碼。
2. 正文部分編碼
a. 文本Bodypart
//設定文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("aaa<img src='cid:im'/>aaa","text/html");//圖檔的id:im
b. 圖檔Bodypart:,并加載圖檔
/設定圖檔部分
MimeBodyPart imagePart = new MimeBodyPart();
imagePart.setContentID("im");
//把磁盤上的圖檔加到part中:這裡使用到了JAF架構
DataHandler dHandler = new DataHandler(new FileDataSource("src/1.jpg"));
imagePart.setDataHandler(dHandler);
C. 将每個Bodypart結合起來組合成Multipart,然後是Multipart組合成message
//将每個part部分結合起來,組合成MultiPart->Message
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(textPart);
mimeMultipart.addBodyPart(imagePart);
mimeMultipart.setSubType("related");//有關系的
d. 最後是發送郵件(第一部分已經講了)
完整代碼如下:
import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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;
public class MailDemo1 {
public static void main(String[] args) throws Exception {
Properties props = new Properties();//key value:配置參數。真正發送郵件時再配送
props.setProperty("mail.host", "smtp.163.com");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.debug", "true");
Session session = Session.getInstance(props);//發送郵件時使用的換件配置
MimeMessage message = new MimeMessage(session);//建立一個郵件Message對象
//設定郵件的頭部
InternetAddress address = new InternetAddress("*********@163.com");
message.setFrom(address);
message.setRecipients(Message.RecipientType.TO,"********@qq.com");
message.setSubject("This is the second message");
//設定正文
message.setContent("<h1>Hello<h1>", "text/html");
//設定文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("aaa<img src='cid:im'/>aaa","text/html");//圖檔的id:im
//設定圖檔部分
MimeBodyPart imagePart = new MimeBodyPart();
imagePart.setContentID("im");
//把磁盤上的圖檔加到part中:這裡使用到了JAF架構
DataHandler dHandler = new DataHandler(new FileDataSource("src/1.jpg"));
imagePart.setDataHandler(dHandler);
//将每個part部分結合起來,組合成MultiPart->Message
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(textPart);
mimeMultipart.addBodyPart(imagePart);
mimeMultipart.setSubType("related");//有關系的
message.setContent(mimeMultipart);
message.saveChanges();
//發送郵件
Transport transport = session.getTransport();
transport.connect("******username", "*****password");
transport.sendMessage(message, message.getAllRecipients());
//儲存郵件
//message.writeTo(new FileOutputStream("d:/1.eml"));
}
}