文档库 最新最全的文档下载
当前位置:文档库 › JavaMail常见问题

JavaMail常见问题

JavaMail常见问题
JavaMail常见问题

JavaMail常见问题

一般问题

?什么是 JavaMail API?

?我如何获得 JavaMail API 的实现?

?我如何发送反馈或评论?

?javax.activation 在哪里?

?JavaMail API 需要什么 JDK?

?从哪里能找到我喜欢的操作系统的 JavaMail 版本?

?JavaMail API 可以在浏览器中工作吗?

?我可以使用 JavaMail 来从 Web 邮件账户(比如 Yahoo 或 Hotmail)中阅读邮件吗?

?什么是 IMAP?

?什么是 SMTP?

?什么是 MIME?

?什么是 POP3?

?对 MAPI、NNTP、Lotus Notes 和其他服务提供程序的支持怎样?

?我如何在本地磁盘上存储邮件消息?

?我可以从哪里找到有关 Sun 协议提供程序的文档?

?JavaMail API 实现是否完全免费?我可以把它与我的产品一起发行吗?

?我可以获得 JavaMail API 实现的源代码吗?

?JavaMail 是否符合 Y2K?

?我的问题不在这里,我应该在哪里查找?

安装和配置

?我如何安装 JavaMail API 实现?

?JavaMail 是否包括所有必要的邮件服务器?

?从哪里可以获得必要的邮件服务器?

?我应该使用什么主机名、用户名或密码?

?我如何配置 JavaMail 通过代理服务器工作?

?如何在 Windows NT 中设置 CLASSPATH?

?当试图在 Linux 中运行程序时,得到了非常奇怪的错误消息,而且程序运行失败了。错误在哪里?

?在运行于 SecurityManager 下面的应用程序中,我如何使用 JavaMail;

我必须授予应用程序和 JavaMail 什么权限?

?如何配置 Web 服务器来运行 JavaMail 演示 servlet?

?当在 servlet 中使用 JavaMail 时,未找到任何的 JavaMail 类。我已经在服务器的 CLASSPATH 中添加了 mail.jar?

?我的 servlet 可以找到 JavaMail 类,但 JavaMail 抱怨它不能找到针对“smtp”或“imap”的服务提供程序或地址类型“rfc822”。

?在哪里可以找到 jws.jar?我已经安装了 Java Web Server 2.0,并试图运行 JavaMailServlet。README 文件指示我在 CLASSPATH 中添加

jws.jar。

编程

?从哪里可以学习有关 Internet 邮件的基础知识,它是我高效编写JavaMail 程序需要知道的?

?如何调试使用 JavaMail API 的应用程序?

?如何发送带有附件的消息?

?如何阅读带有附件的消息并保存附件?

?什么是“中断支持”(disconnected support)?

?如何使用 JavaMail API 来支持中断操作?

?我如何使用 JavaMail API 来发送安全的电子邮件?

?writeTo() 方法生成了消息文件,但消息中的一些行既不是数据的规范MIME 表示(即使用 CRLF 来结束行),又没有使用我的平台的规范行分隔符(例如 UNIX 上的“\n”)。如果我需要这些表示时,如何获得它们当中的任何一种表示?

?我可以使用 JavaMail API 来实现邮件服务器吗?

?我可以使用 JavaMail API 在我的邮件服务器上添加新的用户账户、删除用户账户或改变用户账户的密码吗?

?为什么 MimeMessage 类没有实现 Serializable,这样我就可以将消息序列化到磁盘,并在以后读回它?

?我如何编写服务提供程序?

?我在登录 Microsoft Exchange 服务器时碰到了麻烦,我确信正在使用的用户名和密码是正确的,我做错了什么?

?在发送二进制文件前,我如何编码它?当收到它时,我又如何解码它?

?如果我不需要自己编码和解码附件,我应该何时使用 MimeUtility 方法?

?尽管 JavaMail 完成了所有的编码和解码工作,但我仍需要手动控制一些主体部分的编码。

?为什么 JavaMail 没有在非 ASCII 字符集中正确编码和解码文件名?阅读邮件——IMAP

?我尝试在我的 IMAP 服务器上运行演示程序,但我得到了错误。

?当我提取带有较大附件的消息时,IMAP 提供程序似乎丢失了数据。

?IMAP 提供程序是否缓存检索的数据?

?我想在文件夹间移动消息。我应该使用 appendMessages() 或copyMessages() 吗?

?有时检索大消息主体似乎是低效的。

?当加载这种大二进制附件时,我得到了 OutOfMemory 错误。

?当在主体部分 (bodypart) 上调用 getContent() 时,我为什么会得到UnsupportedDataTypeException?

?当在包含文本数据的主体部分 (bodypart) 上调用 getContent() 时,为什么会得到 UnsupportedEncodingException?

发送邮件——SMTP

?我如何回复消息?

?我如何转发消息?

?我如何发送 HTML 邮件?

?我如何发送具有不同字体和颜色的格式化文本的邮件?

?我如何发送具有纯文本和 HTML 文本的邮件,让每个邮件的阅读者可以选择适合它的格式?

?我如何发送包含图像的 HTML 邮件?

?Transport 方法 send 和 sendMessage 之间有什么区别?

?我需要验证到 SMTP 服务器,因此我调用了 trans.connect(host, user, password),然后调用 trans.send(msg) 发送消息,但它却不能工作。

?我修改了一条消息,但标题却没有反映修改。

?我正在使用 sendMessage() 方法发送消息,但在消息中的文本前后却出现奇怪的一些行,并且我的附件也在消息体中出现。

?我为新消息的 Message-ID 标题设置了特定值。但当我发送这条消息时,却重写了那个标题。

?当发送创建的新消息时,为什么会得到

UnsupportedDataTypeException?

?当发送消息时,如何能够显式地设置 SMTP FROM: 属性?

?我想重复发送消息,并且每次发送给一组不同的收件人。但调用Transport.send(Message) 却导致每次都创建一个新的 Transport 会

话。在本例中,这是一个次优办法,我如何来解决它?

?当试图发送消息时,我得到了“MessagingExce ption: 501 HELO requires domain address”(MessagingException: 501 HELO 要求域地址)。

?如果将消息发送到错误的地址,为什么我会获得 SendFailedException 或 TransportEvent,指出地址是错误的?

?当消息不能被传送时,就会返回一个失败消息。我如何检测这些“回弹”

消息?

?当创建 InternetAddress 对象时,如果地址是非法的,为什么不会获得异常?

?当试图发送消息时,我为什么会获得 javax.mail.SendFailedException: 550 Unable to relay for 我的地址?

?当试图发送消息到(例如)Yahoo时,为什么我会获得一个错误,指出“连接被拒绝”?

?当发送邮件时,为什么会失败,并得到一个异常,异常中包括像“553 To send mail, first check your mail with a valid POP a ccount”(553 为发送邮件,首先检查邮件具有合法的 POP 账户)这样的消息?

POP3

?我可以从哪里找到 POP3 的支持?

?我想在 POP3 服务器上删除消息。我在这些消息上设置了 DELETED 标志。

然后调用 expunge() 方法,但我得到了MethodNotSupportedException。

当使用 Sun 的 POP3 提供程序时,我如何删除消息?

?在从 Sun POP3 提供程序获得的消息中,我如何可以检索 POP3 UIDL?

?对于 POP3,我如何知道哪里消息是新的?

?当使用 POP3 时,为什么 hasNewMessages() 总是返回 false?

?我创建了 MessageCountListener(如 monitor 程序中所展示的),但在我的 POP3 INBOX(收件箱)中,我从未得到通知。

?当使用 POP3 时,为什么 getReceivedDate() 返回 null?

?当使用 POP3 时,我得到了有关 SocketFetcher 类的抱怨。

?当使用 POP3 时,我得到了有关 contentStream 字段的抱怨。

?除了 POP3 服务器上的 INBOX(收件箱)外,您如何访问或创建文件夹?servlet 中的 JavaMail

?我可以在 servlet 中使用 JavaMail 吗?

applet 中的 JavaMail

?我可以在 applet 中使用 JavaMail 吗?

?在 applet 中,使用 JavaMail 的安全问题是什么?

?OK,可能我确实不想使用 applet,那我应该怎么做?

一般问题

问. 什么是 JavaMail API?

答:JavaMail API 是一组抽象的 API,它可用于构建邮件系统。API 提供了一个平台无关以及协议无关的框架,用于构建基于 Java 技术的电子邮件客户端应用程序。JavaMail API 提供了一些工具,用于阅读和发送电子邮件。服务提供程序实现了特定的一些协议。在 JavaMail API 软件包中,包括了几个服务提供程序;另外还有其他的一些服务提供程序可供使用。JavaMail API 是作为 Java 可选包实现的,它可用在 JDK 1.1.6 中,以后还可用在任何操作系统上。

JavaMail API 也是Java 2 Platform, Enterprise Edition (J2EE)中的必需部分。

问. 我如何获得 JavaMail API 的实现?

答: Sun 提供了无版权的参考实现(二进制形式),开发人员可以使用和发行。参考实现包括核心的 JavaMail 包和 IMAP、POP3 和 SMTP 服务提供程序。

问. 我如何发送反馈或评论?

答:发送电子邮件到javamail@https://www.wendangku.net/doc/556490169.html,。也可以考虑加入我们的低容量通告邮件列表 (low-volume announce mailing list)

javamail-announce@https://www.wendangku.net/doc/556490169.html,。在我们的 Web 页

https://www.wendangku.net/doc/556490169.html,/products/javamail中有关于如何加入的说明。

问. javax.activation 在哪里?

答: javax.activation 是 JavaBeans Activation Framework (JAF) 的一部分。JAF 是 JavaBeans "Glasgow" 规范的一部分(参见

https://www.wendangku.net/doc/556490169.html,/beans/glasgow/jaf.html)。JavaMail API 将 JAF 用于数据内容处理。

问. JavaMail API 需要什么 JDK?

答:JavaMail API 要求 JDK/JRE 1.1.x 或更高版本。我们已经在 Sun Microsystems JDK 1.1.6 至 JDK 1.1.7 上测试过这个实现,而这些 JDK 运行于 Solaris SPARC、Microsoft Windows 95/NT 和 RedHat Linux 4.2。我们也已经在Java 2 SDK, Standard Edition (J2SE SDK)版本 1.2、1.3 和 1.4 上做过测试,而这些 JDK 运行于 Solaris SPARC。JavaMail API 是 Java 的可选包,它们不是核心 J2SE 的一部分,但在 J2EE 中却包括了它。参见

https://www.wendangku.net/doc/556490169.html,/j2se,获取关于 JDK 1.1 和 J2SE 的进一步信息。

问. 从哪里能找到我喜欢的操作系统的 JavaMail 版本?

答:JavaMail 是完全用 Java 编写的,并将运行在特定的操作系统上,该操作系统支持所需版本的 JDK。对于不同的操作系统,不需要任何特殊的版本。

问. JavaMail API 可以在浏览器中工作吗?

答:在 Netscape 和 Internet Explorer 中,我们已经成功运行过 JavaMail 1.3。

问. 我可以使用 JavaMail 来从 Web 邮件账户(比如 Yahoo 或 Hotmail)中阅读邮件吗?

答:不一定。许多基于 Web 的电子邮件服务只提供在浏览器中用 HTTP 进行访问。这些服务不能使用 JavaMail 来访问。如果服务也提供 POP3 或 IMAP 访问,可能不可以使用 JavaMail 来访问它。联系你的 Web 电子邮件服务提供商,获取更详细的信息。也可参阅JHTTPMail 项目,获得 JavaMail 的开放源代码提供程序,它提供了对 Hotmail 的访问。另一个有用的工具是 MrPostman——提供到 Hotmail 和 Yahoo! Mail 的 POP3 访问的代理服务器,这个工具可从如下站点获得:https://www.wendangku.net/doc/556490169.html,/mrpostman/。

问. 什么是 IMAP?

答:IMAP 是 Internet 消息访问协议 (Internet Message Access Protocol)。它是访问电子邮件消息的一种方法,而这些消息存储在(可能是共享的)邮件服务器上。换句话说,它允许“客户端”电子邮件程序访问远程的消息存储,并且在访问时,就像它们就在本地一样。IMAP 由RFC2060定义。有关进一步信息,请参阅https://www.wendangku.net/doc/556490169.html,/。

问. 什么是 SMTP?

答:SMTP 就是简单邮件传输协议 (Simple Mail Transfer Protocol)。它可用于不同邮件主机间 RFC822 样式的消息的传输,以及用于将新消息提交给一台主机,然后由它来传送该消息。SMTP 在广泛使用中(起源于 1982 年),并由RFC821定义。

问. 什么是 MIME?

答:MIME 和RFC822是一些标准,它们用于描述电子邮件消息,而这些消息是跨 Internet 进行发送的。javax.mail.internet 子包(它是 JavaMail API 的一部分)提供了这两个包的完整实现。MIME 是由下述 RFC 指定的:RFC2045、RFC2046和RFC2047。

问. 什么是 POP3?

答:POP3 是邮局协议 (Post Office Protocol V3)。POP3 是一个非常有限的协议,用于访问单个邮箱。它在功能上比 IMAP 差了许多。POP3 应用非常广泛,并由RFC1939定义。

问. 对 MAPI、NNTP、Lotus Notes 和其他服务提供程序的支持怎样?

答:目前我们还没有计划实现这些提供程序中的任何一个。不过,JavaMail API 的体系结构提供一些功能,可以容易地插入第三方服务提供程序。我们的希望是第三方将通过编写针对其他标准和专有协议的提供程序来包括 JavaMail API。参阅第三方产品页面,获取这些提供程序的最新列表。

问. 我如何在本地磁盘上存储邮件消息?

答:“本地存储提供程序”可用于将邮件消息存储在本地磁盘中。JavaMail API 不包括这一提供程序,但有几个提供程序可从第三方获得,它们针对不同的本地存储格式,比如 MH 和 Mbox。参阅我们的第三方产品页面,获取这些提供程序的最新列表。

问. 我可以从哪里找到有关 Sun 协议提供程序的文档?

答:针对 IMAP、POP3 和 SMTP 的 Sun 协议提供程序支持许多特性,它们不是JavaMail API 规范的一部分。在 JavaMail 1.3 下载包中包括了这些协议提供程序的文档,这些文档是以 javadoc 格式包括的,并位于 docs/javadocs 目录。针对每个协议提供程序包的包级文档描述了一些属性,这些属性由协议提供程序支持。此外,协议提供程序包括了一些类和方法,应用程序可以使用它们来利用特定于提供程序的特性。注意,这些属性、类和方法的使用使得程序不可移植;它可能只与 Sun 的 JavaMail API 实现一起工作。

问. JavaMail API 实现是否完全免费?我可以把它与我的产品一起发行吗?答:可以。当前版本的 JavaMail API 实现是完全免费的,你可以在产品中包括它。这一版本也包括 IMAP、POP3 和 SMTP 提供程序。请一定阅读许可,并保证理解它。JavaBeans Activation Framework 也是在类似的许可下免费使用的。

问. 我可以获得 JavaMail API 实现的源代码吗?

答:在SCSL许可下,现在 JavaMail API 参考实现源代码可作为J2EE的一部分获得。可从这里下载它。

问. JavaMail 是否符合 Y2K?

答:是的。 Sun 的 JavaMail 实现是符合 Option-3 Y2K 的。请参看 JavaMail 包中的 NOTES.txt 文件,获取进一步信息。

问. 我的问题不在这里,我应该在哪里查找?

答:除 JavaMail API 规范和 javadocs 外(可从我们的 Web 主页获得并且是包括在下载包中的),不要忘记查阅 JavaMail API 包中包括的 README.txt 和 NOTES.txt 文件,获取其他的重要信息。

javamail-interest mailing list 是另一个信息来源。参阅我们的 Web 主页,获取有关如何订阅的说明以及指向文档的链接。

Java Developer Connection 维护 JavaMail 论坛,请参阅

https://www.wendangku.net/doc/556490169.html,。注意,JavaMail 团队管理 javamail-interest 邮件列表,但不管理 JavaMail 论坛。

jGuru 也维护 JavaMail FAQ,可在如下地址找到它:

https://www.wendangku.net/doc/556490169.html,/faq/JavaMail。

安装和配置

问. 我如何安装 JavaMail API 实现?

答:解压缩分发的 zip 文件,并编辑 CLASSPATH 环境变量以包含 mail.jar 文件,该文件包括在 JavaMail API 分发中。你也需要 JavaBeans Activation Framework(参见下面)的实现。参阅 README 文件(在分发中),获得其他细节和例子。

问. JavaMail 是否包括所有必要的邮件服务器?

答:不是,JavaMail API 包不包括任何邮件服务器。为了使用 JavaMail API 包,你将需要访问 IMAP 或 POP3 邮件服务器(用于阅读邮件)和/或 SMTP 邮件服务器(用于发送邮件)。这些邮件服务器通常由 Internet 服务提供商提供,或者作为组织网络基础结构的一部分。如果你不必访问这样的邮件服务器,请往下看。

问. 从哪里可以获得必要的邮件服务器?

答:Sun Java System Messaging Server可用于 Solaris 和 Windows 平台。华盛顿大学的 IMAP 服务器支持多种平台(UNIX、32 位 Windows 等)。可从如下地址获取源代码:ftp://https://www.wendangku.net/doc/556490169.html,/imap/imap.tar.Z。其他的许多供应商提供了支持 Internet 标准的邮件服务器。可以从IMAP Connection和Internet Mail Consortium获得更多信息。

问. 我应该使用什么主机名、用户名或密码?

答:我们不提供邮件服务器让你使用。你必须使用自己的邮件服务器,或者使用Internet 服务提供商或你所工作的公司提供的邮件服务器。网络管理员可能给你一些必要的信息用于配置 JavaMail,以便同邮件服务器一起工作。

问. 我如何配置 JavaMail 通过代理服务器工作?

答:大多数代理服务器只支持 HTTP 协议。JavaMail 没有使用 HTTP 协议来阅读或发送邮件。使用代理服务器的一个主要原因是为了允许企业网络中的 HTTP 请求通过企业防火墙。防火墙通常会阻止对 Internet 的大多数访问,但允许来自代理服务器的请求通过。此外,企业网络内部的邮件服务器将为邮件执行类似的功能,通过 SMTP 接收消息,然后将它们转发到 Internet 上的最终目的地,以及接收传入的消息,然后将它们发送到合适的内部邮件服务器。

如果你的代理服务器支持 SOCKS V4 或 V5 协议

(https://www.wendangku.net/doc/556490169.html,/aboutsocks.html, RFC1928),并允许匿名连接,可以告诉 Java 运行时把所有的 TCP socket 直接连接到 SOCKS 服务器。参阅https://www.wendangku.net/doc/556490169.html,/j2se/1.4/docs/guide/net/properties.html,获取socksProxyHost 和 socksProxyPort 属性的最新文档。这些是系统级属性,而不是 JavaMail 会话属性。当调用应用程序时,它们可以从命令行中设置,例如:java -DsocksProxyHost=myproxy ...。这个工具可用于指出从 JavaMail 到SOCKS 代理服务器进行 SMTP、IMAP 和 POP3 通信。注意,设置这些属性将告诉所有 TCP socket 连接到 SOCKS 代理,在应用程序的其他方面上,这可能会带来负面影响。

假如没有这样的 SOCKS 服务器,如果想使用 JavaMail 来直接访问防火墙外部的邮件服务器,那将需要配置防火墙来允许这一访问。一个简单的 HTTP 代理Web 服务器是足够的。

问. 如何在 Windows NT 中设置 CLASSPATH?

答:详细说明可从这里获得。

问. 当试图在 Linux 中运行程序时,得到了非常奇怪的错误消息,而且程序运行失败了。错误在哪里?

答:通常,错误消息看起来像下面这样:

JavaMail 下载包时,unzip 命令破坏了 mail.jar 文件。获取更新版本的 unzip 命令或使用 JDK 的 jar 命令来解压缩下载包。

问. 在运行于 SecurityManager 下面的应用程序中,我如何使用 JavaMail;我必须授予应用程序和 JavaMail 什么权限?

答:在具有 SecurityManager 的 JDK 1.2(或更新版本)中,当使用 JavaMail 时,JavaMail 读取 mail.jar 文件中的配置文件有时会失败。在从

activation.jar 文件中读取配置文件时,JavaBeans Activation Framework 可能也有相同的问题。这些默认配置文件是作为“资源”文件存储的,并且存储在jar 文件的 META-INF 目录中。

有许多调试技术可用于决定这是否是个问题。设置 Session 属性

“mail.debug”为 true(或调用 session.setDebug(true)),将导致 JavaMail 在试图加载各个配置文件时打印调试消息。形如“DEBUG: can't load default providers file”(DEBUG: 不能加载默认提供程序文件)的消息指出这个问题可能存在。同样,设置 System 属性“javax.activation.debug”为“true”(例如,通过使用 "java -Djavax.activation.debug=true ..." 来运行程序),将导致 JAF 在试图加载各个资源文件时打印调试消息。最后,通过设置 system 属性“java.security.debug” 为“access:failure”(例如,通过使用“java -Djava.security.debug=access:failure ...”来运行程序),JDK 可以产生有用的调试输出。

除了读取配置文件的必要权限外,应用程序(和 JavaMail)也将需要一定的权限才可以连接到它使用的邮件服务器。如果应用程序使用 System 属性来配置JavaMail(例如,像许多 JavaMail 演示程序所做的那样,通过传递从System.getProperties() 中返回的 Properties 对象到 Session 构造函数),它也将需要一定的权限才可以使用 System Properties 对象。另外,应用程序可以使用自己的 Properties 对象,以及确信设置 "mail.from" 属性或"https://www.wendangku.net/doc/556490169.html,er" 和 "mail.host" 属性(参见 InternetAddress.getLocalAddress() 方法)。

在 JDK 1.2 SecurityManager 中,为了使应用程序能够使用 JavaMail,应用程序、JavaMail 和 JAF 将需要某些权限,比如下面的一些权限(一定要使用适当的值替换主机名和路径名);把这些权限添加到应用程序使用的安全策略文件中。

问. 如何配置 Web 服务器来运行 JavaMail 演示 servlet?

答:针对以下 Web 服务器的指导说明可从这里获得:

?Tomcat

?Apache with JServ

?iPlanet Web Server

?Java Web Server

问. 当在 servlet 中使用 JavaMail 时,未找到任何的 JavaMail 类。我已经在服务器的 CLASSPATH 中添加了 mail.jar?

答:当改变 CLASSPATH 时,通常有必要完全重启 Web 服务器。

问. 我的 servlet 可以找到 JavaMail 类,但 JavaMail 抱怨它不能找到针对“smtp”或“imap”的服务提供程序或地址类型“rfc822”。

答:通常这是因为 JavaMail 无法访问 mail.jar 中的配置文件,而这可能是由于安全权限问题造成的;参见本条目,获取更多的细节。也保证你没有提取mail.jar 内容;在服务器的 CLASSPATH 中,应该包括未更改的 mail.jar 文件。

问. 在哪里可以找到 jws.jar?我已经安装了 Java Web Server 2.0,并试图运行 JavaMailServlet。README 文件指示我在 CLASSPATH 中添加 jws.jar。答:jws.jar 不再与 Java Web Server 一起发行(在以前版本中,它们是一起发行的),因此不需要在 CLASSPATH 中添加它。只要在 CLASSPATH 中添加mail.jar 和 activation.jar,然后重启 Java Web Server。

编程

问. 从哪里可以学习有关 Internet 邮件的基础知识,它是我高效编写JavaMail 程序需要知道的?

答:参见我们的 Web 页中提及的参考图书中的一本,获得有关 Internet 电子邮件、MIME、SMTP、IMAP 和 POP3 等的背景信息。

问. 如何调试使用 JavaMail API 的应用程序?

答:可通过在代码中调用 Session 对象上的 setDebug(true) 方法来打开调试模式。这将造成在控制台中打印调试消息,包括协议跟踪信息。如果您认为在JavaMail 中发现了 bug,就将这个跟踪及以下信息发送给我们:重生成问题的测试用例、使用的平台、使用的 JDK 的版本和使用的邮件服务器 (IMAP, SMTP) 的名称和版本。

问. 如何发送带有附件的消息?

答:带有附件的消息采用 MIME 多部分消息来表示,其中第一部分是消息的主体,其他的部分是附件。有大量的例子,它们展示了如何在演示程序中构建这种消息,JavaMail 下载包包含了这些演示程序。

问. 如何阅读带有附件的消息并保存附件?

答:如前面描述,在 MIME 中,带有附件的消息是作为多部分消息表示的。在简单的例子中,Message 对象的 getContent 方法的结果将是一个 MimeMultipart 对象。多部分对象的第一个主体部分将是消息的主文本。其他的主体部分将是附件。msgshow.java 演示程序展示了如何在消息中遍历所有的多部分对象,并提取各个主体部分数据。getDisposition 方法将给你一个提示,指出主体部分是否应该内嵌显示,或者应该将其考虑成附件(但请注意,不是所有的发件人都提供这一信息)。

为了将主体部分中的数据保存到文件(比如),请使用 getInputStream 方法来访问附件内容,并将数据复制到 FileOutputStream。

注意,也有一些更复杂的情形也要处理。例如,一些发件人把主体作为纯文本和html 发送。通常,这将作为 multipart/alternative 内容(和 MimeMultipart 对象)出现在简单的文本主体部分的位置中。经过数字签名或加密的消息甚至会更复杂。处理所有的这些情形可能具有挑战性。请参考各种 MIME 规范和我们主页上列出的其他参考资料。

问. 什么是“中断支持”(disconnected support)?

答:支持中断操作的邮件客户端将允许用户访问远程消息存储(比如 IMAP)中消息,缓存这些消息中的一些消息的(部分)到本地,然后断开到服务器的连接。当处在断开连接状态中,邮件客户端可以访问已经缓存的消息,可能也可以删除它们或将它们保存到其他文件夹。当邮件客户端下一次连接到远程消息存储时,本地所做变更会与远程存储同步。同样,中断支持可以允许客户端在断开与服务

器连接时“发送”消息,在到服务器的连接可用前,消息会进行排队。也请参阅RFC1733。

问. 如何使用 JavaMail API 来支持中断操作?

答:JavaMail API 规范定义了一些接口,邮件客户端可以使用这些接口来支持中断操作。我们的 IMAP 提供程序实现了这些接口(UIDFolder 接口)。

问. 我如何使用 JavaMail API 来发送安全的电子邮件?

答:JavaMail API 目前不支持发送或接收安全电子邮件。JavaMail API 的体系结构使得可以在以后很容易地添加这一支持,我们可以添加支持,第三方也可以添加支持。有关当前电子邮件安全标准(S/MIME 和 PGP)的信息,可以从如下站点找到:https://www.wendangku.net/doc/556490169.html,/smime-pgpmime.html。请浏览我们的第三方产品页,获取来自其他供应商的解决方案。

问. writeTo() 方法生成了消息文件,但消息中的一些行既不是数据的规范MIME 表示(即使用 CRLF 来结束行),又没有使用我的平台的规范行分隔符(例如 UNIX 上的“\n”)。如果我需要这些表示时,如何获得它们当中的任何一种表示?

答:不管是哪种情形,你都将需要创建合适的 FilterOutputStream 对象来传递给 writeTo()。FilterOutputStream 将需要接受特定的一些行,它们具有任何常见终止符,然后写出另外的一些特定行,它们只具有期望的行终止符。下面是这种过滤器的一些例子。NewlineOutputStream转换到本地平台的行终止符,当将消息写到文件时,它是有用的。CRLFOutputStream转换到 MIME 规范 CRLF 终止符,当需要规范 MIME 格式时(比如计算数字签名),它是有用的。

问. 我可以使用 JavaMail API 来实现邮件服务器吗?

答:JavaMail API 设计目的不是帮你实现邮件服务器。但是,对你来说,一些实用工具类,比如 MIME 消息解析类,可能是有用的。通常您会发现,JavaMail API 是在“简单”而不是在“强有力”方面出错。对于邮件客户端,那是合适的,但对于邮件服务器,结果可能是不同的。

问. 我可以使用 JavaMail API 在我的邮件服务器上添加新的用户账户、删除用户账户或改变用户账户的密码吗?

答:JavaMail API 不包括任何工具,用于添加、删除或修改用户账户。在这一方面是没有标准的,每个邮件服务器对它的处理是不同的。

问. 为什么 MimeMessage 类没有实现 Serializable,这样我就可以将消息序列化到磁盘,并在以后读回它?

答:JavaMail API 是在现有电子邮件系统上面设计的,并使用了现有的消息格式。对于这样的一些实现,使用 Java 序列化能力既不是必要的,也不是有用的,因此,不能将它作为 JavaMail API 的目标来考虑。

有关序列化 Message 的困难部分是保留某些指针,它们指向 Folder(文件夹)、Store(存储)和 Session(会话)。如果只想保存消息的内容,而不是对象本身,消息的 writeTo 方法将为你完成这一切。如果想根据序列化消息创建整个

电子邮件系统,您应该能够编写 Message 等的子类,并在子类中实现Serializable。

如果想序列化自己的引用了 MimeMessages的其他对象,那么你的对象的writeObject 方法可以使用 MimeMessage 的 writeTo 方法,对象的readObject 方法可以使用 MimeMessage 构造函数,该构造函数会得到InputStream。在构造 MimeMessage 时,你的类将需要提供一个 Session。

问. 我如何编写服务提供程序?

答:请阅读服务提供程序文档,获取一些细节信息。通常,如果想编写 Store 提供程序,那就编写 javax.mail.Store 和 javax.mail.Folder的子类,也可能要编写 javax.mail.Message 及其他一些类的子类。对于 Transport 提供程序,编写 javax.mail.Transport 的子类,也可能需要编写 javax.mail.Message 及其他的一些类的子类。然后在 javamail.providers 注册表中,添加描述提供程序的条目。如果对编写特别的服务提供程序感兴趣,并且它所针对的协议或邮件系统目前没有得到 JavaMail API 实现的支持,请通过javamail@https://www.wendangku.net/doc/556490169.html,联系我们。

问. 我在登录 Microsoft Exchange 服务器时碰到了麻烦,我确信正在使用的用户名和密码是正确的,我做错了什么?

答:当登录 Exchange 时,需要使用比简单登录名更多的用户名。例如,如果你的电子邮件地址是“https://www.wendangku.net/doc/556490169.html,er@https://www.wendangku.net/doc/556490169.html,”,Windows NT 登录名是“juser”,NT 域名是“dom”,而且 Exahange 邮箱名是“Joe User”,那么在使用JavaMail 登录时,你将需要使用用户名“dom\juser\https://www.wendangku.net/doc/556490169.html,er”。

问. 在发送二进制文件前,我如何编码它?当收到它时,我又如何解码它?答:你不必这样的做!JavaMail 将自动决定合适的编码用于消息部分,然后才发送消息。而且当读取它们时,将自动解码消息部分。getInputStream 方法将返回解码数据。

问. 如果我不需要自己编码和解码附件,我应该何时使用 MimeUtility 方法?答:在 JavaMail 没有自动处理的情况下,MimeUtility 方法是有用的。经常发生的这样的一种情形是文件名的编码。基本的 MIME spec(规范)不允许按某种方式编码标题参数值(比如文件名参数),该方式与(比如)编码 Subject(主题)标题相同。这限制了参数值,从而限制了文件名到 ASCII。但一些发件人却实际使用 MIME 文本编码来做非 ASCII 文件名的编码工作。想与这种非标准发件人互操作的应用程序可以使用 encodeText 方法来编码文件名,然后调用MimeBodyPartsetFileName 方法,而且可以使用 decodeText 方法来解码返回的文件名。

问. 尽管 JavaMail 完成了所有的编码和解码工作,但我仍需要手动控制一些主体部分的编码。

答:在少数的场合需要控制编码,这里有几个方法来重写 JavaMail 的默认行为。下面是一个简单的方法。在创建整个消息后,调用 msg.saveChanges(),然后使

用像 mbp.setHeader("Content-Transfer-Encoding", "base64") 的语句来强制对指定主体部分做 base64 编码。

另一种办法是编写 MimeBodyPart 的子类,并重写 updateHeaders 方法,让它首先调用 super.updateHeaders(),然后像上面那样设置

Content-Transfer-Encoding 标题。

问. 为什么 JavaMail 没有在非 ASCII 字符集中正确编码和解码文件名?

答:文件名是作为参数存储在 MIME 标题中的。形如

=?ISO-8859-15?B?5OTkLUluZm8ucGRm?= 的编码文件名不是 MIME spec(规范)的一部分。形如 =?A?B?C?= 的文件名是一个完全有效的文件名,而不是一个不正确编码的文件名。JavaMail 没有编码和解码文件名,因为这样做会违反 MIME 规范。

基本的 MIME 规范不允许编码参数。RFC 2231 定义了一种新的方式,使得可以在 MIME 标题中包括编码参数,包括文件名。它与下面的事实方式不兼容:许多应用程序非法编码文件名。支持 RFC 2231 将不允许 JavaMail 与这些现有的程序互操作。据我所知,很少现有的程序支持 RFC 2231。

如果你选择违反 MIME 规范是为了与其他也违反了 MIME的程序互操作,那么JavaMail 会给您所有需要的工具来完成这件事。

编码文件名的解决方法是简单的:

mbp.setFileName(MimeUtility.encodeText(filename));

解码文件名的解决方法同样简单:

String filename = MimeUtility.decodeText(part.getFileName());

阅读邮件——IMAP

问. 我尝试在 IMAP 服务器上运行演示程序,但我得到了错误。

答:首先检查在 IMAP 服务器上确实有一个电子邮件账户。与系统管理员协商有关它的事情。通过在代码中调用 session 对象上的 setDebug(true) 方法来打开调试模式。这将造成在屏幕上转储 IMAP 协议跟踪。把这个跟踪发送给我们。对于说明问题,这个跟踪是非常有用的。如果可以的话,请将有关你的 IMAP 服务器的供应商信息发送给我们。

问. 当我提取带有较大附件的消息时,IMAP 提供程序似乎丢失了数据。

答:这是由于在 IMAP 服务器的部分提取实现中有 bug。为了解决这个服务器bug,请将“mail.imap.partialfetch”属性设置为 false。参考 JavaMail 包的 NOTES.txt,获取进一步信息。

问. IMAP 提供程序是否缓存检索的数据?

答:只有在必要的时候,IMAP 提供程序才从服务器上提取消息的数据(javax.mail.FetchProfile 可用于优化这一点)。一旦提取了标题和bodystructure(主体结构)信息,它就总是缓存在 Message 对象中。不过,没有缓存bodypart(主体部分)的内容。因此每次客户端请求内容时(使用getContent() 或使用 getInputStream()),就会向服务器发出一个新的 FETCH 请求。这是由于消息的内容可能比较大,因此如果缓存了大量消息的这些内容,就可能导致系统很快用完内存,因为垃圾收集器不能释放被引用的对象。客户端应该注意到这一点,而且如果需要的话,自己维持检索的内容。

问. 我想在文件夹间移动消息。我应该使用 appendMessages() 或copyMessages() 吗?

答:在下面的这种情况下,使用 copyMessages()——要复制或移动的消息属于某个文件夹,而该方法就是在这个文件夹中被调用的。这是因为一些实现可以优化这个操作,前提是源和目标文件夹属于相同的后端 Store(存储)。否则使用appendMessages()。

问. 有时检索大消息主体似乎是低效的。

答:如果你正在使用 Sun IMAP 提供程序,就可以试着增加

mail.imap.fetchsize 属性(当前默认值是 16K)。这将导致从服务器提取的数据是一些较大的块区。注意,当你这样做时,要冒这样的危险——JVM 可能用完内存。

问. 当加载这种大二进制附件时,我得到了 OutOfMemory 错误。

答:在启动时增大最大 JVM 堆大小。如果使用来自 Sun 的标准 JVM,那就使用“-mx”选项。不要保持不使用消息“内容”的引用。在某些情形下,可以尽量将消息内容作为原始字节进行流转化(使用 getInputStream()),使用它们,然后丢弃已使用的数据块区。

问. 当在主体部分 (bodypart) 上调用 getContent() 时,我为什么会得到UnsupportedDataTypeException?

答:getContent() 方法返回一个 Java 对象,它代表 bodypart(主体部分)内容。为了让它工作,必须注册对应内容的 MIME 类型的 JAF DataContentHandler。否则将引发 UnsupportedDataTypeException。在这种情形下,可以使用 getInputStream() 方法来将内容作为字节流检索。参阅 JAF 文档,获取有关如何创建和注册自己的 DataContentHandlers 的细节。

问. 当在包含文本数据的主体部分 (bodypart) 上调用 getContent() 时,为什么会得到 UnsupportedEncodingException?

答:当使用 getContent() 时,文本主体部分(例如主类型是“text”的主体部分)返回 Unicode 字符串对象。通常,这些主体部分内部用某些非 Unicode 字符集保持文本数据。JavaMail(通过 "text/plain" DataContentHandler)试着将那些数据转换成 Unicode 字符串。基础 JDK 的字符集可用于做这种工作。如果 JDK 不支持特别的字符集,那么就引发 UnsupportedEncodingException。在

这种情况下,可以使用 getInputStream() 方法来将内容作为字节流检索。下面是一个例子:

发送邮件——SMTP

问. 我如何回复消息?

答:为了回复消息,请使用 Message 对象上的 reply 方法。这个方法将返回一个新的对象,对象中的标题已经针对回复做了恰当设置。你将需要自己提供消息的内容。

问. 我如何转发消息?

答:用于转发消息的方法取决于你要怎样表示要转发的消息。简单的办法是创建一个新的 MimeMessage,并适当地为它提供地址,然后将现有的消息作为附件放在新消息中。为了将原始消息放在新消息中,比如可以使用下面的代码:

但是如果你想创建新的消息,并在新消息中包括原始消息的文本,可能也要用 "> " 来缩进,那将需要提取原始消息主体中的数据,并进行相应的处理。你可能也想取得原始消息的其他附件,并将它们添加到新消息中。

问. 我如何发送 HTML 邮件?

答:在分发中包括了大量演示程序,它们展示了如何发送 HTML 邮件。如果想发送简单消息,它具有 HTML 而不是纯文本,那请参见 demo(演示)目录中的sendhtml.java 程序。如果想将 HTML 文件作为附件发送,请参见

sendfile.java 示例,它展示了如何将任何文件作为附件发送。

问. 我如何发送具有不同字体和颜色的格式化文本的邮件?

答:最简单的办法是使用 HTML 文本发送消息。参见上面。

问. 我如何发送具有纯文本和 HTML 文本的邮件,让每个邮件的阅读者可以选择适合它的格式?

答:你想要发送 MIME multipart/alternative 消息。你构造了这样的一条消息,构造方式基本上与构造 multipart/mixed 消息相同,它使用了 MimeMultipart 对象,而该对象又是使用 new MimeMultipart("alternative") 来构造的。然后在 multipart(多部分)中,把 text/plain 主体部分作为第一部分插入,并且把 text/html 作为第二部分插入。参阅RFC2046,获取这一消息的结构的细节。

问. 我如何发送包含图像的 HTML 邮件?

答:最简单的办法是发送带有图像标签的 HTML 文本,标签引用了公共 Web 站点。在这种方法中,在消息中并没有真正包括图像,因此当用户阅读消息时,如果没有连接到 Internet,那将不能看到图像。

另外,你也可以构造 MIME multipart/related 消息。参阅RFC2387,获取这种消息结构的细节。

问. Transport 方法 send 和 sendMessage 之间有什么区别?

答:send() 方法是一个静态方法,可以直接使用,而不需要 Transport 对象的实例。它用于常见、简单的场合,比如使用默认传输发送单条消息。从内部讲,send() 方法首先调用消息上的 saveChanges() 方法。然后创建合适的新Transport 对象,调用 Transport 的 connect() 方法,调用 Transport 的sendMessage() 方法来实际发送消息,接着调用 Transport 的 close() 方法,最后丢弃 Transport 对象的新实例,并由垃圾收集器收集(实际上,还有比那更加复杂的,但那是一般的想法)。

如你可以看到,静态 send() 便利 (convenience) 方法是建立在更加通用的每实例 sendMessage() 方法的基础上的。有许多原因可以让应用程序直接使用sendMessage() 方法。最常见的原因是为了通过在单个连接期间发送多条消息来提高性能,或者为了手动管理连接以提供验证信息。当使用 sendMessage() 方法时,产生的最常见错误是,忘记在要发送的消息上调用 saveChanges() 方法。

问. 我需要验证到 SMTP 服务器,因此我调用了 trans.connect(host, user, password),然后调用 trans.send(msg) 发送消息,但它却不能工作。

答:你应该调用 msg.saveChanges(),然后调用 trans.sendMessage(msg, addrs) 来发送消息。如上面所描述,send 方法是一个静态便利方法,它会获得自己的 Transport 对象,并创建自己的连接用于发送消息;它没有使用与某些Transport 对象有关的连接,并且它是通过该 Transport 对象得到调用的。当然不要忘记将 mail.smtp.auth 属性设置为 true 来启用 SMTP 验证!

问. 我修改了一条消息,但标题却没有反映修改。

答:在创建新消息或修改现有消息后,应该调用 saveChanges()。这将导致重新设置标题以反映变更。注意,Transport.send(Message) 方法隐式调用了这个方法。因此如果你正在做的是发送已修改的消息,就可以跳过调用 saveChanges()。saveChanges() 可能是一个昂贵的操作(特别是对于较大或深度嵌套的消息),因此只在需要时才调用它。

问. 我正在使用 sendMessage() 方法发送消息,但在消息中的文本前后却出现奇怪的一些行,并且我的附件也在消息体中出现。

答:通常这些行像下面这样:

像上面那样,在创建新消息后,在使用 Transport.sendMessage() 方法发送消息之前,必须调用 saveChanges() 方法。静态 Transport.send() 方法将自动调用 Message.saveChanges() 方法。

问. 我为新消息的 Message-ID 标题设置了特定值。但当我发送这条消息时,却重写了那个标题。

答:saveChanges() 将为 Message-ID 字段设置新值,重写所设置的任何值。如果需要设置自己的 Message-ID 并保留它,就必须创建自己的 MimeMessage 子类,重写 updateHeaders() 方法,并使用这个子类的一个实例。

问. 当发送创建的新消息时,为什么会得到 UnsupportedDataTypeException?答:你可能使用 setContent(Object o, String type) 方法设置了消息的一些内容。为了让它能工作,必须为指定“类型”注册 JAF DataContentHandler。如果不这样做,将获得 UnsupportedDataTypeException。参阅JAF 文档,获取进一步信息。

问. 当发送消息时,如何能够显式地设置 SMTP FROM: 属性?

答:mail.smtp.from 属性可用于设置 SMTP FROM: 属性。如果没有设置这个属性,就使用消息的 From 属性。如果多个线程需要同时发送邮件,并且每个线程需要设置 From 属性,那么每个线程就必须使用自己的 Session 对象,它具有自己的 Properties 对象。然后可以在每个 Session 对象的各个 Properties 对象上独立设置 mail.smtp.from 属性(同样对每个线程做这样的设置)。

问. 我想重复发送消息,并且每次发送给一组不同的收件人。但调用Transport.send(Message) 却导致每次都创建一个新的 Transport 会话。在本例中,这是一个次优办法,我如何来解决它?

答:创建合适的 Transport 对象的实例,然后连上它并重复调用 sendMessage() 方法,例如:

问. 当试图发送消息时,我得到了“MessagingException: 501 HELO requires domain address”(MessagingException: 501 HELO 要求域地址)。

答:在 SMTP HELO 命令中,SMTP 提供程序使用

InetAddress.getLocalHost().getHostName() 的结果。如果那个调用不能返回任何数据,就不会在 HELO 命令中发送任何名称。检查你的 JDK 和名称服务器

配置,确保那个调用返回正确数据。从 JavaMail 1.1.3 开始,你也可以设置mail.smtp.localhost 属性,并可以把设置为想用于 HELO 命令的名称。

问. 如果将消息发送到错误的地址,为什么我会获得 SendFailedException 或TransportEvent,指出地址是错误的?

答:在 Internet 上没有端到端验证。通常要将消息转发到几个邮件服务器,然后才到达特定的邮件服务器,该服务器决定了它是否可以传送消息。如果在这些后面的步骤中的某个步骤发生了错误,那么通常会将消息作为不可传送返回给发件人。一个成功的“发送”只表明邮件服务器已经接受了消息,并将试着传送它。

问. 当消息不能被传送时,就会返回一个失败消息。我如何检测这些“回弹”消息?

答:虽然有一个 Internet 标准用于报告这样的错误(multipart/report MIME 类型,参阅RFC1892),但还没有广泛实现它。RFC1211深入讨论了这个问题,包括了大量的例子。

在 Internet 电子邮件中,特定的邮箱或用户名是否存在,只能由传送消息的最终服务器决定。消息可能通过几个中继服务器(它们不能检测错误),然后再到达最终服务器。通常,当最终服务器检测到这一错误,它会返回一个消息给原始消息的发送人,指出失败的原因。有许多 Internet 标准讨论了这种传送状态通知 (Delivery Status Notifications),但大量服务器不支持这些新标准,相反使用特别技术来返回这种错误消息。这使得将“回弹”消息与产生问题的原始消息相互关联起来非常困难(注意,这个问题与 JavaMail 完全无关)。

有许多技术和试探法用于处理这一问题,但它们都不是完美的。一种技术是Variable Envelope Return Paths,http://cr.yp.to/proto/verp.txt描述了这一技术。

问. 当创建 InternetAddress 对象时,如果地址是非法的,为什么不会获得异常?

答:InternetAddress 类只检查地址的语法。如上面所讨论,InternetAddress 类不能决定地址是否做为合法地址实际存在。如果应用程序运行在防火墙背后或目前没有连接到 Internet,那么甚至不能验证主机名。

问. 当试图发送消息时,我为什么会获得 javax.mail.SendFailedException: 550 Unable to relay for 我的地址?

答:这不是 JavaMail 的问题。这是来自你的 SMTP 邮件服务器的错误回复。它指出没有配置你的邮件服务器,使得你可以通过它发送邮件。通常会配置组织的邮件服务器,使得组织中的邮件可以发送到组织中的其他地址,或者发送到组织外部的地址。通常它也使得来自组织外部地址的邮件可以发送(或中继)到也是组织外部的另一地址。邮件服务器的配置决定了是否允许这种中继,以及哪些地址应该当成内部地址与外部地址。

问. 当试图发送消息到(例如)Yahoo时,为什么我会获得一个错误,指出“连接被拒绝”?

JavaMail API简介

javamail:JavaMail API简介 疯狂代码 https://www.wendangku.net/doc/556490169.html,/ ?:http:/https://www.wendangku.net/doc/556490169.html,/Java/Article7029.html 转载自:https://www.wendangku.net/doc/556490169.html, JavaMailAPI是种可选、能用于读取、编写和发送电子消息包(标准扩展)您可使用这种包创建邮件用户代理(MailUserAgentMUA)类型它类似于Eudora、Pine及MicrosoftOutlook这些邮件其主要目不是像发送邮件或其他邮件传输代理(MailTransferAgentMTA)类型那样用于传输、发送和转发消息换句话说用户可以和MUA类型交互以阅读和撰写电子邮件MUA依靠MTA处理实际发送任务 JavaMailAPI设计是为收发信息提供和协议无关访问方式是把该API划分成两个部分: ?该API第个部分是本课程重点基本上是如何发送和接收独立于提供/协议消息 ?第 2个部分则使用特定协议语言如:SMTP、POP、IMAP和NNTP如果要让JavaMailAPI和服务器通信就需要为的提供协议由于Sun公司对特定协议提供有充分介绍用户可以免费获取所以本课程没有介绍创建特定协议提供内容 复习相关协议 在学习JavaMailAPI深层知识的前让我们回过头来看看在该API中使用协议,本质上有4种人们常用协议: ?SMTP ?POP ?IMAP ?MIME 您还需要了解NNTP及其他些协议理解这些协议基本原理有助于您理解如何使用JavaMailAPI而该API设计要和协议无关所以不能克服这些基础协议限制如果选用协议不支持某种功能那么JavaMailAPI也无法在其上添加这种功能(正如您会儿就会看到在操作POP协议时常常会碰到这种问题) SMTP 简单邮件传输协议(SMTP)是用于传送电子邮件机制在JavaMailAPI环境中您基于JavaMail将和您公司或Internet服务提供商(ISP)SMTP服务器通信该SMTP服务器将会把消息转发给用作接收消息SMTP服务器最后用户可通过POP或IMAP协议获取该消息由于支持身份验证所以不需要SMTP服务器是种开放转发器但需要确保SMTP服务器配置正确JavaMailAPI中没有集成用于处理诸如配置服务器以转发消息或添加/删除电子邮件帐户这类任务功能 POP POP含义是邮局协议当前版本为3也称作POP3该协议是在RFC1939中定义POP是Internet上大多数人用来接收邮件机制它为每个用户每个邮箱定义支持这是它所做全部工作也是大多数问题根源在使用POP协议时人们熟悉很多功能如查看收到了多少新邮件消息功能POP根本不支持这些功能都内置到诸如Eudora或MicrosoftOutlook的类邮件中能为您记住接收上封邮件以及计算有多少新邮件这类信息因此使用JavaMailAPI时如果想获取这类信息将需要由自己进行计算 IMAP

基于Javamail的邮件收取类(可直接使用)

package com.neusoft.mail; import javax.mail.*; import java.io.*; import java.text.*; import java.util.*; import java.util.Enumeration; public class GetMail { String POP3Host=""; //POP3服?器 String mailServerPort="110";//POP3服?器端口号String user=""; //登?POP3服?器的?号 String password=""; //登?POP3服?器的密? boolean validate = true;//是否需要身??? Session session = null; Folder folder = null; Store store = null; //无参数的?造函数 public GetMail() {} public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPOP3Host() { return POP3Host; } public void setPOP3Host(String host) { POP3Host = host;

} public String mailServerPort() { return mailServerPort; } public void mailServerPort(String mailServerPort) { this.mailServerPort = mailServerPort; } public String getUser() { return user; } public void setUser(String user) { https://www.wendangku.net/doc/556490169.html,er = user; } public boolean isValidate() { return validate; } public void setValidate(boolean validate) { this.validate = validate; } //?接?件服?器 public void connect() throws Exception{ //?建一个授????象 POP3Auth auth = new POP3Auth(); auth.setAccount(user,password); //取得一个Session?象 Properties prop=new Properties(); prop.put("mail.pop3.host",POP3Host); prop.put("mail.pop3.port", this.mailServerPort); prop.put("mail.pop3.auth", validate ? "true" : "false"); session = Session.getDefaultInstance(prop,auth); //取得一个Store?象

JavaMail

package com.mail.tool; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.text.DateFormat; import java.util.Date; import java.util.Properties; import java.util.StringTokenizer; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Store; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import com.mail.bean.MailBean; import https://www.wendangku.net/doc/556490169.html,erBean; import com.mail.dao.ReceiveDao; import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility; public class MailManager { public int getUnreadCount(UserBean user){//读取未读邮件的个数,POP3没有此功能int count=0; try{ Properties props=new Properties();//创建一个空的配置 Session mailSession = Session.getInstance(props);//获取一个Session的实例

基于Javamail的邮件收发系统-使用说明

基于Javamail的邮件收发系统使用说明书 基于Javamail的邮件收发系统是一款简单、方便、快捷的邮件系统。它能实现邮件的接收与发送,并能完成附件的传输,具有较好的人机交互性,易于使用。 开发环境:JDK1.6 + Windows平台 开发技术:Javamail 开发工具:Eclipse3.4 运行环境:PC上需安装JDK1.6,且正确配置环境变量。 系统基本功能如下: (1) 收取并显示POP3邮件服务器上指定邮箱的邮件; (2) 使用SMTP邮件服务器发送邮件; (3) 邮件附件的发送与接受; (4) 删除邮件; 具体操作步骤如下: 1、打开javamailsystem文件夹,找到javamail.jar可执行文件,双击该执行文件,即可打开 Javamail邮件收发系统客户端软件。进入该系统后,首先选择“POP3/SMTP设置”按钮,对收发邮件所需的邮件服务器主机、收发邮件账号及密码信息进行设置。 图1-1邮件客户端主界面 设置举例如下:

POP3属性 POP3服务器:https://www.wendangku.net/doc/556490169.html,(或https://www.wendangku.net/doc/556490169.html,或https://www.wendangku.net/doc/556490169.html,) Email地址:shinning191@https://www.wendangku.net/doc/556490169.html,(ceshi2009ok@https://www.wendangku.net/doc/556490169.html,、qiufeng006@https://www.wendangku.net/doc/556490169.html,) 账户名:shinning191(ceshi2009ok、qiufeng006) 密码:6857191(123456、28912786) SMTP属性 SMTP服务器:https://www.wendangku.net/doc/556490169.html,(或https://www.wendangku.net/doc/556490169.html,或https://www.wendangku.net/doc/556490169.html,) Email地址:shinning191@https://www.wendangku.net/doc/556490169.html,(ceshi2009ok@https://www.wendangku.net/doc/556490169.html,\qiufeng006@https://www.wendangku.net/doc/556490169.html,) 账户名:shinning191(ceshi2009ok、qiufeng006) 密码:6857191(123456、28912786) 在对SMTP/POP3进行设置的时候,由于系统的缺陷,需要先对POP3进行属性设置,然后确定关闭该对话框;重新打开属性设置对话框,对SMTP进行属性设置,确定。这样便可以正确设置完邮件服务器的属性。 此系统对上述设置的信息具有存储功能,在这里,我们采用属性文件的形式存储SMT P 和POP3邮件服务器属性设置。相关属性值分别保存在pop3.properties和smtp.properties文

基于javamail的电子邮件收发系统-学位论文

目录 第1章概述 ............................................. 错误!未定义书签。 1.1研究目的和意义 ......................................................................... 错误!未定义书签。 1.2国内外发展趋势和现状 (2) 1.3 系统特点 .................................................................................... 错误!未定义书签。第2章相关技术和工具简介 (6) 2.1 Swing简介 (6) 2.2 Java Mail简介 (6) 2.3 Java平台简介 (7) 2.4 Eclipse简介 (7) 第3章系统需求分析和总体设计 (9) 3.1用户对电子邮件系统的需求 (9) 3.2产品可行性分析 (10) 3.3系统总体设计...................................... 错误!未定义书签。 3.3.1电子邮件系统的功能 (12) 3.3.2电子邮件收发过程 (13) 3.3.3服务器参数的设置 (14) 第4章详细设计 (15) 4.1 登录功能的设计 ............................................................................... 错误!未定义书签。 4.2发送邮件的设计 ......................................................................... 错误!未定义书签。 4.3接收邮件的设计 ......................................................................... 错误!未定义书签。 4.4邮件管理的设计 ......................................................................... 错误!未定义书签。第5章系统功能的编码实现 .............................. 错误!未定义书签。 5.1用户登录界面的实现 ................................................................. 错误!未定义书签。 5.2主界面的实现 (19) 5.3 邮件配置界面的实现 (20) 5.4 发送邮件界面的实现 (21)

Java邮件开发

第二章邮件传输协议 SMTP协议:简单邮件传输协议,它定义了邮件客户端于SMTP服务器之间,以及两台SMTP服务器之间的通信规则。SMTP协议的通信双方采用一问一答的命令/响应形式进行对话。 命令: Ehlo Auth Mailfrom: Rcptto: Data Quit 我们来看一个例子: 因为我们的用户名和密码,是需要加密的,所以我们先把用户名和密码加密,程序如下:import java.io.*; import sun.misc.BASE64Encoder; public class Base64Util { public static void main(String [] args) throws IOException{ System.out.print("请输入用户名:"); 更多的内容https://www.wendangku.net/doc/556490169.html,/en/ BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String username=in.readLine(); System.out.print("请输入密码:"); String password=in.readLine(); BASE64Encoder encoder=new BASE64Encoder(); System.out.println("编码后的用户名:"+encoder.encode(username.getBytes())); System.out.println("编码后的密码为:"+encoder.encode(password.getBytes())); } } 输入用户名和密码以后,会把加密后的用户名和密码给出来,然后我们打开命令提示符: 这个指令的意思,就是连接到https://www.wendangku.net/doc/556490169.html, 25是段口号。 返回220,表示成功连接。

基于Javamail的邮件收发系统-任务书

信息科学与工程学院 09 届本科生毕业设计(论文)任务书 学院信息科学与工程 学院 专业 计算机科学与技术 (师范) 班级 学号学生姓名指导教师 一、论文题目 基于Javamail的邮件收发系统 二、内容和要求 1.总体目标及性能(参数)要求 (1)系统功能基本完善。 (2)系统具有良好的用户界面。 (3)系统具有较好的人机交互性、易于使用。 (4)系统可靠、稳定,具有一定的应用价值。 2.研究内容及拟采用的技术路线 ●研究内容: (1)邮件服务器的工作原理。 (2)DNS服务器的工作原理。 (3)SMTP、POP3、MIME协议。 (4)设计并实现基于Javamail的邮件收发系统,要求系统具有邮件接收、发送等基本功能。 ●采用的技术路线: (1)开发工具采用Java+JavaMail API。 (2)数据库采用MySQL或SQL Server。

3.参考文献(10篇以上) [1] Java邮件开发详解。张孝祥。电子工业出版社,2007。 [2] Java高级程序设计。王路群主编。中国水利水电出版社, 2006 。 [3] Java课程设计。黄明, 梁旭, 周绍斌编著。电子工业出版社, 2006。 [4] Java开发与应用教程。王吴迪, 赵枫朝等编著。电子工业出版社, 2006。 [5] Java程序设计大学教程。刘艺等编著。机械工业出版社, 2006。 [6] Java数据库高级编程宝典。陈天河编著。电子工业出版社, 2005。 [7] Java程序设计与应用开发。於东军等编著。清华大学出版社, 2005。 [8] Java语言程序设计实训。赵海廷主编。武汉大学出版社, 2005。 [9] Java program design。Cohoon, James P.,Davidson, Jack W。McGraw-Hill Higher Education, 2004。 [10] Thinking in Java。Eckel, Bruce。Prentice Hall, c2000。 [11] Learning Java。Niemeyer, Patrick.,Knudsen, Jonathan。O'Reilly, 2000。

如何用javamail定时发送邮件

如何用javamail定时发送邮件 例如:我想在3天后的中午12:00发送给别人邮件 还有就是每天的中午12点给别人发送邮件,而且这些个邮件地址是从一个jsp传来的 例如今天给a@https://www.wendangku.net/doc/556490169.html,发,当执行过jsp后,jsp输入的是b@https://www.wendangku.net/doc/556490169.html,,以后就给b@https://www.wendangku.net/doc/556490169.html,发 而且jsp传过来的邮件地址数目是多个的,每天需要给多人在固定一时间内发邮件 定时触发器 有许多开源项目 Timer + 多线程 我在这里使用的Java计时器框架是由Java开发人员Tom White构建的一个简单通用的计划框架,以用于执行任意复杂的计划任务,他使我们实现灵活的计划策略成为可能。Java计时器框架的本身在这里不作过多的介绍,详细信息在IBM developerWorks中国网站。 我们主要讨论如何利用Java计时器框架在Solaris平台来实现邮件的定时发送、JavaMail发送邮件的实现以及在Solaris平台上如何以后台方式运行整个邮件定时发送的应用。 下载本文的源代码,参考具体实现。 1.1 形成schedule.jar包 schedule.jar包中的目录结构如下: 我们将数据库的连接、日志、邮件和计划框架的通用类形成一个与具体应用要求无关的schedule.jar包。利用javac将编译生成的目标class文件存在当前目录的classes文件夹下,然后通过jar -cvf schedule.jar ./*命令生成schedule.jar包。 1.1.1 Oracle数据库连接的建立 位于db目录下,通过thin方式建立与Oracle的数据库连接,具体的实现参见《J2EE应用中与Oracle数据库的连接》一文。 1.1.2 日志 以后台方式定时运行的应用应特别注意日志的功能,因为只有通过分析详细的日志信息才能准确掌握应用的执行情况。在logs目录下为Logs.java文件,代码如下: package com.j2ee.logs; import java.io.*; import java.util.*; import java.text.SimpleDateFormat;

JavaMail发送邮件实例-给多人发送、抄送

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun 发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。 虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail 文件。 JavaMail包中用于处理电子邮件的核心类是: Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。 关键技术: 1、MimeMessage的setRecipients方法设置邮件的收件人,其中 Message.RecipientType.TO常量表示收件人类型是邮件接收者, https://www.wendangku.net/doc/556490169.html,常量表示收件人类型是抄送者, Message.RecipientType.BCC常量表示收件人的类型是密送着。 2、在调用MimeMessage的setRecipients方法时,除了可以指定收件人的类型外,还可以传入一个数组,指定多个收件人的地址。 SourceCode: import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart;

基于javaMail电子邮件系统的设计(含源文件)

课程设计I报告题目:电子邮件系统设计 专业软件工程 学生姓名 ****** 班级学号 ********** 指导教师******** 指导单位计算机学院软件工程系日期2009.6.10——2008.6.22

1、课题名称 电子邮件系统设计 2、课题内容 设计一个电子邮件系统,包括客户端和服务器端的设计、邮件处理过程建模和具体功能的实现等。 3、系统分析 电子邮件(e-mail)是因特网上使用得最多的和最受用户欢迎的一种应用。电子邮件把邮件发送到 ISP 的邮件服务器,并放在其中的收信人邮箱中,收信人可随时上网到ISP 的邮件服务器进行读取。电子邮件不仅使用方便,而且还具有传递迅速和费用低廉的优点。 现在电子邮件不仅可传送文字信息,而且还可附上声音和图像。 本系统分析中给出了电子邮件服务器和电子邮件客户端的简介,同时给出了本次试验中客户端的主要功能和总体框图。 邮件服务器按照提供的服务类型,可以分为发送邮件服务器(简称发送服务器)和接收邮件服务器(简称接收服务器)。 发送邮件服务器使用邮件发送协议,现在常用的是SMTP,所以通常发送邮件服务器也称为SMTP服务器; 接收邮件服务器使用接收邮件协议,常用的有POP3协议和IMAP协议,所以通常接收邮件服务器也称为POP3服务器或IMAP服务器。 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议,是Internet传送E-mail的基本协议,也是TCP/IP协议组的成员。 SMTP协议解决邮件系统如何通过一条链路,把邮件从一台机器传送到另一台机器上的问题。 SMTP协议的特点是具有良好的可伸缩性,这也是它成功的关键。它既适用于广域网,也适用于局域网。 SMTP协议由于非常简单,使得它得到了广泛的运用,在Internet上能够发送邮件的

JavaMail技术

JavaMail技术 1.JavaMail介绍 现如今,使用email发送邮件非常普遍和常见,平时公司内部交流,网站上信息通知,注册时激活验证等地方都在使用邮件,Java也有关于发送和接收邮件技术封装。Java中提供的技术即就是要给大家介绍的JavaMail技术。 2.邮件协议 2.1.邮件服务器简介 邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器和接收邮件的服务器。 发送邮件的服务器使用发送协议,现在常用的是SMTP协议。所以,通常发邮件的服务器也称为SMTP服务器。 接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,所以通常也被称为POP3或IMAP服务器。 目前经常见到的服务器为SMTP和POP3服务器。 例如:在注册了126的邮箱之后,它的发邮件服务器为https://www.wendangku.net/doc/556490169.html,:25,而收邮件服务器则为https://www.wendangku.net/doc/556490169.html,:110.(冒号后面的为端口号)。 当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。默认发邮件服务器的端口为25,收邮件的端口为110。 2.2.邮件收/发协议 SMTP协议-发邮件协议 全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP 服务器之间、以及两台SMTP服务器之间的通讯规则。端口一般为25. POP3协议-收邮件协议

全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。端口一般为110. IMAP协议-对POP3的扩展 全称为Internet Message Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,定义了邮件客户端软件与IMAP服务器的通讯规则。 3.Apache的JavaMail使用 邮件客户端的主要任务是向邮件服务器发送邮件,以及接收来自邮件服务器的邮件。Sun公司制定了一套API,它封装了邮件通信的各种协议。为Java开发者提供了收发电子邮件的公共接口。但是由于Sun公司提供的那些接口比较麻烦,Apache对sun公司的技术进行了封装,使用Apache的mail技术,可以简单方便的发送邮件。 3.1.下载javamail的jar包 下载地址:https://www.wendangku.net/doc/556490169.html,/proper/commons-email/download_email.cgi 解压jar包,在项目中导入jar包。

基于JavaMailAPI的Web邮件系统开发

第28卷 第6期 2006年6月武 汉 理 工 大 学 学 报JOURNAL OF WUHAN UNIVERSITY OF TECHNOLOGY Vol.28 No.6 Jun.2006 基于JavaMail API 的Web 邮件系统开发 钟 珞,刘 玲,夏红霞 (武汉理工大学计算机科学与技术学院,武汉430070) 摘 要: E mail 通信在Java 服务器编程中占有非常重要的地位。阐述了Web 邮件系统所涉及的几个协议,对J2EE JavaM ail A PI 的结构框架和核心类进行了介绍,描述了系统架构,并给出了其中发送邮件功能的详细设计过程。Java M ail 结合JSP 的结构化特性,易于实现灵活高效、方便移植的Web 邮件应用程序。 关键词: JavaM ail AP I; 电子邮件; 邮件发送 中图分类号: T N 915.04文献标志码: A 文章编号:1671 4431(2006)06 0084 03 Development Research of Web Mail System Based on JavaMail API Z H ON G L uo ,LI U L ing,XIA H ong x ia (School o f Computer Science and T echnology ,Wuhan U niv ersity of T echno logy,Wuhan 430070,China) Abstract: E mail is the most important and ex tensive applicat ion of I nternet,it stands a v er y important position in Java server pr ogramming.T his paper first ex patiated on some protocols come down to the Web mail system,and then introduced the architecture and core classes of J2EE JavaM ail A PI.After that,the article presented the system framew ork and t he detailed de sign pr ocess of mail sending.In co nclusion,it can easily implement flexible,high effective and transplantable W eb mail applica tions with JavaM ail and structured JSP. Key words: JavaM ail API ; E mail; mail sending 收稿日期:2006 03 23. 基金项目:教育部高校行动计划智能科学与技术(2004XD 03).作者简介:钟 珞(1957 ),男,教授,博士生导师.E mail:liuling com 随着互联网的发展,人们使用最多的服务之一就是电子邮件,用户最初只能通过Outlook 、Foxm ail 等客户端软件来收发自己的邮件。随着Web 邮箱的面世,其快捷、方便的优点吸引了众多的网络用户。 对一般的电子邮件使用者来说,E mail 非常简单地执行邮件传输,但是对于编程人员来讲E mail 的打包、传输、发送和接收是很复杂的。这要涉及到很多协议,主要有发送电子邮件的SMT P 协议、用来接收电子邮件的POP3协议和Internet 邮件访问协议IMAP 以及多用途Internet 邮件扩充协议M IM E 。JavaM ail 就是Sun 发布的用来处理这些问题的统一的API,JavaMail 是J2EE 的核心部分,它定义一组抽象类和接口,通过Java 应用程序支持邮件系统。它封装了电子邮件的基本协议,编程人员可以不用自己去处理那些复杂的协议了。JavaMail API 可以使用在客户端也可以使用在服务器端。 1 相关邮件协议 简单邮件传输协议(SMT P)是为了保证电子邮件的可靠和高效传送,它通过TCP/IP 网络把消息从一个邮件服务器移动到其它邮件服务器(见图1)。SM TP 是Internet 电子邮件服务的基础,在TCP 上,它使用端口25进行传输,但是个简单的子协议,除传输邮件外不能完成诸如差错检测等其它功能,这些功能由POP 和IMAP 等高级邮件协议负责完成。邮局协议(POP)是个地位牢固的开放邮件标准。它依靠SMTP

基于JavaMail的邮件客户端程序的设计与实现

网络通讯与安全 电脑知识与技术 电脑知识与技术 1引言 一个完整的邮件系统由邮件客户端程序和邮件服务器程序组成,实现邮件系统所使用的邮件协议为MIME、SMTP、POP3和IMAP4协议,其中MIME协议用于定义邮件格式,SMTP协议用于传输邮件,POP3和IMAP4协议用于从邮件服务器接收邮件。 邮件客户端程序主要实现用户和邮件服务器的交互,用户使用它可以创建、发送、阅读、管理自己的邮件。目前流行的邮件客户端程序很多,比如大家熟悉OutLookExpress等。本文将介绍一种基于JavaMail的邮件客户端程序的设计与实现方法。 2JavaMail JavaMail是sun公司提供的用来开发邮件系统的软件包,它属于标准扩展API,仅包含在JDK1.4以上的版本和J2EE以上的 版本中 。JavaMail的体系结构如图1所示。 JavaMailAPI封装在mail.jar包中,其核心由抽象类层与Internet邮件类层两个部分组成(见图1)。其 中,抽象类层定义了与平台、底层协议无关的Email操作界面,其相关的类与接口定义在javax.mail包中;而Internet邮件类层则用于支持InternetMIME(RFC822)的标准,相关的类与接口被封装在javax.mail. internet包中。 此外,为了支持MIME标准,实现对多种媒体邮件格式的支持,JavaMailAPI中使用了JavaBeans的技术,需要Java激活框架的支持,因此,进行邮件系统开发时还需要用到JAFAPI,该API封装在activation.jar包中,相关的类与接口定义在javax.acti-vation包中。 3系统设计 JavaMailAPI使邮件的发送与接收得到大大的简化。本文所开发的邮件客户端程序是在JBuilder9环境下实现的,JBuilder9自带JDK1.4.1版本,不需额外下载mail.jar邮件开发包和activa-tion.jar激活框架包。主要实现如下基本功能: (1)收取并显示POP3邮件服务器上指定邮箱的邮件;(2)使用SMTP邮件服务器发送邮件;(3)邮件附件的发送与接收;(4)删除邮件。 邮件客户端程序的功能界面如图2所示。 图2邮件客户端程序的功能界面4系统技术实现 3.1环境配置和界面搭建 在JBuilder9中,创建工程后,首先为工程添加JavaMail和JavaBeansActivationFrameWork开发包,然后使用swing图形工具包搭建各个程序界面,并在使用JavaMailAPI的类文件中导入相关的API包,即在程序的开头添加下面的语句: importjavax.mail.*;importjavax.internet.*;importjavax.activation.*; 3.2设置邮件服务器参数的实现 用户在收发邮件时,需要设置邮件服务器主机、 收发邮件帐户及密码等信息。因此系统提供对上述信息的设置与存储的功能,这里,我们采用属性文件的形式存储SMTP和POP3邮件服务器属性设置。其文件名为smtpPop3.properties,位于工程的根目录下,可使用java.uitl.Properties类的setProperty()方法和getProperty()方法对属性文件中的属性内容进行存取。本系统smtpPop3.properties文件的内容格式如下: smtpPop3.pop3host=pop3邮件服务器地址(如pop3.sina.com.cn)smtpPop3.smtphost=smtp邮件服务器地址(如smtp.sina.com.cn)smtpPop3.address=收发邮件帐户(如xyz@sina.com)smtpPop3.username=用户名(如xyz)smtpPop3.password=密码(如797989)3.3创建与发送邮件功能的实现 发送邮件的基本过程为:点击主界面中的【创建邮件】 按钮后,弹出新邮件编辑窗体,在该窗体中编辑新邮件,选择邮件附件 收稿日期:2006-04-04 作者简介:杨淑萍(1963-),女,山西怀仁人,讲师,硕士,研究方向,电子商务技术;聂哲(1970-),男,湖南益阳人,副教授,硕士,研究方向,电子商务技术。 基于JavaMail的邮件客户端程序的设计与实现 杨淑萍,聂哲 (深圳职业技术学院软件工程系,广东深圳518055) 摘要:本文简述了JavaMail及其结构,详细阐述了使用JavaMail开发邮件客户端程序的方法,并给出了主要的实现代码,为邮件应用程序的进一步开发提供了基础。 关键词:JavaMail;邮件客户端程序;SMTP;POP3中图分类号:TP311文献标识码:A文章编号:1009-3044(2006)20-0106-03 DesignandImplementationofMailClientProgramBasedonJavaMail YANGShu-ping,NIEZhe (DepartmentofComputerSoftware,ShenzhenPolytechnic,Shenzhen518055,China) Abstract:ThispaperintroducesJavaMailandexpoundsthedevelopingmethodofmailclientprogramwithJavaMailindetail,Italsogivesoutthemainimplementcodesofmailclientprogrameandprovidesbaseofdevelopingmailapplication. Keywords:avaMail;mailclientprogram;SMPT;POP3 图1JavaMial体系结构106

基于Javamail的邮件收发系统论文

基于JavaMail的邮件收发系统 摘要 电子邮件在当今社会中扮演了一个很重要的角色。越来越多的人在使用它。而且用它的人数势必会继续增加。本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。SMTP(简单邮件传输协议)是专门用来发送邮件的。POP (邮局协议)是专门用于接收邮件的。JavaMail API是一种可选的、能用于读取、编写和发送电子消息的标准扩展包。 本文主要可分为四个部分。第一部分介绍了Javamail邮件系统的意义和现状。第二部分具体介绍了几种相关协议和Javamail API。第三部分主要介绍了系统的开发工具JA V A语言、Eclipse及其安装过程与配置方法。第四部分详细阐述了Javamail邮件收发系统的实现过程。 关键词:SMTP,POP,JA V AMAIL,邮件收发

MAIL SYSTEM BASED ON JAVAMAIL ABSTRACT E-Mail play a very important role in modern times. More and more people are using it, and the number of it will larger and larger. This paper introduced the javamail system's development background, analyzed and compared some existing maturity Email system at home and abroad , summarized their advantages and disadvantages, studied deeply with the javamail technology , proposed and designed out the mail system based on javamail. This system used POP protocol and SMTP protocol to develop from the bottom, used JavaMail API to provide the visit which has nothing to do with the agreement for send and receive email. SMTP (Simple Mail Transfer Protocol) is designed to send a message. POP (Post Office Protocol) is designed to receive mail. JavaMail API is an standard expansion package which is optional, can be used to read, write and send electronic messages. This paper can be divided into four parts. The first part introduced javamail email system's significance and status. The second part introduced several related agreements and JavaMail API. The third part mainly introduced system's development tools JA V A language , Eclipse and their installation process and configuration method. The fourth part detailed javamail email system's realization process. Keywords:SMTP, POP, JA V AMAIL, Email to send and receive

java收取和发送邮件 ssl

Java 收取和发送邮件+SSL 这里使用Gmail 邮箱测试1. 收取邮件 [java] view plaincopypackage lius.javamail.ssl; import java.io.UnsupportedEncodingException; import java.security.*; import java.util.Properties; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeUtility; /** * 用于收 取Gmail邮件* @author Winter Lau */ public class GmailFetch { public static void main(String argv[]) throws Exception { Security.addProvider(new https://www.wendangku.net/doc/556490169.html,.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "https://www.wendangku.net/doc/556490169.html,.ssl.SSLSocketFactory"; // Get a Properties object Properties props = System.getProperties(); props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); props.setProperty("mail.pop3.socketFactory.fallback", "false"); props.setProperty("mail.pop3.port", "995"); props.setProperty("mail.pop3.socketFactory.port", "995"); //以下步骤跟一般的JavaMail操作相同Session session = Session.getDefaultInstance(props,null); //

相关文档
相关文档 最新文档