我爱电脑技术论坛's Archiver

bbs23 发表于 2008-5-5 11:37

JavaMail应用:安装和配置常见问题的解答

问. 我如何安装 JavaMail API 实现? "hS;_4G~3F'`o

/ygE-l4\P 1K7hl3j p:cKw
答:解压缩分发的 zip 文件,并编辑 CLASSPATH 环境变量以包含 mail.jar 文件,该文件包括在 JavaMail API 分发中。你也需要 JavaBeans Activation Framework(参见下面)的实现。参阅 README 文件(在分发中),获得其他细节和例子。
}$H6tl q xw"i3\ `1l#OP!nWg
HCN#`%u \
问. JavaMail 是否包括所有必要的邮件服务器?
lT V}+T b\
&pJ-gq`%QD
c&WPm%O Je 答:不是,JavaMail API 包不包括任何邮件服务器。为了使用 JavaMail API 包,你将需要访问 IMAP 或 POP3 邮件服务器(用于阅读邮件)和/或 SMTP 邮件服务器(用于发送邮件)。这些邮件服务器通常由 Internet 服务提供商提供,或者作为组织网络基础结构的一部分。如果你不必访问这样的邮件服务器,请往下看。 3q NcW~'w

q[o Kbl"O0H%v
E }o"`-] 问. 从哪里可以获得必要的邮件服务器?
*T#Fv"prt!K`
7qQC.qJ+jf+a 5C'[y1q(j!S
答:Sun Java System Messaging Server 可用于 Solaris 和 Windows 平台。华盛顿大学的 IMAP 服务器支持多种平台 (UNIX、32 位 Windows 等)。可从如下地址获取源代码:[url]ftp://ftp.cac.washington.edu/imap/imap.tar.Z[/url]。其他的许多供应商提供了支持 Internet 标准的邮件服务器。可以从 IMAP Connection 和 Internet Mail Consortium 获得更多信息。
)FpV P r;Yh#s/Gh ;cwea|

+M)xpF [2X*gD 问. 我应该使用什么主机名、用户名或密码? )M:S*GY*fNNhmJ

(avW;XL)_}[.Q [h-Nmf N1B
答:我们不提供邮件服务器让你使用。你必须使用自己的邮件服务器,或者使用 Internet 服务提供商或你所工作的公司提供的邮件服务器。网络管理员可能给你一些必要的信息用于配置 JavaMail,以便同邮件服务器一起工作。
&U~*@*y9lP p+a'g R#Cgj2O?

pQ&G'A#fS.vBIc 问. 我如何配置 JavaMail 通过代理服务器工作? CBE%Dpm)z

pTc"i/`s0~zh 1e2R1\ uR
答:大多数代理服务器只支持 HTTP 协议。JavaMail 没有使用 HTTP 协议来阅读或发送邮件。使用代理服务器的一个主要原因是为了允许企业网络中的 HTTP 请求通过企业防火墙。防火墙通常会阻止对 Internet 的大多数访问,但允许来自代理服务器的请求通过。此外,企业网络内部的邮件服务器将为邮件执行类似的功能,通过 SMTP 接收消息,然后将它们转发到 Internet 上的最终目的地,以及接收传入的消息,然后将它们发送到合适的内部邮件服务器。
?$DnE/Y5l_ &~q6F0kp xO
#?~~C5bJ
如果你的代理服务器支持 SOCKS V4 或 V5 协议 ([url]http://www.socks.nec.com/aboutsocks.html[/url], RFC1928),并允许匿名连接,可以告诉 Java 运行时把所有的 TCP socket 直接连接到 SOCKS 服务器。参阅 [url]http://java.sun.com/j2se/1.4/docs/guide/net/properties.html[/url],获取 socksProxyHost 和 socksProxyPort 属性的最新文档。这些是系统级属性,而不是 JavaMail 会话属性。当调用应用程序时,它们可以从命令行中设置,例如:java -DsocksProxyHost=myproxy ...。这个工具可用于指出从 JavaMail 到 SOCKS 代理服务器进行 SMTP、IMAP 和 POP3 通信。注意,设置这些属性将告诉 所有 TCP socket 连接到 SOCKS 代理,在应用程序的其他方面上,这可能会带来负面影响。
5y5BcaYe Vz [0U a7xX;lGH

#krs:G)rat)Z 假如没有这样的 SOCKS 服务器,如果想使用 JavaMail 来直接访问防火墙外部的邮件服务器,那将需要配置防火墙来允许这一访问。一个简单的 HTTP 代理 Web 服务器是足够的。
C euX4f fPz z+C 6a&fU[H
X%m];WIv-x
问. 如何在 Windows NT 中设置 CLASSPATH?
*|D:C ]%wJ&O0{
y5S6O ^,m6f~i
\$C@'Y V@ 答:详细说明可从 这里 获得。
Qi;L%@&a f p\
*D~-W6_g
3O+~R:Yt[2i/m 问. 当试图在 Linux 中运行程序时,得到了非常奇怪的错误消息,而且程序运行失败了。错误在哪里? i+D,G&Tc[ ?.U1|

7X/@;Wy)L | 1R*~@1a0@7q
答:通常,错误消息看起来像下面这样:
f6ccC*?D#Z
Ay`K/\,`U;@P
} z,t!hH5Q*SH Exception in thread "main"
;}Z)f4vr bY g/q @X?!y:Y!I

`?1F/AK9\.E java.lang.VerifyError:(Class:com/sun/mail/pop3/POP3Store, ;vLP P"ph K/M`

;i2K6Y6XL{ \*YnRnG
method: finalize Signature :()V)
5g8v6Q N gU `n5zE cYs-E|$M!VW

`WJ-t.wd\I;B Illegal use of nonvirtual function call Q:E l'v6Z.}6U
b3xt9x)UB$GM{

^G'g&O*J 问题是由于在 Linux 上,使用的 unzip 命令是有 bug 的版本,这样解压缩 JavaMail 下载包时,unzip 命令破坏了 mail.jar 文件。获取更新版本的 unzip 命令或使用 JDK 的 jar 命令来解压缩下载包。
C*LJ@/O(d5f-no#q&b5f-I 2ti\C#QjE
)|u0X'h&@B
问. 在运行于 SecurityManager 下面的应用程序中,我如何使用 JavaMail;我必须授予应用程序和 JavaMail 什么权限?
%zVL#h3A
#\7G:lz0D2H
9uf k9X,N m,V ? 答:在具有 SecurityManager 的 JDK 1.2(或更新版本)中,当使用 JavaMail 时,JavaMail 读取 mail.jar 文件中的配置文件有时会失败。在从 activation.jar 文件中读取配置文件时,JavaBeans Activation Framework 可能也有相同的问题。这些默认配置文件是作为“资源”文件存储的,并且存储在 jar 文件的 META-INF 目录中。 Omg3w0e0e ?6`T

8]P _ \S
/srA%bJTo9?-i 有许多调试技术可用于决定这是否是个问题。设置 Session 属性“mail.debug”为 true(或调用 session.setDebug(true)),将导致 JavaMail 在试图加载各个配置文件时打印调试消息。形如“DEBUG: cant 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 可以产生有用的调试输出。

bbs23 发表于 2008-5-5 11:38

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

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

B8E6JGp4a {
3sy0U` M6Of.~ L0F0vE&[9K*iM{ Pn
grant { `v&q\x
q(az,a`Z#Hn }
    // following two permissions allow h,BI(@4mP

$p)CK y6Dt*q B     // access to default config files tveOu%wi1^ z/y-d

,}#m6r,WjNZ-Ot     permission java.io.FilePermission fa'wF4Tv;}

H8r1_#~X [0A*Oy"h"|    "/path/to/mail.jar", "read"; $t?1\yaw2f _4b

f,bBA fl     permission java.io.FilePermission 7tx#yreO o1Ug

X2?u;a6yq:i    "/path/to/activation.jar", "read";
4^:_+am p X tK
N g6X e*Y     // following to use SMTP 1V:Z7va;R

sq.r b$w     permission java.net.SocketPermission i8[O;}(H6B/Q

(n8sV;TX    "SMTPHOST:25", "connect,resolve"; Yk0GKE0b*\nXA
]*zO&~H4v2my;Gw
    // following to use IMAP
G9Y0LB5[?]/}e '`z+g QiS`
    permission java.net.SocketPermission
/YK5U(w4r;G s
5JM+EY5X8r}L    "IMAPHOST:143", "connect,resolve";
P y}&m3G+k9d k.\ U$K K ~7C"^*E!Uo
    // following to use POP3 .{(k Z*T3~zR$j

?3Nj+Z7d f     permission java.net.SocketPermission
3G+\})w pR o _|*o4L `
   "POP3HOST:110", "connect,resolve"; H"N2Vb5PbY2k
F$BgU5`3z
    // following needed if System.getProperties() is used f%R;ttY;oyBv.om.s
S#C;Z~ V
    permission java.util.PropertyPermission 9r~9_^{"V*m8|}
.[8y:AS3x8i
   "*", "read,write"; .s4y&T K:y3T

6}g%Li9]5X/J(mef&X   }; ?"n&HD2n

4pY L)Q? B p(LPIU!Br%t
$u ~J6_Ld(FkZ
问. 如何配置 Web 服务器来运行 JavaMail 演示 servlet?
Y4LO)} N7V_p
M Wxu j3Q3nH ]+G #y4D%jo3W'U#vj
答:针对以下 Web 服务器的指导说明可从这里获得:
&J kr"aTcqA Quq7j.}

}I;N&g6H*e Tomcat Ca i7w^1R1fE
@lf-w0MZ#Z$Q
0E,Tz!ee-x&r1v8L
Apache with JServ
N2JP2RMe0{*Y
p\BP$G:R (Oso a`f{
iPlanet Web Server
7FIC0se Y
0Jf2_T_^:T0v
J0o,tO {l Java Web Server K h j Q o/|-`

_.N`F5i N)w6u6MsLE
问. 当在 servlet 中使用 JavaMail 时,未找到任何的 JavaMail 类。我已经在服务器的 CLASSPATH 中添加了 mail.jar? O?AO1c F"r~r7S
%YP GQ+JKo#v

o#CS(cFZ Br 答:当改变 CLASSPATH 时,通常有必要完全重启 Web 服务器。 )F.{ og7L2A!G.s
WpE5`*A6G[f
O#C%q P TM? j a
问. 我的 servlet 可以找到 JavaMail 类,但 JavaMail 抱怨它不能找到针对“smtp”或“imap”的服务提供程序或地址类型“rfc822”。
-U9_r\7E8M WW?+C}0J nqN&^_3}']`

Z'?7g4sl1Xs^ 答:通常这是因为 JavaMail 无法访问 mail.jar 中的配置文件,而这可能是由于安全权限问题造成的;参见 本条目,获取更多的细节。也保证你没有提取 mail.jar 内容;在服务器的 CLASSPATH 中,应该包括未更改的 mail.jar 文件。 :b,n.j"e L to3^s
3e F&LXkLn/PP
:R"[h#|+TUpB
问. 在哪里可以找到 jws.jar?我已经安装了 Java Web Server 2.0,并试图运行 JavaMailServlet。README 文件指示我在 CLASSPATH 中添加 jws.jar。
g9YsZ w ^#V4Y
5_g~$d f#_xJf6o !M h}2wB,q,m
答:jws.jar 不再与 Java Web Server 一起发行(在以前版本中,它们是一起发行的),因此不需要在 CLASSPATH 中添加它。只要在 CLASSPATH 中添加 mail.jar 和 activation.jar,然后重启 Java Web Server。

页: [1]

Powered by 我爱电脑技术论坛 Archiver 6.1.0  © 2001-2007 本SEO插件由网络人站长论坛出品