⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java资源网 javamail常见问题.htm

📁 JavaMail的应用程序合集 jsp的java 的
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  JavaMail API 包,你将需要访问 IMAP 或 POP3 邮件服务器(用于阅读邮件)和/或 SMTP 
                  邮件服务器(用于发送邮件)。这些邮件服务器通常由 Internet 
                  服务提供商提供,或者作为组织网络基础结构的一部分。如果你不必访问这样的邮件服务器,请往下看。</P>
                  <P><B>问. </B>从哪里可以获得必要的邮件服务器?<BR><B>答:</B><FONT 
                  color=#594fbf>Sun Java System Messaging Server</FONT> 可用于 
                  Solaris 和 Windows 平台。华盛顿大学的 IMAP 服务器支持多种平台 (UNIX、32 位 Windows 
                  等)。可从如下地址获取源代码:<FONT 
                  color=#594fbf>ftp://ftp.cac.washington.edu/imap/imap.tar.Z</FONT>。其他的许多供应商提供了支持 
                  Internet 标准的邮件服务器。可以从 <FONT color=#594fbf>IMAP 
                  Connection</FONT> 和 <FONT color=#594fbf>Internet Mail 
                  Consortium</FONT> 获得更多信息。</P>
                  <P><B>问. 
                  </B>我应该使用什么主机名、用户名或密码?<BR><B>答:</B>我们不提供邮件服务器让你使用。你必须使用自己的邮件服务器,或者使用 
                  Internet 服务提供商或你所工作的公司提供的邮件服务器。网络管理员可能给你一些必要的信息用于配置 
                  JavaMail,以便同邮件服务器一起工作。</P>
                  <P><B>问. </B>我如何配置 JavaMail 通过代理服务器工作?<BR><B>答:</B>大多数代理服务器只支持 
                  HTTP 协议。JavaMail 没有使用 HTTP 
                  协议来阅读或发送邮件。使用代理服务器的一个主要原因是为了允许企业网络中的 HTTP 请求通过企业防火墙。防火墙通常会阻止对 
                  Internet 的大多数访问,但允许来自代理服务器的请求通过。此外,企业网络内部的邮件服务器将为邮件执行类似的功能,通过 
                  SMTP 接收消息,然后将它们转发到 Internet 
                  上的最终目的地,以及接收传入的消息,然后将它们发送到合适的内部邮件服务器。</P>
                  <P>如果你的代理服务器支持 SOCKS V4 或 V5 协议 (<FONT 
                  color=#594fbf>http://www.socks.nec.com/aboutsocks.html</FONT>, 
                  <FONT color=#594fbf>RFC1928</FONT>),并允许匿名连接,可以告诉 Java 运行时把所有的 
                  TCP socket 直接连接到 SOCKS 服务器。参阅 <FONT 
                  color=#594fbf>http://java.sun.com/j2se/1.4/docs/guide/net/properties.html</FONT>,获取 
                  <CODE>socksProxyHost</CODE> 和 <CODE>socksProxyPort</CODE> 
                  属性的最新文档。这些是系统级属性,而不是 JavaMail 
                  会话属性。当调用应用程序时,它们可以从命令行中设置,例如:<CODE>java 
                  -DsocksProxyHost=myproxy ...</CODE>。这个工具可用于指出从 JavaMail 到 
                  SOCKS 代理服务器进行 SMTP、IMAP 和 POP3 通信。注意,设置这些属性将告诉 <B>所有</B> TCP 
                  socket 连接到 SOCKS 代理,在应用程序的其他方面上,这可能会带来负面影响。</P>
                  <P>假如没有这样的 SOCKS 服务器,如果想使用 JavaMail 
                  来直接访问防火墙外部的邮件服务器,那将需要配置防火墙来允许这一访问。一个简单的 HTTP 代理 Web 服务器是足够的。 
                  </P>
                  <P><B>问. </B>如何在 Windows NT 中设置 CLASSPATH?<BR><B>答:</B>详细说明可从 
                  <FONT color=#594fbf>这里</FONT> 获得。</P>
                  <P><B>问. </B>当试图在 Linux 
                  中运行程序时,得到了非常奇怪的错误消息,而且程序运行失败了。错误在哪里?<BR><B>答:</B>通常,错误消息看起来像下面这样:</P><PRE>Exception in thread "main"
java.lang.VerifyError:(Class:com/sun/mail/pop3/POP3Store,
method: finalize Signature :()V)
Illegal use of nonvirtual function call
</PRE>
                  <P></P>问题是由于在 Linux 上,使用的 unzip 命令是有 bug 的版本,这样解压缩 JavaMail 
                  下载包时,unzip 命令破坏了 mail.jar 文件。获取更新版本的 unzip 命令或使用 JDK 的 jar 
                  命令来解压缩下载包。 
                  <P></P>
                  <P><B>问. </B>在运行于 SecurityManager 下面的应用程序中,我如何使用 
                  JavaMail;我必须授予应用程序和 JavaMail 什么权限?<BR><B>答:</B>在具有 
                  SecurityManager 的 JDK 1.2(或更新版本)中,当使用 JavaMail 时,JavaMail 读取 
                  mail.jar 文件中的配置文件有时会失败。在从 activation.jar 文件中读取配置文件时,JavaBeans 
                  Activation Framework 可能也有相同的问题。这些默认配置文件是作为“资源”文件存储的,并且存储在 jar 
                  文件的 META-INF 目录中。</P>
                  <P>有许多调试技术可用于决定这是否是个问题。设置 Session 属性“mail.debug”为 true(或调用 
                  <CODE>session.setDebug(true)</CODE>),将导致 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 
                  可以产生有用的调试输出。</P>
                  <P>除了读取配置文件的必要权限外,应用程序(和 
                  JavaMail)也将需要一定的权限才可以连接到它使用的邮件服务器。如果应用程序使用 System 属性来配置 
                  JavaMail(例如,像许多 JavaMail 演示程序所做的那样,通过传递从 
                  <CODE>System.getProperties()</CODE> 中返回的 Properties 对象到 
                  Session 构造函数),它也将需要一定的权限才可以使用 System Properties 
                  对象。另外,应用程序可以使用自己的 Properties 对象,以及确信设置 "mail.from" 属性 或 
                  "mail.user" 和 "mail.host" 属性(参见 
                  InternetAddress.getLocalAddress() 方法)。</P>
                  <P>在 JDK 1.2 SecurityManager 中,为了使应用程序能够使用 
                  JavaMail,应用程序、JavaMail 和 JAF 
                  将需要某些权限,比如下面的一些权限(一定要使用适当的值替换主机名和路径名);把这些权限添加到应用程序使用的安全策略文件中。</P>
                  <P><!-- BEGIN VCD7 CODE SAMPLE COMPONENT  -->
                  <TABLE class=grey4 cellSpacing=0 cellPadding=10 width="100%" 
                  border=0>
                    <TBODY>
                    <TR>
                      <TD><PRE>grant {
    // following two permissions allow
    // access to default config files
    permission java.io.FilePermission
		"/path/to/mail.jar", "read";
    permission java.io.FilePermission
		"/path/to/activation.jar", "read";
    // following to use SMTP
    permission java.net.SocketPermission
		"SMTPHOST:25", "connect,resolve";
    // following to use IMAP
    permission java.net.SocketPermission
		"IMAPHOST:143", "connect,resolve";
    // following to use POP3
    permission java.net.SocketPermission
		"POP3HOST:110", "connect,resolve";
    // following needed if System.getProperties() is used
    permission java.util.PropertyPermission
		"*", "read,write";
};
</PRE></TD></TR></TBODY></TABLE><SPAN class=sp20></SPAN><BR><!-- END VCD7 CODE SAMPLE COMPONENT  -->
                  <P></P>
                  <P><B>问. </B>如何配置 Web 服务器来运行 JavaMail 演示 
                  servlet?<BR><B>答:</B>针对以下 Web 服务器的指导说明可从这里获得: 
                  <UL>
                    <LI><FONT color=#594fbf>Tomcat</FONT> 
                    <LI><FONT color=#594fbf>Apache with JServ </FONT>
                    <LI><FONT color=#594fbf>iPlanet Web Server</FONT> 
                    <LI><FONT color=#594fbf>Java Web Server</FONT> </LI></UL>
                  <P></P>
                  <P><B>问. </B>当在 servlet 中使用 JavaMail 时,未找到任何的 JavaMail 
                  类。我已经在服务器的 CLASSPATH 中添加了 mail.jar?<BR><B>答:</B>当改变 CLASSPATH 
                  时,通常有必要完全重启 Web 服务器。</P>
                  <P><B>问. </B>我的 servlet 可以找到 JavaMail 类,但 JavaMail 
                  抱怨它不能找到针对“smtp”或“imap”的服务提供程序或地址类型“rfc822”。<BR><B>答:</B>通常这是因为 
                  JavaMail 无法访问 mail.jar 中的配置文件,而这可能是由于安全权限问题造成的;参见 <FONT 
                  color=#9966cc>本条目</FONT>,获取更多的细节。也保证你没有提取 mail.jar 内容;在服务器的 
                  CLASSPATH 中,应该包括未更改的 mail.jar 文件。</P>
                  <P><B>问. </B>在哪里可以找到 jws.jar?我已经安装了 Java Web Server 2.0,并试图运行 
                  JavaMailServlet。README 文件指示我在 CLASSPATH 中添加 
                  jws.jar。<BR><B>答:</B>jws.jar 不再与 Java Web Server 
                  一起发行(在以前版本中,它们是一起发行的),因此不需要在 CLASSPATH 中添加它。只要在 CLASSPATH 中添加 
                  mail.jar 和 activation.jar,然后重启 Java Web Server。 </P>
                  <P><STRONG><FONT size=+1>编程</FONT></STRONG> 
                  <P>
                  <P><B>问. </B>从哪里可以学习有关 Internet 邮件的基础知识,它是我高效编写 JavaMail 
                  程序需要知道的?<BR><B>答:</B>参见我们的 Web 页中提及的 <FONT 
                  color=#594fbf>参考图书</FONT> 中的一本,获得有关 Internet 
                  电子邮件、MIME、SMTP、IMAP 和 POP3 等的背景信息。</P>
                  <P><B>问. </B>如何调试使用 JavaMail API 的应用程序?<BR><B>答:</B>可通过在代码中调用 
                  Session 对象上的 <CODE>setDebug(true)</CODE> 
                  方法来打开调试模式。这将造成在控制台中打印调试消息,包括协议跟踪信息。如果您认为在 JavaMail 中发现了 
                  bug,就将这个跟踪及以下信息发送给我们:重生成问题的测试用例、使用的平台、使用的 JDK 的版本和使用的邮件服务器 
                  (IMAP, SMTP) 的名称和版本。</P>
                  <P><B>问. </B>如何发送带有附件的消息? <BR><B>答:</B>带有附件的消息采用 MIME 
                  多部分消息来表示,其中第一部分是消息的主体,其他的部分是附件。有大量的例子,它们展示了如何在演示程序中构建这种消息,JavaMail 
                  下载包包含了这些演示程序。</P>
                  <P><B>问. </B>如何阅读带有附件的消息并保存附件?<BR><B>答:</B>如前面描述,在 MIME 
                  中,带有附件的消息是作为多部分消息表示的。在简单的例子中,<CODE>Message</CODE> 对象的 
                  <CODE>getContent</CODE> 方法的结果将是一个 <CODE>MimeMultipart</CODE> 
                  对象。多部分对象的第一个主体部分将是消息的主文本。其他的主体部分将是附件。<CODE>msgshow.java</CODE> 
                  演示程序展示了如何在消息中遍历所有的多部分对象,并提取各个主体部分数据。<CODE>getDisposition</CODE> 
                  方法将给你一个提示,指出主体部分是否应该内嵌显示,或者应该将其考虑成附件(但请注意,不是所有的发件人都提供这一信息)。</P>
                  <P>为了将主体部分中的数据保存到文件(比如),请使用 <CODE>getInputStream</CODE> 
                  方法来访问附件内容,并将数据复制到 <CODE>FileOutputStream</CODE>。</P>
                  <P>注意,也有一些更复杂的情形也要处理。例如,一些发件人把主体作为纯文本和 html 发送。通常,这将作为 
                  <CODE>multipart/alternative</CODE> 内容(和 
                  <CODE>MimeMultipart</CODE> 
                  对象)出现在简单的文本主体部分的位置中。经过数字签名或加密的消息甚至会更复杂。处理所有的这些情形可能具有挑战性。请参考各种 
                  MIME 规范和我们主页上列出的其他 <FONT color=#594fbf>参考资料</FONT>。</P>
                  <P><B>问. </B>什么是“中断支持”(disconnected 
                  support)?<BR><B>答:</B>支持中断操作的邮件客户端将允许用户访问远程消息存储(比如 
                  IMAP)中消息,缓存这些消息中的一些消息的(部分)到本地,然后断开到服务器的连接。当处在断开连接状态中,邮件客户端可以访问已经缓存的消息,可能也可以删除它们或将它们保存到其他文件夹。当邮件客户端下一次连接到远程消息存储时,本地所做变更会与远程存储同步。同样,中断支持可以允许客户端在断开与服务器连接时“发送”消息,在到服务器的连接可用前,消息会进行排队。也请参阅 
                  <FONT color=#594fbf>RFC1733</FONT>。</P>
                  <P><B>问. </B>如何使用 JavaMail API 来支持中断操作?<BR><B>答:</B>JavaMail 
                  API 规范定义了一些接口,邮件客户端可以使用这些接口来支持中断操作。我们的 IMAP 
                  提供程序实现了这些接口(UIDFolder 接口)。</P>
                  <P><B>问. </B>我如何使用 JavaMail API 
                  来发送安全的电子邮件?<BR><B>答:</B>JavaMail API 目前不支持发送或接收安全电子邮件。JavaMail 
                  API 
                  的体系结构使得可以在以后很容易地添加这一支持,我们可以添加支持,第三方也可以添加支持。有关当前电子邮件安全标准(S/MIME 
                  和 PGP)的信息,可以从如下站点找到: <FONT 
                  color=#594fbf>http://www.imc.org/smime-pgpmime.html</FONT>。 
                  请浏览我们的 <FONT color=#594fbf>第三方产品</FONT> 页,获取来自其他供应商的解决方案。</P>
                  <P><B>问. </B>writeTo() 方法生成了消息文件,但消息中的一些行既不是数据的规范 MIME 表示(即使用 
                  CRLF 来结束行),又没有使用我的平台的规范行分隔符(例如 UNIX 
                  上的“\n”)。如果我需要这些表示时,如何获得它们当中的任何一种表示?<BR><B>答:</B>不管是哪种情形,你都将需要创建合适的 
                  FilterOutputStream 对象来传递给 
                  <CODE>writeTo()</CODE>。FilterOutputStream 
                  将需要接受特定的一些行,它们具有任何常见终止符,然后写出另外的一些特定行,它们只具有期望的行终止符。下面是这种过滤器的一些例子。<CODE><FONT 
                  color=#594fbf>NewlineOutputStream</FONT></CODE> 
                  转换到本地平台的行终止符,当将消息写到文件时,它是有用的。<CODE><FONT 
                  color=#594fbf>CRLFOutputStream</FONT></CODE> 转换到 MIME 规范 CRLF 
                  终止符,当需要规范 MIME 格式时(比如计算数字签名),它是有用的。</P>
                  <P><B>问. </B>我可以使用 JavaMail API 
                  来实现邮件服务器吗?<BR><B>答:</B>JavaMail API 
                  设计目的不是帮你实现邮件服务器。但是,对你来说,一些实用工具类,比如 MIME 
                  消息解析类,可能是有用的。通常您会发现,JavaMail API 
                  是在“简单”而不是在“强有力”方面出错。对于邮件客户端,那是合适的,但对于邮件服务器,结果可能是不同的。</P>
                  <P><B>问. </B>我可以使用 JavaMail API 
                  在我的邮件服务器上添加新的用户账户、删除用户账户或改变用户账户的密码吗?<BR><B>答:</B>JavaMail API 
                  不包括任何工具,用于添加、删除或修改用户账户。在这一方面是没有标准的,每个邮件服务器对它的处理是不同的。</P>
                  <P><B>问. </B>为什么 MimeMessage 类没有实现 
                  Serializable,这样我就可以将消息序列化到磁盘,并在以后读回它?<BR><B>答:</B>JavaMail API 
                  是在现有电子邮件系统上面设计的,并使用了现有的消息格式。对于这样的一些实现,使用 Java 
                  序列化能力既不是必要的,也不是有用的,因此,不能将它作为 JavaMail API 的目标来考虑。</P>
                  <P>有关序列化 Message 的困难部分是保留某些指针,它们指向 Folder(文件夹)、Store(存储)和 
                  Session(会话)。如果只想保存消息的内容,而不是对象本身,消息的 <CODE>writeTo</CODE> 
                  方法将为你完成这一切。如果想根据序列化消息创建整个电子邮件系统,您应该能够编写 Message 等的子类,并在子类中实现 
                  Serializable。</P>
                  <P>如果想序列化自己的引用了 MimeMessages的其他对象,那么你的对

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -