本文包括两部分,一、邮件文件的内部结构与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)查看。