天天看點

JavaMail郵件開發(三)

帶有附件的郵件開發

其實,附件就是增加一個Bodypart與Multipart并合:

JavaMail郵件開發(三)

是以,我們隻需要在代碼中增加一部分BodyPart,然後與前面那個Multipart重新組合成新的Multipart——》message

完整代碼如下:

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;
import javax.mail.internet.MimeUtility;


public class MailDemo2 {

	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);
		
		//設定郵件的頭部
		InternetAddress address = new InternetAddress("*********@163.com");
		message.setFrom(address);
		message.setRecipients(Message.RecipientType.TO,"***********@qq.com");
		message.setSubject("第二封郵件");
		

		//設定正文
		//message.setContent("<h1>Hello<h1>", "text/html");
		
		//設定文本部分
		MimeBodyPart textPart = new MimeBodyPart();
		textPart.setContent("這是中文aaa<img src='cid:im'/>aaa","text/html;charset=UTF-8");
		
		//設定圖檔部分
		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");//有關系的
		
		MimeBodyPart textImageParts = new MimeBodyPart();
		textImageParts.setContent(mimeMultipart);
		
		//建立附件部分
		MimeBodyPart attachmentPart = new MimeBodyPart();
		dHandler=new DataHandler(new FileDataSource("src/1.rar"));
		attachmentPart.setDataHandler(dHandler);
		
		/***********需要解決的問題之一:收件收到的檔案名是亂碼************/
		/***********需要解決的問題之二:中文問題:正文中的中文問題,以及附件文檔中的中文問題************/
		
		//郵箱中收到的檔案的檔案名是亂碼,是以,需要手工設定一下
		String fileName = dHandler.getName();
		attachmentPart.setFileName(MimeUtility.encodeText(fileName));
			
		MimeMultipart finalPart = new MimeMultipart();
		finalPart.addBodyPart(textImageParts);
		finalPart.addBodyPart(attachmentPart);
		
		message.setContent(finalPart);
		message.saveChanges();
		//發送郵件
		Transport transport = session.getTransport();
		transport.connect("s******username", "*******password");
		transport.sendMessage(message, message.getAllRecipients());
		
		//儲存郵件
		//message.writeTo(new FileOutputStream("d:/2.eml"));
	}

}
           

而且,其中解決了三個郵件開發中的問題:

問題一: 附件名。在收件箱中接收到的附件名字是亂碼。

解決方案:代碼中擷取附件的名字,然後手動設定

JavaMail郵件開發(三)

問題二:正文文本中文亂碼:

解決方案:在正文代碼中設定編碼形式Charset=UTF-8

JavaMail郵件開發(三)

問題三: 附件中的文檔亂碼問題。

解決方案:使用MimeUtility手動設定。

JavaMail郵件開發(三)