我正在嘗試開發一個電子郵件分析器 - 用於獲取文件中的電子郵件,並且能夠以編程方式處理各種組件 - 知道發件人和收件人主題,主體和任何附件。我打算將附件提取爲單個文件,但我一開始就陷入困境。即使軟件包位於CLASSPATH中,javax.mail.MimeMessage也不可用
我在一個功能齊全的開發環境中開始了一個已經可以工作的java程序,並開始添加它。其中第一個添加的是這條線(再後來,集線):
import javax.mail.*;
import javax.mail.internet;
import javax.mail.internet.MimeUtility;
後來,在一個合適的地方,我們有這個不起眼的開始:
MimeMessage m = null;
我很震驚地發現,只有這兩個更改會導致編譯失敗,並且I learned here(在另一個StackOverflow頁面上)表示包javax.mail包未包含在標準JDK中。困惑,我看,發現這個:
# rpm -qa | grep -i java
android-json-org-java-4.3-0.2.r3.1.fc21.noarch
snappy-java-1.0.5-2.fc21.noarch
tzdata-java-2015b-1.fc21.noarch
python-javapackages-4.1.0-7.fc21.noarch
postgresql94-jdbc-javadoc-9.3.1101-1.f21.noarch
protobuf-java-2.5.0-11.fc21.x86_64
java-1.8.0-openjdk-1.8.0.40-25.b25.fc21.x86_64
java-1.8.0-openjdk-headless-1.8.0.40-25.b25.fc21.x86_64
javassist-3.18.1-2.fc21.noarch
apache-commons-javaflow-1.0-0.8.20120509SNAPSHOT.fc21.noarch
javapackages-tools-4.1.0-7.fc21.noarch
java-1.8.0-openjdk-devel-1.8.0.40-25.b25.fc21.x86_64
antlr3-java-3.5.2-2.fc21.noarch
javamail-1.5.1-3.fc21.noarch
xz-java-1.5-3.fc21.noarch
abrt-java-connector-1.1.0-2.fc21.x86_64
請注意,是的,實際上,JavaMail安裝 - 版本1.5.1-3。然而,只是成爲腰帶和吊帶挺身而出的人,我發現the JavaMail project並下載了最新的生產版本,並將其放入CLASSPATH中。
令我非常驚訝的是,這並沒有解決問題!作爲謹慎的類型,並保持簡單,以證明我的方式,我只是從庫目錄中刪除了javax.mail.jar文件,然後從我的程序中刪除了兩行,重新編譯並運行。然後,我加回到導入行中,並失敗。然後我將jar文件移回庫目錄,編譯成功,確認javax.mail包正在被加載。
但是,當我在第一次引用庫MimeMessage(參見上面的行)中添加時,編譯失敗。
所以,當然,我去了check the documentation!確實,MimeMessage是一個可用的類。
我在做什麼錯?我的意思是,geez,自從1.0版本以來我一直在使用Java--我不知道犯了太多愚蠢的錯誤,但我想我一定是!
兩個開放式的問題來我的腦海:)爲什麼沒有使用
1安裝JavaMail包的版本?很明顯,我不得不添加它。並且請注意,我不必爲CLASSPATH(或其他任何地方)做任何特殊的事情來獲得Java的其餘部分!和;
2)現在我已經有了一個JavaMail包,爲什麼它沒有發現MimeMessage類?
任何/所有的幫助表示讚賞 - 如果你發現我是非常愚蠢的,請指出我的錯誤輕輕!
附加信息: 我增加了兩條進口線,所以現在有三個上面列出。奇怪的是,當我在CLASSPATH指定的路徑中有.jar文件但沒有明確引用時,每次導入都會出現一個錯誤,但是當我明確引用.jar文件作爲顯式項時,我只會收到一個錯誤!那一個錯誤是:
import javax.mail.internet;
當然,知道這個罐子實際上只是一個拉鍊,我解壓縮,看了看。果然,名爲「互聯網」的目錄在那裏,填充了38個類文件。
某處,我有一個瘋狂的想法,不知何故在系統或CLASSPATH中有另一個javax.mail條目,所以我看了看。這是Fedora Core,所以它位於/ usr/lib下,並且我沒有在其名稱中找到包含字符串「mail」的另一個文件,所以我認爲這不是它。
我在NOTES.txt文件中注意到有一些關於未將某些應用程序的jar解壓縮的註釋,因爲這被視爲安全風險,但我認爲對於我想要做的事情沒有這樣的風險,並且也許它會工作,但我不能得到這個工作要麼......
我也一直在嘗試使用-cp與實際上改變CLASSPATH變量,但它似乎並不重要。我顯然得到了相同的結果,所以我剛剛使用-cp進行測試,因爲嘗試各種替代方法會更快。
你是如何將JAR添加到你的類路徑中的? –
@TimBiegeleisen我只是把它放到CLASSPATH中已經有其他原因需要的庫目錄中。 –
執行Java應用程序的大多數方法實際上並不使用'CLASSPATH'環境變量來確定類路徑。 –