像上一篇文章那样,我们只能创建一封封只包含纯文本或者HTML格式的文本邮件,这远远不能满足我们现在的需要,我们经常想要把本机上的图片、相片包含在邮件的正文部分,或者是直接将自己制作的贺卡等作为邮件正文发送给我们的朋友。
想要在邮件中包含图片、音频、视频等其他格式的文件,就不能再简单地使用 RFC 文档来对邮件结构、内容进行描述了,因为 RFC 只能描述普通的文本,而且一旦遇到单独一行的句号“.”时,SMTP 服务器就会以此为邮件正文部分的结束符,因此很大可能会导致邮件信息的丢失。
关于MIME:
引入 MIME (Multipurpose Internet Mail Extension ,多功能 Internet 邮件扩展)协议来满足我们上面的需求。使用了 MIME 协议描述的邮件可称为 MIME 邮件,一个 MIME 邮件可由若干个 符合 MIME 格式描述的消息组成。而一个消息既可以表示邮件中一个基本的 MIME 资源文件(例如纯文本、音频、视频等),又可以表示若干个此类基本资源文件组合而成的大的 MIME 消息的组合体。
一个 MIME 消息分为消息头和消息体,消息头包含对于消息体的描述,消息体则包含资源文件的具体内容。
JavaMail 中使用MIME:
在 JavaMail 中,一个 MIME 邮件用一个 MimeMessage 对象表示,仔细看下图:
其中标了红色圈圈的则是 MIME 消息的资源类型。
BodyPart 相当于上述的 MIME 基本消息;
MultiPart 相当于由多个 BodyPart (基本消息)组合而成的较大的 MIME 消息组合体;
Message 则相当于一封 MIME 邮件;
在上图中,我们看到 BodyPart 还可以再包含 MultiPart ,很明显这是一种组合结构、模式,或者说成树状结构。
注:下面的类都是抽象类,其实它们之下就有 MimeMessage 类、MimeMultiPart 类、MimeBodyPart 类一一对应,如下图:
好了,用代码来说明问题,实现一下,不管是否合适,我还是在代码中写上较多注释,其中有一些事必须注意的,代码如下:
- publicclassWithPictureMessage{
- publicstaticvoidmain(String[]args)throwsException{
- Stringfrom="test_hao@sina.cn";
- Stringto="test_hao@163.com";
- Stringsubject="创建一个内含图片的邮件!";
- Stringbody="<h4>内含图片的邮件测试!!!</h4>"+
- "<ahref=http://haolloyin.blog.51cto.com/>蚂蚁</a></br></br>"+
- "<ahref=http://haolloyin.blog.51cto.com/>"+
- "<imgsrc=\"cid:haolloyin_logo_jpg\"></a>";
-
-
-
- Sessionsession=Session.getDefaultInstance(newProperties());
-
- MimeMessagemsg=newMimeMessage(session);
- msg.setFrom(newInternetAddress(from));
- msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
- msg.setSubject(subject);
- msg.setSentDate(newDate());
-
- MimeMultipartmultipart=newMimeMultipart("related");
-
分享到:
相关推荐
MIME协议用于定义复杂邮件体的格式,它可以表达多段平行的文本内容和非文本的邮件内容,例如,在邮件体中内嵌的图像数据和邮件附件等。另外,MIME 协议的数据格式也可以避免邮件内容在传输过程中发生信息丢失。MIME...
邮件协议, MIME基础级协议详解
但是,由于图片和声音等内容是非ASCII码的二进制数据,而RFC822邮件格式只适合用来表达纯文本的邮件内容,所以,要使用 RFC822邮件格式发送这些非ASCII码的二进制数据时,必须先采用某种编码方式将它们“编码”成可...
MIME试图在不改变SMTP协议和RFC822(邮件格式标准)的基础上,使得邮件可以传送任意二进制文件。为此,它在这些协议之上,采取了一些 措施,这就是我们下面所要重点讲述的内容。 第2 章. MIME详解 2.1. 改进措施 一...
多用途网际邮件扩充协议(MIME)详细介绍
但是,由于图片和声音等内容是非ASCII码的二进制数据,而RFC822邮件格式只适合用来表达纯文本的邮件内容,所以,要使用 RFC822邮件格式发送这些非ASCII码的二进制数据时,必须先采用某种编码方式将它们“编码”成可...
下例是一个邮件的标准MIME头: Mime-Version: 1.0 //版本号:1.0 Content-Type: multipart/mixed; boundary="IMA.Boundary.750407228" //内容类型是多种的 --IMA.Boundary.750407228 Content-Type: text/plain; ...
电子邮件MIME协议中的Base64编解码 整份实验报告 有截图和代码
mime4j-0.6邮件jar包
该压缩包包含三个文档,分别是SMTP协议详解,POP3协议详解,MIME协议详解,文档中详细介绍了一个邮件发送和接收的过程分析,协议本身的包含的命令和工作过程,为开发邮件代理的客户端提供技术基础。
该工具类可直接复制代码,进行调用 ... 对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。
MIME, 全称为“Multipurpose Internet Mail Extensions”, 比较确切的中文名称为“多用途互联网邮件扩展”。它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC 2045-2049 MIME编码的格式
黑莓使用S/MIME发送邮件 详细记录 黑莓使用S/MIME发送邮件 详细记录
首先需要连接邮件服务器 这里用socket 邮件服务器端口 25 //2.现在就是和服务器对话了 //3.结束 #include #include #include #include #include #include #include #include #include #include #include ...
采用asp.net开发 ,利用mime格式的 excel 实现图片打印的MIME示例文件,代码简单明了,其它语言也可以作参考。
MIME协议的简单介绍和分析.pdf 学习资料 复习资料 教学资源
MIME的java解析代码 用于开发邮件客户端
数字签名和邮件加密 构建S/MIME邮件服务和PGP邮件服务 (Foxmail Server邮件服务器的架设) 经过查阅资料做了这个小实训,还请指教。
多用途互联网邮件扩展(MIME)很详细。
文中基于S/MIME协议,利用DES,RSA和SHA-1等一系列安全算法和安全认证方式,以C++为编程语言实现了一个能在Internet上安全传输电子邮件的邮件服务系统,确保电子邮件的完整性、保密性和不可否认性。