JavaMail开发3
创建邮件——RFC822文档
创建邮件—— MIME协议
MIME协议是对RFC822文档的升级和补充,它描述了如何生成一封复杂邮件。通常我们把MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据称之为MIME消息。
对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。
(查看outlook邮件源文件)复杂邮件:文本+图片+附件
1)简单邮件-文本
import java.io.FileOutputStream; import java.util.Properties; import javax.mail.Session; import javax.mail.Message.RecipientType; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; //基于MIME协议创建简单邮件 public class Demo1 { public static void main(String[] args) throws Exception { //创建一封邮件 MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); //设置From属性 message.setFrom(new InternetAddress("aaa@hacket.cn")); //设置To属性 message.setRecipient(RecipientType.TO,new InternetAddress("bbb@qq.cn")); //设置Subject属性 message.setSubject("test"); //设置Content属性 message.setContent("Today is fine day","text/html;charset=ISO8859-1"); //将该邮件保存的硬盘 message.writeTo(new FileOutputStream("d:\\demo1.eml")); } }
1 /* 2 MimeMessage:表示一个符合MIME协议的邮件 3 InternetAddress:表示电子邮件地址 4 RecipientType.TO:表示发送邮件的类型:例如TO(目标),CC(明抄送),BCC(密送) 5 简单邮件只含有文本 6 Content-Type:文本类型 7 8 */
对于非Web应用,包冲突问题-JavaEE1.4-只针对于非Web应用,不用系统自带的jar包,自己加进去
|--mail.jar
|--activation.jar
MIME协议常用头字段
1、Content-type:字段
数据类型
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头字段设置为如下形式:
那么,在HTML正文中就需要使用如下HTML语句来引用该图片资源:
<img src="cid:itcastlogo_gif">
注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。
邮件组织结构相关的API
2)基于MIME协议创建复杂邮件(文本+图片)
import java.io.FileOutputStream; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; 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; //基于MIME协议创建复杂邮件(文本+图片) public class Demo2 { public static void main(String[] args) throws Exception { //创建一封邮件 MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); //设置From属性 message.setFrom(new InternetAddress("aaa@zhaojun.com")); //设置To属性 message.setRecipient(RecipientType.TO,new InternetAddress("bbb@qq.com")); //设置Subject属性 message.setSubject("text+image"); //文本 MimeBodyPart text = new MimeBodyPart(); text.setContent("this is a <br/><img src='cid:imageID'/><br/>picture<br/>","text/html;charset=ISO8859-1"); //图片 MimeBodyPart image = new MimeBodyPart(); //读取cc.JPG图片 DataHandler dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/cc.jpg")); //设置MimeBodyPart和DataHandler的关联 image.setDataHandler(dh); //为图片设置一个唯一编号 image.setContentID("imageID"); //设置文本和图片的关系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(image); mm.setSubType("related"); //设置整个邮件的关系 message.setContent(mm); //将该邮件保存的硬盘 message.writeTo(new FileOutputStream("d:\\demo2.eml")); } }
1 /* 2 MimeBodyPart:表示复杂邮件的一个组成部分,它可以表示文本,附件,图片 3 DataHandler:表示可以读取图片或附件 4 MimeMultipart:表示二个邮件组成部分的关系,文本和图片的关系是"related"关系 5 Content-ID:表示图片的编号 6 7 */
03)文本+附件
import java.io.FileOutputStream; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; 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; //基于MIME协议创建复杂邮件(文本+)附件 public class Demo3 { public static void main(String[] args) throws Exception { //创建一封邮件 MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); //设置From属性 message.setFrom(new InternetAddress("aaa@zhaojun.com")); //设置To属性 message.setRecipient(RecipientType.TO,new InternetAddress("bbb@qq.com")); //设置Subject属性 message.setSubject("text+append"); //文本 MimeBodyPart text = new MimeBodyPart(); text.setContent("this is a append<br/>","text/html;charset=ISO8859-1"); //附件1 MimeBodyPart append1 = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/apache-tomcat-7.0.12.zip")); append1.setDataHandler(dh); //设置附件的名字 append1.setFileName(dh.getName()); /*附件2 MimeBodyPart append2 = new MimeBodyPart(); dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/apache-tomcat-6.0.29.zip")); append2.setDataHandler(dh); //设置附件的名字 append2.setFileName(dh.getName()); */ //设置文本和附件的关系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(append1); //mm.addBodyPart(append2); mm.setSubType("mixed"); //设置整个邮件的关系 message.setContent(mm); //将该邮件保存的硬盘 message.writeTo(new FileOutputStream("d:\\demo3.eml")); } }
1 MimeMultipart:表示二个邮件组成部分的关系,文本和附件的关系是"mixed"关系,即默认 2 MimeMultipart加入的顺利与邮件显示附件的顺序无关
04)文本+图片+附件
import java.io.FileOutputStream; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; 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; //基于MIME协议创建复杂邮件(1文本+1图片+1附件) public class Demo4 { public static void main(String[] args) throws Exception { //创建一封邮件 MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties())); //设置From属性 message.setFrom(new InternetAddress("aaa@zhaojun.com")); //设置To属性 message.setRecipient(RecipientType.TO,new InternetAddress("bbb@qq.com")); //设置Subject属性 message.setSubject("text+image+append"); //文本 MimeBodyPart text = new MimeBodyPart(); text.setContent("this is a<br/><img src='cid:imageID'/><br/>image<br/>","text/html;charset=ISO8859-1"); //图片 MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/cc.jpg")); image.setDataHandler(dh); image.setContentID("imageID"); //附件 MimeBodyPart append = new MimeBodyPart(); dh = new DataHandler(new FileDataSource("src/cn/itcast/web/mail/config/abc.txt")); append.setDataHandler(dh); append.setFileName(dh.getName()); //文本+图片 MimeMultipart mm1 = new MimeMultipart(); mm1.addBodyPart(text); mm1.addBodyPart(image); mm1.setSubType("related"); //将文本+图片封装成邮件的组成部分,即将关系看作成一个部分 MimeBodyPart temp = new MimeBodyPart(); temp.setContent(mm1); //设置和附件的关系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(temp); mm.addBodyPart(append); mm.setSubType("mixed"); //设置整个邮件的关系 message.setContent(mm); //将该邮件保存的硬盘 message.writeTo(new FileOutputStream("d:\\demo4.eml")); } }
1 //对于,复杂类型的邮件,位置关系特别注意和加入的顺利要一致