`

创建内含附件、图文并茂的邮件

 
阅读更多
我们常常在邮件中添加附件,以达到传输较大文件的目的。而上一篇文章只是将本机的一张图片内嵌到邮件的 HTML 格式的正文当中,这样的邮件显得不够丰富多彩。我们想要一封正文部分图文并茂,而游客附带若干附件的邮件。

下面是代码结构中3个重要的方法:

MimeBodyPart createAttachment(String fileName) 方法用于创建附件并返回;

MimeBodyPart createContent(String body, String fileName) 方法用于创建正文部分并返回;

MimeMessage createMessage(Session session) 方法用于调用上面的两个方法生成邮件。

其实,创建一个内含附件的邮件与上一篇文章中创建正文中包含图片的邮件的原理,甚至代码都几乎相同。也就是使用 JAF 框架中的 FileDataSource 类和 DataHandler 类来获得给定路径的资源文件,JAF 框架中的这两个类共同协作可以获知文件所属的 MIME 类型,它们会正确地添加到邮件组织结构中的对应消息头中。

不同的是:

在 HTML 格式的正文中内含图片是使用 MimeBody.setContentID() 方法设置对应的资源文件的唯一标识符,即 MIME 协议对于邮件的结构组织格式中的 Content-ID 头字段;

而在 MIME 邮件中添加附件是使用 MimeBodyPart.setFileName() 方法来关联 FileSourceData 对象指向的资源文件。

程序代码:

这个不同点在下面代码中会用橙色背景强调指出,代码如下:

  1. importjava.io.FileOutputStream;
  2. importjava.util.Properties;
  3. importjavax.activation.DataHandler;
  4. importjavax.activation.FileDataSource;
  5. importjavax.mail.Message;
  6. importjavax.mail.Session;
  7. importjavax.mail.internet.InternetAddress;
  8. importjavax.mail.internet.MimeBodyPart;
  9. importjavax.mail.internet.MimeMessage;
  10. importjavax.mail.internet.MimeMultipart;
  11. /**
  12. *创建内含附件、图文并茂的邮件
  13. *@authorhaolloyin
  14. */
  15. publicclassWithAttachmentMessage{
  16. /**
  17. *根据传入的文件路径创建附件并返回
  18. */
  19. publicMimeBodyPartcreateAttachment(StringfileName)throwsException{
  20. MimeBodyPartattachmentPart=newMimeBodyPart();
  21. FileDataSourcefds=newFileDataSource(fileName);
  22. attachmentPart.setDataHandler(newDataHandler(fds));
  23. attachmentPart.setFileName(fds.getName());
  24. returnattachmentPart;
  25. }
  26. /**
  27. *根据传入的邮件正文body和文件路径创建图文并茂的正文部分
  28. */
  29. publicMimeBodyPartcreateContent(Stringbody,StringfileName)
  30. throwsException{
  31. //用于保存最终正文部分
  32. MimeBodyPartcontentBody=newMimeBodyPart();
  33. //用于组合文本和图片,"related"型的MimeMultipart对象
  34. MimeMultipartcontentMulti=newMimeMultipart("related");
  35. //正文的文本部分
  36. MimeBodyParttextBody=newMimeBodyPart();
  37. textBody.setContent(body,"text/html;charset=gbk");
  38. contentMulti.addBodyPart(textBody);
  39. //正文的图片部分
  40. MimeBodyPartjpgBody=newMimeBodyPart();
  41. FileDataSourcefds=newFileDataSource(fileName);
  42. jpgBody.setDataHandler(newDataHandler(fds));
  43. jpgBody.setContentID("logo_jpg");
  44. contentMulti.addBodyPart(jpgBody);
  45. //将上面"related"型的MimeMultipart对象作为邮件的正文
  46. contentBody.setContent(contentMulti);
  47. returncontentBody;
  48. }
  49. /**
  50. *根据传入的Seesion对象创建混合型的MIME消息
  51. */
  52. publicMimeMessagecreateMessage(Sessionsession)throwsException{
  53. Stringfrom=test_hao@163.com;
  54. Stringto="test_hao@sina.cn";
  55. Stringsubject="创建内含附件、图文并茂的邮件!";
  56. Stringbody="<h4>内含附件、图文并茂的邮件测试!!!</h4></br>"
  57. +"<ahref=http://haolloyin.blog.51cto.com/>蚂蚁</a></br>"
  58. +"<imgsrc=\"cid:logo_jpg\"></a>";
  59. MimeMessagemsg=newMimeMessage(session);
  60. msg.setFrom(newInternetAddress(from));
  61. msg.setRecipient(Message.RecipientType.TO,newInternetAddress(to));
  62. msg.setSubject(subject);
  63. //创建邮件的各个MimeBodyPart部分
  64. MimeBodyPartattachment01=createAttachment("F:\\java\\Snake.java");
  65. MimeBodyPartattachment02=createAttachment("F:\\java\\meng.mp3");
  66. MimeBodyPartcontent=createContent(body,"F:\\java\\logo.jpg");
  67. //将邮件中各个部分组合到一个"mixed"型的MimeMultipart对象
  68. MimeMultipartallPart=newMimeMultipart("mixed");
  69. allPart.addBodyPart(attachment01);
  70. allPart.addBodyPart(attachment02);
  71. allPart.addBodyPart(content);
  72. //将上面混合型的MimeMultipart对象作为邮件内容并保存
  73. msg.setContent(allPart);
  74. msg.saveChanges();
  75. returnmsg;
  76. }
  77. //测试生成邮件
  78. publicstaticvoidmain(String[]args)throwsException{
  79. WithAttachmentMessagemail=newWithAttachmentMessage();
  80. Sessionsession=Session.getDefaultInstance(newProperties());
  81. MimeMessagemessage=mail.createMessage(session);
  82. message.writeTo(newFileOutputStream("withAttachmentMail.eml"));
  83. }
  84. }

编译、运行生成 withAttachmentMail.eml 文件,双击打开,如下图:

withAttachmentMail01

看看上面用 Outlook 打开生成的文件,在附件栏里面就有一个 .java 源文件和一首 MP3 文件了。

打开邮件的原始内容:

查看生成的邮件的原始内容,点击“文件”、“属性”、“邮件来源”或者使用 EditPlus 、UltraEdit 等文本编辑器直接打开也行,下面是原始内容:

  1. From:test_hao@163.com
  2. To:test_hao@sina.cn
  3. Message-ID:<56667.2.1279677956578.JavaMail.Administrator@WWW-1477FF1578B>
  4. Subject:=?GBK?B?tLS9qMTauqy4vbz+oaLNvM7EsqLDr7XE08q8/qOh?=
  5. MIME-Version:1.0
  6. Content-Type:multipart/mixed;
  7. boundary="----=_Part_1_13249998.1279677956546"
  8. ------=_Part_1_13249998.1279677956546
  9. Content-Type:application/octet-stream;name=Snake.java
  10. Content-Transfer-Encoding:base64
  11. Content-Disposition:attachment;filename=Snake.java
  12. //省略被BASE64转码后的Snake.java附件内容
  13. ------=_Part_1_13249998.1279677956546
  14. Content-Type:application/octet-stream;name=meng.mp3
  15. Content-Transfer-Encoding:base64
  16. Content-Disposition:attachment;filename=meng.mp3
  17. //省略被BASE64转码后的meng.java附件内容
  18. ------=_Part_1_13249998.1279677956546
  19. Content-Type:multipart/related;
  20. boundary="----=_Part_0_3373112.1279677956546"
  21. ------=_Part_0_3373112.1279677956546
  22. Content-Type:text/html;charset=gbk
  23. Content-Transfer-Encoding:quoted-printable
  24. <h4>=C4=DA=BA=AC=B8=BD=BC=FE=A1=A2=CD=BC=CE=C4=B2=A2=C3=AF=B5=C4=D3=CA=BC=
  25. =FE=B2=E2=CA=D4=A3=A1=A3=A1=A3=A1</h4></br><ahref=3Dhttp://haolloyin.bl=
  26. og.51cto.com/>=C2=EC=D2=CF</a></br><imgsrc=3D"cid:logo_jpg"></a>
  27. ------=_Part_0_3373112.1279677956546
  28. Content-Type:image/jpeg
  29. Content-Transfer-Encoding:base64
  30. Content-ID:logo_jpg
  31. //省略被BASE64转码后的邮件正文部分内嵌的.jpg图片的内容
  32. ------=_Part_0_3373112.1279677956546--
  33. ------=_Part_1_13249998.1279677956546--

重要部分已经用背景颜色指出来了,有兴趣的可以深入了解一下 MIME 协议对邮件结构组织的规范格式。


分享到:
评论

相关推荐

    使用PowerDesigner创建数据库表图文并茂版

    使用PowerDesigner创建数据库表图文并茂版

    java实现邮件发送(三种发送方式都有)

    在JavaMail API中,可以使用`MimeBodyPart`类来创建包含附件的邮件部分。你需要创建一个`Multipart`对象,然后添加`MimeBodyPart`对象,其中一部分是邮件正文,另一部分是附件。每个`MimeBodyPart`都要指定对应的...

    邮件营销 益体网内部学习资料邮件地址收集图文并茂详解

    邮件营销 益体网内部学习资料邮件地址收集图文并茂详解 好几种方法哦

    VB6编程生成图文并茂的Word文档

    在VB6(Visual Basic 6)环境中,生成图文并茂的Word文档是一项常见的任务,尤其在数据报告、教学材料或企业文档中应用广泛。通过利用VB6的Microsoft Office Interop库,开发者可以创建、编辑和格式化Word文档,实现...

    JavaMail 已经完美封装,兼容常用邮箱

    MultipartRelatedMimeBodyPart part2 = new MultipartRelatedMimeBodyPart("内含附件、图文并茂的邮件测试!!!&lt;/h4&gt; &lt;/br&gt;"+ "&lt;a href = http://haolloyin.blog.51cto.com/&gt; 蚂蚁&lt;/a&gt;&lt;/br&gt;"+ ...

    图文并茂的教你如何创建模块和修改JS调用的内容

    根据给定的文件信息,我们将深入探讨如何在SupeSite平台中创建模块以及修改JavaScript(JS)调用来实现多级菜单的功能,同时也会讲解模块创建的详细步骤。 ### 如何在SupeSite中创建模块 #### 步骤一:确定模块...

    图文并茂焦点图代码.zip

    通过使用jQuery,开发者可以更容易地创建动态和交互性的网页效果。 焦点图的特性包括: 1. 左右按钮:用户可以通过点击左右箭头按钮来切换图片,提供直观的导航控制。 2. 图片文字描述:每张图片都可以附带文字描述...

    图文并茂教您配置Exchange Server 2003

    Exchange Server 2003 是微软的企业级电子邮件服务器软件,用于提供高效、安全的邮件通信。在安装完 Exchange Server 2003 后,为了使其正常运行并满足组织需求,需要进行一系列的配置步骤。以下是一些关键的配置...

    图文并茂ppt

    小学信息技术图文并茂课程讲义ppt,方便教师利用ppt来给学生讲解

    CButtonST图文并茂的按钮

    "CButtonST图文并茂的按钮"就是一个专注于提供增强视觉效果的库,它允许开发者轻松创建具有自定义文字、图片和样式效果的按钮。 CButtonST(CButton Style Tool)是一个第三方控件,它扩展了MFC(Microsoft ...

    图文并茂配置Exchange Server

    Exchange Server 2003 是微软提供的一款电子邮件服务器软件,用于组织内部的电子邮件通信和协作。在安装完Exchange Server 2003之后,需要进行一系列的配置步骤以确保其正常运行并满足组织的需求。以下是对配置过程...

    电子邮件》教学设计.docx

    利用多媒体教学设备,如PowerPoint课件,提供一个图文并茂的学习环境,使得学生能轻松掌握电子邮件操作技巧。此外,还需要准备联网的多媒体电子教室、素材库以及邮件管理软件如Foxmail,以供演示和实践。 **教学...

    绝好的图文并茂SSH框架总结文档

    绝好的图文并茂SSH框架总结文档,图文并茂!

    图文并茂教您配置Exchange Server 2003.

    Exchange Server 2003 是微软推出的一款企业级电子邮件服务器软件,它提供了强大的邮件处理、日程管理和协作功能。以下将详细解释配置Exchange Server 2003的关键步骤: 1. **打开 Exchange 系统管理器**:这是...

    小学信息技术五年级上册图文并茂幻灯片PPT教案.pptx

    信息处理基础作为信息技术课程的重要组成部分,让学生了解计算机软件的基本操作,如创建和编辑幻灯片,是尤为关键的。这份教案中的PPT教学,让学生们在实践中掌握打开和编辑文件的方法,并学会在PPT中插入和管理...

    网络知识教案 图文并茂

    网络知识教案 图文并茂 详细生动 绝对经典 不下后悔哦

    图文并茂VLAN全接触

    VLAN(Virtual Local Area Network,虚拟局域网)是一种网络技术,它允许在单个物理局域网(LAN)上创建多个逻辑上的独立网络。这些逻辑网络之间可以隔离数据流量,提高了网络的安全性和效率。本篇文章将深入探讨...

    毕业设计,基于ASP+ACCESS开发的公司网站,内含完整源代码,数据库,毕业论文

    毕业设计,基于ASP+ACCESS开发的公司网站,内含完整源代码,数据库,毕业论文 网站(Website)是指在因特网上,根据一定的规则,使用HTML等工具制作的用于展示特定内容的相关网页的集合。简单地说,网站是一种通讯...

    Linux系统学习必备-手把手教你图文并茂windows10安装VMware创建CentOS-7-x86-64运行linux系统

    免费下载啦~~本文以图文并茂的方式教你windows10安装VMware创建CentOS-7-x86_64运行linux系统

Global site tag (gtag.js) - Google Analytics