像上一篇文章那样,我们只能创建一封封只包含纯文本或者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 类一一对应,如下图:
好了,用代码来说明问题,实现一下,不管是否合适,我还是在代码中写上较多注释,其中有一些事必须注意的,代码如下:
-
-
-
-
-
public class WithPictureMessage {
-
public static void main(String[] args) throws Exception{
-
-
String from = "test_hao@sina.cn";
-
String to = "test_hao@163.com";
-
String subject = "创建一个内含图片的邮件!";
-
String body = "<h4>内含图片的邮件测试!!!</h4> " +
-
"<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a></br></br>" +
-
"<a href = http://haolloyin.blog.51cto.com/>" +
-
"<img src = \"cid:haolloyin_logo_jpg\"></a>";
-
-
-
-
-
-
-
-
Session session = Session.getDefaultInstance(new Properties());
-
-
-
MimeMessage msg = new MimeMessage(session);
-
msg.setFrom(new InternetAddress(from));
-
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
-
msg.setSubject(subject);
-
msg.setSentDate(new Date());
-
-
-
-
-
-
-
MimeMultipart multipart = new MimeMultipart("related");
-
-
-
-
-
-
-
MimeBodyPart htmlBodyPart = new MimeBodyPart();
-
htmlBodyPart.setContent(body, "text/html;charset=gbk");
-
multipart.addBodyPart(htmlBodyPart);
-
-
-
-
-
-
-
-
MimeBodyPart jpgBodyPart = new MimeBodyPart();
-
FileDataSource fds = new FileDataSource("F:\\java\\haolloyin_logo.jpg");
-
jpgBodyPart.setDataHandler(new DataHandler(fds));
-
jpgBodyPart.setContentID("haolloyin_logo_jpg");
-
-
multipart.addBodyPart(jpgBodyPart);
-
-
-
-
-
-
-
msg.setContent(multipart);
-
-
-
msg.saveChanges();
-
msg.writeTo(new FileOutputStream("withPictureMail.eml"));
-
}
-
}
编译、运行,生成 withPictureMail.eml 文件,双击打开,如下图:
在代码中的许多注释是比较重要的,必须要注意。此外,还可像上一篇文章中在 Outlook 中查看该 MIME 邮件的原始内容,其中应该既有 quoted-printable 编码也有 BASE64 编码方式,有兴趣的还可以看看各个消息头的格式是怎样的。
小结:
1、明白当 MIME 邮件需要附上多种格式(不仅仅是纯文本)的资源文件时,它是运用了层层嵌套的组合结构来表示、组织各个资源文件的;
2、在代码中的许多注释就是很重要的注意点了,必须掌握。
我的相关文章:
组合模式(Composite)的安全模式与透明模式
管道过滤器模式(Pipe and Filter)与组合模式(修改)
JavaMail入门:创建纯文本、HTML格式的邮件
本文出自 “蚂蚁” 博客,请务必保留此出处http://haolloyin.blog.51cto.com/1177454/353957
相关推荐
geronimo-javamail_1.4_spec-1.7.1.jar
JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API
综上所述,JavaMail API 为开发者提供了一个强大的工具箱,不仅能够轻松处理邮件的发送和接收,还能支持多种邮件协议。无论是构建简单的邮件应用还是复杂的邮件管理系统,JavaMail API 都是值得考虑的选择。
例如,使用MimeMessage类可以创建包含文本、图片、文件附件等复杂结构的邮件;使用Multipart类可以组合多种内容类型。 在“邮件发送系统主体源程序”中,我们可以期待看到如何设置Session,创建并填充Message,以及...
JavaMail 是一个开源的Java库,它为Java程序员提供了处理电子邮件的...通过学习和使用这些资源,开发者可以熟练掌握如何使用JavaMail和JAF来实现复杂的邮件操作,例如发送带附件的邮件、处理邮件事件、读取IMAP邮箱等。
不知道谁有这个jar的源码或者文档啊,希望能够分享一下:QQ:562387140
`javamail_jsp`则表明了如何在JSP页面中使用JavaMail。JSP是一种基于Java的服务器端脚本语言,用于生成动态网页内容。将JavaMail与JSP结合,可以让用户在网页上直接发送或接收邮件,例如,创建一个简单的web邮件系统...
JavaMail是一种在Java环境中发送和接收电子邮件的标准API,它提供了丰富的功能来处理复杂的邮件操作。在Struts2框架中集成JavaMail服务,可以方便地在Web应用中实现邮件的发送功能。下面我们将深入探讨JavaMail的...
除了基本的文本邮件,JavaMail还支持HTML邮件、附件、多部分消息(如同时包含文本和图片)以及使用MIME标准的复杂邮件结构。例如,通过`Multipart`对象可以添加多个内容部分,包括文本、图片、音频或任何其他类型的...
通过JavaMail,开发者可以轻松地实现SMTP(简单邮件传输协议)集成,从而发送邮件,或者使用IMAP(因特网消息访问协议)或POP3(邮局协议)接收邮件。 在JavaMail中,发送邮件主要涉及以下几个关键组件: 1. **...
在IT行业中,MIME(Multipurpose Internet Mail Extensions)是一种标准,它扩展了早期的电子邮件系统,使得能够发送和接收不仅仅是纯文本格式的邮件,还包括图片、音频、视频等各种类型的二进制数据。Java中的MIME...
总的来说,JavaMail API 是一个强大的工具,可以帮助开发者构建复杂的邮件处理应用,但理解邮件协议的基础知识对于有效利用API至关重要。通过掌握这些概念,开发者可以创建出适应各种邮件服务和用户需求的应用程序。
在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...
geronimo-javamail_1.4_provider-1.3.jar
在JavaMail中,创建和发送邮件涉及到对邮件标准的理解,如RFC882和MIME协议。 RFC882 是一个早期的定义电子邮件格式的文档,规定了邮件的基本结构,包括邮件头和邮件体。邮件头包含了诸如发件人(from)、收件人...
- JavaMail API提供了一系列接口和类,允许开发者通过SMTP(Simple Mail Transfer Protocol)协议发送邮件。 - 主要涉及的接口和类包括:`Session`(邮件会话)、`Message`(邮件对象)、`Transport`(传输服务)...
JavaMail 支持多种邮件协议,包括 SMTP(Simple Mail Transfer Protocol)用于发送邮件,POP3(Post Office Protocol version 3)和 IMAP(Internet Message Access Protocol)用于接收邮件。此外,它还支持 MIME...
使用 JavaMail 库可以轻松地在 Java 应用程序中发送电子邮件。JavaMail 是一个 Java API,用于在 Java 应用程序中发送和接收电子邮件。它提供了一个抽象层,允许开发者使用不同的电子邮件协议,例如 SMTP、POP3 和 ...
5. **javamail_mail 实用性** - 支持HTML格式的邮件内容,可以创建丰富的展示效果。 - 支持S/MIME(安全多用途互联网邮件扩展)和PGP(Pretty Good Privacy)加密,保障邮件安全。 - 可以处理邮件中的嵌入式图像...
本示例将介绍如何使用 JavaMail 实现发送邮件的功能。 首先,我们需要导入 JavaMail 相关的库。在 Maven 项目中,可以在 `pom.xml` 文件中添加以下依赖: ```xml <groupId>com.sun.mail</groupId> <artifactId>...