创建邮件—— MIME协议
MIME协议是对RFC822文档的升级和补充,它描述了如何生成一封复杂邮件。通常我们把MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据称之为MIME消息。
对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。(查看outlook邮件源文件)
下面这个“世界上最复杂的邮件原理图”能比较清晰的解释MIME协议
下面用具体的实例来演示用MIME协议来发送一个带有两个图片和一首歌的世界上最复杂的邮件.首先在一个项目中建立一个Mail1的类,再把aa.jpg和江若琳 - 唯有爱.mp3放在src的路径下,具体事例如下:
public class Mail1 {
public static void main(String[] args) throws AddressException, MessagingException, FileNotFoundException, IOException {
//创建邮件、
MimeMessage message=new MimeMessage(Session.getInstance(new Properties()));
//创建邮件属性
message.setFrom(new InternetAddress("1150689774@qq.com"));
message.setRecipient(Message.RecipientType.TO,new InternetAddress("1325691132@qq.com"));
message.setSubject("你好吗 同志们");
//正文
MimeBodyPart text=new MimeBodyPart();
text.setContent("XXXXXX<br/><img src='cid:xx.jpg'></br><img src='cid:yy.jpg'>", "text/html");
//图片1
MimeBodyPart img1=new MimeBodyPart();
DataHandler dh=new DataHandler(new FileDataSource("src//aa.jpg"));
img1.setDataHandler(dh);
img1.setContentID("xx.jpg");
//图片2
MimeBodyPart img2=new MimeBodyPart();
DataHandler dh2=new DataHandler(new FileDataSource("src//aa.jpg"));
img2.setDataHandler(dh2);
img2.setContentID("yy.jpg");
//设置附件
MimeBodyPart attch=new MimeBodyPart();
DataHandler dh3=new DataHandler(new FileDataSource("src//江若琳 - 唯有爱.mp3"));
attch.setDataHandler(dh3);
String filename=dh3.getName();
attch.setFileName(MimeUtility.encodeText(filename));
//描述关系
//图片与正文的描述关系
MimeMultipart mm=new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(img1);
mm.addBodyPart(img2);
mm.setSubType("related");
//图片与正文的bodypart关系、、
MimeBodyPart part=new MimeBodyPart();
part.setContent(mm);
//附件与以上的bodypart的关系、
MimeMultipart m=new MimeMultipart();
m.addBodyPart(part);
m.addBodyPart(attch);
m.setSubType("mixed");
//把Mime消息设置在message中
message.setContent(m);
message.saveChanges();
message.writeTo(new FileOutputStream("G://6.eml"));
}
}