解答JavaMail的安裝和配置問題_JSP教程
推薦:JspSmartUpload上傳常見問題解析因為手頭的項目需要 上傳圖片,初次才用比較流行的jspSmartUpload上傳。 畢竟沒有搞過,弄了一個下午,終于將碰到的問題搞定了。 第一個問題,表單設置:method=post,ENCTYPE=multipart/form-data,只能這樣 第二個問題,不能通過request.getParameter()
工作時遇到的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://ftp.cac.washington.edu/imap/imap.tar.Z。其他的許多供應商提供了支持 Internet 標準的郵件服務器。可以從 IMAP Connection 和 Internet Mail Consortium 獲得更多信息。
問. 我應該使用什么主機名、用戶名或密碼?
答:我們不提供郵件服務器讓你使用。你必須使用自己的郵件服務器,或者使用 Internet 服務提供商或你所工作的公司提供的郵件服務器。網絡管理員可能給你一些必要的信息用于配置 JavaMail,以便同郵件服務器一起工作。
問. 我如何配置 JavaMail 通過代理服務器工作?
答:大多數代理服務器只支持 HTTP 協議。JavaMail 沒有使用 HTTP 協議來閱讀或發送郵件。使用代理服務器的一個主要原因是為了允許企業網絡中的 HTTP 請求通過企業防火墻。防火墻通常會阻止對 Internet 的大多數訪問,但允許來自代理服務器的請求通過。此外,企業網絡內部的郵件服務器將為郵件執行類似的功能,通過 SMTP 接收消息,然后將它們轉發到 Internet 上的最終目的地,以及接收傳入的消息,然后將它們發送到合適的內部郵件服務器。
如果你的代理服務器支持 SOCKS V4 或 V5 協議 (http://www.socks.nec.com/aboutsocks.html, RFC1928),并允許匿名連接,可以告訴 Java 運行時把所有的 TCP socket 直接連接到 SOCKS 服務器。參閱 http://java.sun.com/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 中運行程序時,得到了非常奇怪的錯誤消息,而且程序運行失敗了。錯誤在哪里?
答:通常,錯誤消息看起來像下面這樣:
Exception in thread "main"
java.lang.VerifyError:(Class:com/sun/mail/pop3/POP3Store,
method: finalize Signature :()V)
Illegal use of nonvirtual function call
問題是由于在 Linux 上,使用的 unzip 命令是有 bug 的版本,這樣解壓縮 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: 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 可以產生有用的調試輸出。
除了讀取配置文件的必要權限外,應用程序(和 JavaMail)也將需要一定的權限才可以連接到它使用的郵件服務器。如果應用程序使用 System 屬性來配置 JavaMail(例如,像許多 JavaMail 演示程序所做的那樣,通過傳遞從 System.getProperties() 中返回的 Properties 對象到 Session 構造函數),它也將需要一定的權限才可以使用 System Properties 對象。另外,應用程序可以使用自己的 Properties 對象,以及確信設置 "mail.from" 屬性 或 "mail.user" 和 "mail.host" 屬性(參見 InternetAddress.getLocalAddress() 方法)。
在 JDK 1.2 SecurityManager 中,為了使應用程序能夠使用 JavaMail,應用程序、JavaMail 和 JAF 將需要某些權限,比如下面的一些權限(一定要使用適當的值替換主機名和路徑名);把這些權限添加到應用程序使用的安全策略文件中。
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";
};
問. 如何配置 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
希望對需要的人有所幫助。
分享:JSP上傳文件的兩種實現方法(含詳細代碼)以前用cos作文件上傳,但是對于文件上傳后的改名還需要借助其他的工具。 摘錄如下: 在用Java開發企業器系統的使用,特別是涉及到與辦公相關的軟件開發的時候,文件的上傳是客戶經常要提到的要求.因此有 一套很好文件上傳的解決辦法也能方便大家在這一塊的開發.
- jsp response.sendRedirect不跳轉的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復習整理
- JSP腳本元素和注釋復習總結示例
- JSP FusionCharts Free顯示圖表 具體實現
- 網頁模板:關于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項目中連接Access數據庫的配置方法
- JDBC連接Access數據庫的幾種方式介紹
- 網站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關鏈接:
- 教程說明:
JSP教程-解答JavaMail的安裝和配置問題。