Java邮件开发(3)_使用JavaMail API编写一个复杂结构的邮件

本文包括两部分,一、邮件文件的内部结构与API分析 二、编写复杂邮件

一、邮件文件的内部结构与API分析
1.复合邮件的整体结构
        整体邮件的MIME消息头(mutlipart/mixed)
                邮件正文的MIME消息头(multpart/related)
                        HTML代码的消息头、HTML代码的消息体(multipart/alternative(纯文本+超文本)+内嵌资源 )
                        图片代码的消息头、图片代码的消息体
                第一个附件文件的MIME消息头
                第一个附件文件的MIME消息体
                第二个附件文件的MIME消息头
                第二个附件文件的MIME消息体
                。。。。

2.邮件组织结构相关的API
MimeMessage对象
        MIME对象的消息头
        MimeMultipart对象
                 MimeBodyPart对象
                 MimeMultipart对象中设置MimeMultipart对象( MimeBodyPart对象、 MimeBodyPart对象、 MimeBodyPart对象)
                 MimeBodyPart对象

说明:
MimeMessage类表示整封邮件
MimeBodyPart类表示邮件的一个MIME消息  
MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息

关于邮件组织具体结构的图表析构可参考:JavaMail:带附件的邮件格式解析

 

 

二、编写复杂邮件 
要求:邮件包含附件,且附件名称和发件人名称友好。具体代码如下:

 

package info.zoio.javamail;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Message.RecipientType;
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 Demo3 {
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Session session = Session.getInstance(new Properties());
		MimeMessage msg = new MimeMessage(session);
		
		msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText("十井") + "\" <[email protected]>"));
//		msg.setReplyTo(new Address[]{new InternetAddress("[email protected]")});//回复时的默认收件人
		msg.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
		
		msg.setSubject("复杂邮件测试");
		
		
		//整体框架
		MimeMultipart msgMultipart = new MimeMultipart("mixed");
		msg.setContent(msgMultipart);
		
		MimeBodyPart cotent = new MimeBodyPart();
		MimeBodyPart attch1 = new MimeBodyPart();
		MimeBodyPart attch2 = new MimeBodyPart();
		
		msgMultipart.addBodyPart(cotent);
		msgMultipart.addBodyPart(attch1);
		msgMultipart.addBodyPart(attch2);
		
		
		//添加正文内容
		MimeMultipart bodyMultipart = new MimeMultipart("related");
		cotent.setContent(bodyMultipart);
		
		MimeBodyPart htmlBodyPart = new MimeBodyPart();
		
		bodyMultipart.addBodyPart(htmlBodyPart);
		
		
		htmlBodyPart.setContent("<span style='color:red'>哈哈<span>", "text/html;charset=gbk");
		//添加附件
		DataSource attahDs1 = new FileDataSource("H:\\config.txt");
		DataHandler attahDh1 = new DataHandler(attahDs1);
		attch1.setDataHandler(attahDh1);
		attch1.setFileName(MimeUtility.encodeText("attach1哈哈.txt"));
		
		DataSource attahDs2 = new FileDataSource("F:\\Java邮件\\手工发送邮件.png");
		DataHandler attahDh2 = new DataHandler(attahDs2);
		attch2.setDataHandler(attahDh2);
		attch2.setFileName(MimeUtility.encodeText("attach2哈哈.png"));
		
		//生成邮件
		msg.saveChanges();
		
		//保存到本地
		OutputStream os = new FileOutputStream("F:\\Java邮件\\demo3.eml");
		msg.writeTo(os);
		os.close();
	}

}
 

 

具体生成邮件效果可登陆[email protected]邮箱(pwd:h123456)查看。

 

你可能感兴趣的:(java,javamail)