`

使用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 协议的数据格式也可以避免邮件内容在传输过程中发生信息丢失。MIME...

    MIME相关, MIME协议详解

    邮件协议, MIME基础级协议详解

    mime协议(详细)

    但是,由于图片和声音等内容是非ASCII码的二进制数据,而RFC822邮件格式只适合用来表达纯文本的邮件内容,所以,要使用 RFC822邮件格式发送这些非ASCII码的二进制数据时,必须先采用某种编码方式将它们“编码”成可...

    MIME协议分析 MIME

    MIME试图在不改变SMTP协议和RFC822(邮件格式标准)的基础上,使得邮件可以传送任意二进制文件。为此,它在这些协议之上,采取了一些 措施,这就是我们下面所要重点讲述的内容。 第2 章. MIME详解 2.1. 改进措施 一...

    MIME邮件扩充协议-rfc文档

    多用途网际邮件扩充协议(MIME)详细介绍

    MIME协议(中文版).doc

    但是,由于图片和声音等内容是非ASCII码的二进制数据,而RFC822邮件格式只适合用来表达纯文本的邮件内容,所以,要使用 RFC822邮件格式发送这些非ASCII码的二进制数据时,必须先采用某种编码方式将它们“编码”成可...

    mime邮件-mime邮件头介绍

    下例是一个邮件的标准MIME头: Mime-Version: 1.0 //版本号:1.0 Content-Type: multipart/mixed; boundary="IMA.Boundary.750407228" //内容类型是多种的 --IMA.Boundary.750407228 Content-Type: text/plain; ...

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

    电子邮件MIME协议中的Base64编解码 整份实验报告 有截图和代码

    mime4j-0.6邮件jar包

    mime4j-0.6邮件jar包

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

    该压缩包包含三个文档,分别是SMTP协议详解,POP3协议详解,MIME协议详解,文档中详细介绍了一个邮件发送和接收的过程分析,协议本身的包含的命令和工作过程,为开发邮件代理的客户端提供技术基础。

    java Email工具类

    该工具类可直接复制代码,进行调用 ... 对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。

    MIME邮件面面观-MIME编码

    MIME, 全称为“Multipurpose Internet Mail Extensions”, 比较确切的中文名称为“多用途互联网邮件扩展”。它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC 2045-2049 MIME编码的格式

    黑莓使用S/MIME发送邮件

    黑莓使用S/MIME发送邮件 详细记录 黑莓使用S/MIME发送邮件 详细记录

    smtp mime格式发送邮件可发附件

    首先需要连接邮件服务器 这里用socket 邮件服务器端口 25 //2.现在就是和服务器对话了 //3.结束 #include #include #include #include #include #include #include #include #include #include #include ...

    mime excel 实例(图片输出)

    采用asp.net开发 ,利用mime格式的 excel 实现图片打印的MIME示例文件,代码简单明了,其它语言也可以作参考。

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

    MIME协议的简单介绍和分析.pdf 学习资料 复习资料 教学资源

    MIME-java.rar_java mime_javamime_mime_mime java_邮件 解析

    MIME的java解析代码 用于开发邮件客户端

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

    数字签名和邮件加密 构建S/MIME邮件服务和PGP邮件服务 (Foxmail Server邮件服务器的架设) 经过查阅资料做了这个小实训,还请指教。

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

    多用途互联网邮件扩展(MIME)很详细。

    基于S/MIME协议的电子邮件安全研究与实现 (2004年)

    文中基于S/MIME协议,利用DES,RSA和SHA-1等一系列安全算法和安全认证方式,以C++为编程语言实现了一个能在Internet上安全传输电子邮件的邮件服务系统,确保电子邮件的完整性、保密性和不可否认性。

Global site tag (gtag.js) - Google Analytics