`

使用MIME协议创建内含图片的复杂邮件

 
阅读更多

像上一篇文章那样,我们只能创建一封封只包含纯文本或者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 邮件;

withPictureMail01 在上图中,我们看到 BodyPart 还可以再包含 MultiPart ,很明显这是一种组合结构、模式,或者说成树状结构。

注:下面的类都是抽象类,其实它们之下就有 MimeMessage 类、MimeMultiPart 类、MimeBodyPart 类一一对应,如下图:

JavaMail01

好了,用代码来说明问题,实现一下,不管是否合适,我还是在代码中写上较多注释,其中有一些事必须注意的,代码如下:

  1. /**
  2. *创建内含图片的邮件,保存为Outlook的".eml"文件
  3. *@authorhaolloyin
  4. */
  5. publicclassWithPictureMessage{
  6. publicstaticvoidmain(String[]args)throwsException{
  7. Stringfrom="test_hao@sina.cn";
  8. Stringto="test_hao@163.com";
  9. Stringsubject="创建一个内含图片的邮件!";
  10. Stringbody="<h4>内含图片的邮件测试!!!</h4>"+
  11. "<ahref=http://haolloyin.blog.51cto.com/>蚂蚁</a></br></br>"+
  12. "<ahref=http://haolloyin.blog.51cto.com/>"+
  13. "<imgsrc=\"cid:haolloyin_logo_jpg\"></a>";
  14. /*
  15. *上面的cid是指MIME协议中的Content-ID头,它是
  16. *对于文件资源的唯一标识符,下面的setContentID()方法
  17. *中传入的ID号就必须与这个haolloyin_logo_jpg相一致
  18. */
  19. //创建该邮件应用程序所需的环境信息以及会话信息
  20. Sessionsession=Session.getDefaultInstance(newProperties());
  21. //以下几句是设置邮件的基本信息
  22. MimeMessagemsg=newMimeMessage(session);
  23. msg.setFrom(newInternetAddress(from));
  24. msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
  25. msg.setSubject(subject);
  26. msg.setSentDate(newDate());
  27. /*
  28. *创建一个子类型为“related”的MIME消息组合对象,
  29. *其实MimeMultipart类还有另外两种子类型,请自行
  30. *查阅并比较其中的适用场景
  31. */
  32. MimeMultipartmultipart=newMimeMultipart("related");
  33. /*
  34. *创建一个表示HTML正文部分的MimeBodyPart对象,
  35. *并加入到上一语句创建的MimeMultiPart对象中,
  36. *由于HTML正文中包含中文,故下面应该指定字符集为gbk或gb2312
分享到:
评论

相关推荐

    MIME相关, MIME协议详解

    MIME最初是为了改进早期的简单邮件传输协议(SMTP),使邮件能够包含除纯文本之外的多种类型的数据。 在电子邮件系统中,MIME扮演着至关重要的角色。它通过将各种非文本内容编码为ASCII格式,使得这些内容能够在...

    MIME邮件扩充协议-rfc文档

    MIME 扩展了原始的简单邮件传输协议 (SMTP),使得除了纯文本之外,还可以传输图像、音频、视频以及各种应用程序生成的复杂文档。RFC(Request for Comments)文档是 Internet Engineering Task Force (IETF) 制定...

    MIME协议分析 MIME

    **MIME协议分析** MIME,全称“Multipurpose Internet Mail Extensions”,中文名为“多用途互联网邮件扩展”,是一种广泛...在理解了MIME的工作原理和结构后,我们可以更有效地处理和创建包含复杂内容的电子邮件。

    电子邮件MIME协议中的Base64编解码

    MIME协议中使用Base64编解码来表示二进制数据,如图片、音频、视频等。 4. Base64编解码的应用 Base64编解码的应用非常广泛,例如: * 在电子邮件中传输二进制数据 * 在HTTP协议中传输二进制数据 * 在XML和JSON...

    MIME协议(中文版).doc

    1. **多段邮件**:MIME协议允许在同一封邮件中发送多段内容,包括不同格式的文本、图片、音频等多种类型的数据。 2. **嵌入式资源**:MIME协议支持将图像等资源嵌入到邮件正文之中,增强了邮件的交互性和可读性。 3....

    MIME协议的简单介绍和分析.pdf

    传统的邮件用户代理可以使用S/MIME来加密发送邮件,并解密接收的加密邮件。S/MIME不仅限于邮件,也可以应用于任何支持MIME数据传输的协议,如HTTP。此外,S/MIME允许在混合传输系统中安全地交换消息,支持自动消息...

    使用JavaMail创建邮件和发送邮件

    MIME(多用途互联网邮件扩展)协议应运而生,它是对RFC822的一个扩展,允许邮件包含非ASCII字符的数据,如图片、音频、视频和各种文件附件。MIME邮件通过使用Content-Type头字段来指定数据类型,并用分隔线来区分...

    MIME 邮件格式分析类

    这个类帮助开发者跨越了MIME格式的复杂性,提供了一种简单的方式来处理和操作电子邮件,无论是读取还是创建。通过深入研究提供的测试用例和类的API,开发者可以有效地利用这个工具来满足项目需求。

    邮件协议(SMTP&POP3&MIME)详解

    电子邮件是我们日常沟通的重要工具,而SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol version 3)和MIME(Multipurpose Internet Mail Extensions)是电子邮件系统中的核心协议,它们各自负责...

    mime邮件-mime邮件头介绍

    1. **Mime-Version**: 这个字段指示MIME协议的版本,例如`Mime-Version: 1.0`表示使用的是MIME的第一个版本。 2. **Content-Type**: 这个字段定义了邮件内容的类型。在示例中,`Content-Type: multipart/mixed; ...

    MIME格式邮件面面观

    在MIME出现之前,使用RFC 822只能发送基本的ASCII码文本信息,邮件内容如果要包括二进制文件、声音和动画等,实现起来非常困难。MIME提供了一种可以在邮件中附加多种不同编码文件的方法。 MIME邮件的格式主要包括:...

    mime excel 实例(图片输出)

    在IT行业中,MIME(Multipurpose Internet Mail Extensions)是一种标准,用于定义电子邮件和其他网络数据的格式,以便在网络上发送多种类型的数据。在这个实例中,我们关注的是如何使用MIME格式来处理Excel文件,并...

    MIME-java.rar_java mime_javamime_mime_mime java_邮件 解析

    6. **解析MIME邮件**:使用JavaMail,你可以通过`InternetMessage`类来读取邮件,并使用`MIMEMultipart`和`MIMEBodyPart`来解析邮件的各个部分。首先,从邮件服务器获取`MimeMessage`,然后调用`getContent()`方法,...

    开发multipart与解析mime邮件等所用的jar包

    例如,你可以创建`MimeMessage`对象来表示一个邮件,然后使用`MimeBodyPart`来表示邮件的各个部分,包括文本、附件等。通过这种方式,开发者可以轻松地实现复杂的数据交互功能。 总之,`multipart`和`mime`邮件是...

    S/MIME邮件服务和PGP邮件服务(foxmail邮件服务、数字签名和加密)

    我们需要安装并配置PGP软件,创建密钥对,并在邮件用户之间交换密钥,同时对公钥进行校验,确保公钥的真实性。这样,用户便可以利用这些密钥对邮件进行加密和签名,确保只有拥有对应私钥的人才能解密邮件内容,实现...

    多用途互联网邮件扩展(MIME)

    MIME允许邮件头段使用多种字符编码,以适应不同的语言需求。通过使用Content-Type和Content-Transfer-Encoding头部字段,可以指定邮件内容的编码方式和类型,确保邮件在全球范围内正确解读。 #### 六、邮件附件 ...

Global site tag (gtag.js) - Google Analytics