天天看點

JavaMail郵件開發(二)

複雜的郵件開發(帶有圖檔的郵件)

1. 首先,我們看一下一個郵件主題的組成結構:

(參考\javamail-1.4.4\docs\mail1-4.pdf中的Chapter4部分)

JavaMail郵件開發(二)

仔細看一下上面這個圖,下面自己畫圖解釋一下:

JavaMail郵件開發(二)

對于有圖檔的一封郵件,正文部分有兩部分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"));
	}

}