邮件原理

邮件原理

1创建邮件—— MIME协议

MIME协议是对RFC822文档的升级和补充,它描述了如何生成一封复杂邮件。通常我们把MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据称之为MIME消息。

对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。(查看outlook邮件源文件)

2 MIME协议常用头字段

(1)Content-type:字段

数据类型  

以“主类型/子类型”的形式出现,主类型有textimageaudiovideoapplicationmessage等,分别表示文本、图片、音频、视频、应用程序、组合结构、消息等。每个主类型下面都有多个子类型,例如text主类型包含plainhtmlxmlcss等子类型。 

数据的关系

multipart/mixedmultipart/relatedmultipart/alternative

(2)Content-Disposition头字段

Content-Disposition头字段用于指定邮件阅读程序处理数据内容的方式,有inlineattachment两种标准方式,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语句来引用该图片资源:
<img src="cid:it315logo_gif"> 
注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。

3邮件组织结构相关的API

MimeMessage类表示整封邮件。

MimeBodyPart类表示邮件的一个MIME消息。

MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。

4.实例

(1)邮件只发送内容

public class MimeMail {

public static void main(String[] args) throws Exception {

//创建邮件

MimeMessage message=new MimeMessage(Session.getInstance(new  Properties()));

//设置邮件属性

message.setFrom(new InternetAddress("aa@hai.com"));

message.setRecipients(Message.RecipientType.TO, "bb@hai.com");

message.setSubject("haiyan");

//正文

MimeBodyPart part=new MimeBodyPart();

part.setContent("haoa你好","text/html");

//描述关系

MimeMultipart mm=new MimeMultipart();

mm.addBodyPart(part);

message.setContent(mm);

message.saveChanges();

message.writeTo(new FileOutputStream("D://1.eml"));

}

}

(2)邮件发送内容和一张图片

public class MimeImageMail {

public static void main(String[] args) throws Exception {

//创建邮件

MimeMessage message=new MimeMessage(Session.getInstance(new  Properties()));

//设置邮件属性

message.setFrom(new InternetAddress("wang@qq.com"));

message.setRecipient(Message.RecipientType.TO, new  InternetAddress("liu@qq.com"));

message.setSubject("给你发个美女的照片");

//正文

MimeBodyPart text=new MimeBodyPart();

text.setContent("哥你好啊,好好照顾自己<img  src='cid:xx.jpg'>","text/html;charset=gb2312");

MimeBodyPart image=new MimeBodyPart();

image.setDataHandler(new DataHandler(new  FileDataSource("src//f.jpg")));

image.setContentID("xx.jpg");;

MimeMultipart mm=new MimeMultipart();

mm.addBodyPart(text);

mm.addBodyPart(image);

mm.setSubType("related");

message.setContent(mm);

message.saveChanges();

message.writeTo(new FileOutputStream("D://2.eml"));

}

}

(3)邮件发送内容和多张图片

public class MimeManyMail {

public static void main(String[] args) throws Exception {

//创建邮件

MimeMessage message=new MimeMessage(Session.getInstance(new                 Properties()));

//设置邮件属性

message.setFrom(new InternetAddress("wang@qq.com"));

message.setRecipient(Message.RecipientType.TO,new    InternetAddress("liu@qq.com"));

message.setSubject("看照片");

//正文

MimeBodyPart text=new MimeBodyPart();

text.setContent("好好看看,哪张漂亮啊<br/><img   src='cid:xx.jpg'><br/><img src='cid:yy.jpg'><br/>你选哪个     ","text/html;charset=gb2312");

MimeBodyPart image=new MimeBodyPart();

image.setDataHandler(new DataHandler(new  FileDataSource("src//f.jpg")));

image.setContentID("xx.jpg");

MimeBodyPart image2=new MimeBodyPart();

DataHandler dh=new DataHandler(new FileDataSource("src//美.jpg"));

image2.setDataHandler(dh);

image2.setContentID("yy.jpg");

String filename=dh.getName();

image2.setFileName(MimeUtility.encodeText(filename));

//描述关系

MimeMultipart mm=new MimeMultipart();

mm.addBodyPart(text);

mm.addBodyPart(image);

mm.addBodyPart(image2);

mm.setSubType("related");

message.setContent(mm);

message.saveChanges();

message.writeTo(new FileOutputStream("D://4.eml"));

}

}

(5)邮件发送内容和附件

public class AttchMime {

public static void main(String[] args) throws Exception {

//创建邮件

MimeMessage message=new MimeMessage(Session.getInstance(new  Properties()));

//设置邮件属性

message.setFrom(new InternetAddress("yan@qq.com"));

message.setRecipient(Message.RecipientType.TO, new  InternetAddress("shuai@qq.com"));

//正文

MimeBodyPart text=new MimeBodyPart();

text.setContent("给你发个美女的照片<br/><img src='cid:xx.jpg'>好看 不","text/html;charset=gb2312");

MimeBodyPart attch=new MimeBodyPart();

attch.setDataHandler(new DataHandler(new 

FileDataSource("src//1.mp3")));

attch.setFileName("1.mp3");

//描述关系

MimeMultipart mm=new MimeMultipart();

mm.addBodyPart(text);

mm.addBodyPart(attch);

mm.setSubType("mixed");

message.setContent(mm);

message.saveChanges();

message.writeTo(new FileOutputStream("d://3.eml"));

}

}

(6)邮件发送内容、多个图片和附件

public class MailImageAndAttch{

public static void main(String[] args) throws Exception{

//创建邮件

MimeMessage message=new MimeMessage(Session.getInstance(new  Properties()));

//设置邮件属性

message.setFrom(new InternetAddress("wang@qq.com"));

message.setRecipient(Message.RecipientType.TO, new  InternetAddress("yong@qq.com"));

message.setSubject("复杂的邮件");

//正文

MimeBodyPart text=new MimeBodyPart();

text.setContent("我给你发两张图片<br/><img  src='cid:xx.jpg'><br/><img src='cid:yy.jpg'>和一首歌 ","text/html;charset=gb2312");

MimeBodyPart image=new MimeBodyPart();

image.setDataHandler(new DataHandler(new  FileDataSource("src//f.jpg")));

image.setContentID("xx.jpg");

MimeBodyPart image2=new MimeBodyPart();

DataHandler dh1=new DataHandler(new FileDataSource("src//美.jpg"));

image2.setDataHandler(dh1);

image2.setContentID("yy.jpg");

String filename=dh1.getName();

image2.setFileName(MimeUtility.encodeText(filename));

MimeBodyPart attch=new MimeBodyPart();

DataHandler dh=new DataHandler(new FileDataSource("src//默默无 语.mp3"));

attch.setDataHandler(dh);

String name=dh.getName();

attch.setFileName(MimeUtility.encodeText(name));

MimeMultipart mm=new MimeMultipart();

mm.addBodyPart(text);

mm.addBodyPart(image);

mm.addBodyPart(image2);

mm.setSubType("related");

MimeBodyPart part=new MimeBodyPart();

part.setContent(mm);

//描述关系

MimeMultipart m=new MimeMultipart();

m.addBodyPart(part);

m.addBodyPart(attch);

m.setSubType("mixed");

message.setContent(m);

message.saveChanges();

message.writeTo(new FileOutputStream("D://5.eml"));

}

}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值