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("十井") + "\" <java_mail_test@126.com>"));
//		msg.setReplyTo(new Address[]{new InternetAddress("test@621.com")});//回复时的默认收件人
		msg.setRecipient(RecipientType.TO, new InternetAddress("java_mail_test@yeah.net"));
		
		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();
	}

}
 

 

具体生成邮件效果可登陆java_mail_test@yean.net邮箱(pwd:h123456)查看。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值