创建邮件——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 //对于,复杂类型的邮件,位置关系特别注意和加入的顺利要一致