像上一篇文章那样,我们只能创建一封封只包含纯文本或者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最初是为了改进早期的简单邮件传输协议(SMTP),使邮件能够包含除纯文本之外的多种类型的数据。 在电子邮件系统中,MIME扮演着至关重要的角色。它通过将各种非文本内容编码为ASCII格式,使得这些内容能够在...
MIME 扩展了原始的简单邮件传输协议 (SMTP),使得除了纯文本之外,还可以传输图像、音频、视频以及各种应用程序生成的复杂文档。RFC(Request for Comments)文档是 Internet Engineering Task Force (IETF) 制定...
**MIME协议分析** MIME,全称“Multipurpose Internet Mail Extensions”,中文名为“多用途互联网邮件扩展”,是一种广泛...在理解了MIME的工作原理和结构后,我们可以更有效地处理和创建包含复杂内容的电子邮件。
1. **多段邮件**:MIME协议允许在同一封邮件中发送多段内容,包括不同格式的文本、图片、音频等多种类型的数据。 2. **嵌入式资源**:MIME协议支持将图像等资源嵌入到邮件正文之中,增强了邮件的交互性和可读性。 3....
MIME协议中使用Base64编解码来表示二进制数据,如图片、音频、视频等。 4. Base64编解码的应用 Base64编解码的应用非常广泛,例如: * 在电子邮件中传输二进制数据 * 在HTTP协议中传输二进制数据 * 在XML和JSON...
传统的邮件用户代理可以使用S/MIME来加密发送邮件,并解密接收的加密邮件。S/MIME不仅限于邮件,也可以应用于任何支持MIME数据传输的协议,如HTTP。此外,S/MIME允许在混合传输系统中安全地交换消息,支持自动消息...
MIME(多用途互联网邮件扩展)协议应运而生,它是对RFC822的一个扩展,允许邮件包含非ASCII字符的数据,如图片、音频、视频和各种文件附件。MIME邮件通过使用Content-Type头字段来指定数据类型,并用分隔线来区分...
这个类帮助开发者跨越了MIME格式的复杂性,提供了一种简单的方式来处理和操作电子邮件,无论是读取还是创建。通过深入研究提供的测试用例和类的API,开发者可以有效地利用这个工具来满足项目需求。
电子邮件是我们日常沟通的重要工具,而SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol version 3)和MIME(Multipurpose Internet Mail Extensions)是电子邮件系统中的核心协议,它们各自负责...
1. **Mime-Version**: 这个字段指示MIME协议的版本,例如`Mime-Version: 1.0`表示使用的是MIME的第一个版本。 2. **Content-Type**: 这个字段定义了邮件内容的类型。在示例中,`Content-Type: multipart/mixed; ...
在MIME出现之前,使用RFC 822只能发送基本的ASCII码文本信息,邮件内容如果要包括二进制文件、声音和动画等,实现起来非常困难。MIME提供了一种可以在邮件中附加多种不同编码文件的方法。 MIME邮件的格式主要包括:...
在IT行业中,MIME(Multipurpose Internet Mail Extensions)是一种标准,用于定义电子邮件和其他网络数据的格式,以便在网络上发送多种类型的数据。在这个实例中,我们关注的是如何使用MIME格式来处理Excel文件,并...
6. **解析MIME邮件**:使用JavaMail,你可以通过`InternetMessage`类来读取邮件,并使用`MIMEMultipart`和`MIMEBodyPart`来解析邮件的各个部分。首先,从邮件服务器获取`MimeMessage`,然后调用`getContent()`方法,...
例如,你可以创建`MimeMessage`对象来表示一个邮件,然后使用`MimeBodyPart`来表示邮件的各个部分,包括文本、附件等。通过这种方式,开发者可以轻松地实现复杂的数据交互功能。 总之,`multipart`和`mime`邮件是...