邮件原理21创建邮件——MIME协议MIME协议是对RFC822文档的升级和补充,它描述了如何生成一封复杂邮件。通常我们把MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据称之为MIME消息。对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。(查看outlook邮件源文件)2MIME协议常用头字段(1)Content-type:字段数据类型以“主类型/子类型”的形式出现,主类型有text、image、audio、video、application、message等,分别表示文本、图片、音频、视频、应用程序、组合结构、消息等。每个主类型下面都有多个子类型,例如text主类型包含plain、html、xml、css等子类型。数据的关系multipart/mixed、multipart/related、multipart/alternative(2)Content-Disposition头字段Content-Disposition头字段用于指定邮件阅读程序处理数据内容的方式,有inline和attachment两种标准方式,inline表示直接处理,而attachment表示当作附件处理。如果将Content-Disposition设置为attachment,在其后还可以指定filename属性,如下所示:Content-Disposition:attachment;filename=“1.bmp”上面的MIME头字段表示MIME消息体的内容为邮件附件,附件名“1.bmp”(3)Content-ID头字段Content-ID头字段用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。例如,假设将一个表示内嵌图片的MIME消息的Content-ID头字段设置为如下形式:Content-ID:it315logo_gif那么,在HTML正文中就需要使用如下HTML语句来引用该图片资源:
注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。3邮件组织结构相关的APIMimeMessage类表示整封邮件。MimeBodyPart类表示邮件的一个MIME消息。MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。4.实例(1)邮件只发送内容publicclassMimeMail{publicstaticvoidmain(String[]args)throwsException{//创建邮件MimeMessagemessage=newMimeMessage(Session.getInstance(newProperties()));//设置邮件属性message.setFrom(newInternetAddress("aa@hai.com"));message.setRecipients(Message.RecipientType.TO,"bb@hai.com");message.setSubject("haiyan");//正文MimeBodyPartpart=newMimeBodyPart();part.setContent("haoa你好","text/html");//描述关系MimeMultipartmm=newMimeMultipart();mm.addBodyPart(part);message.setContent(mm);message.saveChanges();message.writeTo(newFileOutputStream("D:\\1.eml"));}}(2)邮件发送内容和一张图片publicclassMimeImageMail{publicstaticvoidmain(String[]args)throwsException{//创建邮件MimeMessagemessage=newMimeMessage(Session.getInstance(newProperties()));//设置邮件属性message.setFrom(newInternetAddress("wang@qq.com"));message.setRecipient(Message.RecipientType.TO,newInternetAddress("liu@qq.com"));message.setSubject("给你发个美女的照片");//正文MimeBodyParttext=newMimeBodyPart();text.setContent("哥你好啊,好好照顾自己","text/html;charset=gb2312");MimeBodyPartimage=newMimeBodyPart();image.setDataHandler(newDataHandler(newFileDataSource("src\\f.jpg")));image.setContentID("xx.jpg");;MimeMultipartmm=newMimeMultipart();mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("related");message.setContent(mm);message.saveChanges();message.writeTo(newFileOutputStream("D:\\2.eml"));}}(3)邮件发送内容和多张图片publicclassMimeManyMail{publicstaticvoidmain(String[]args)throwsException{//创建邮件MimeMessagemessage=newMimeMessage(Session.getInstance(newProperties()));//设置邮件属性message.setFrom(newInternetAddress("...