使用geronimo-javamail_1.4发送邮件的有关说明
【我的Segmentfault原文】https://segmentfault.com/a/1190000008054230
?
前言
??之所以要寫這篇文章,是因?yàn)樵谄綍r(shí)工作中出現(xiàn)這樣一種場(chǎng)景,領(lǐng)導(dǎo)要求用JavaMail開(kāi)發(fā)郵件發(fā)送,功能開(kāi)發(fā)測(cè)試好以后,發(fā)現(xiàn)項(xiàng)目用的jar包是geronimo-javamail_1.4_spec-1.3.jar,而不是Oracle官方的mail.jar,兩者不能完全等同。若不清楚這點(diǎn),就會(huì)出現(xiàn)一些不必要的麻煩。
一、關(guān)于Apache Geronimo
??一個(gè)用于企業(yè)系統(tǒng)開(kāi)發(fā)的開(kāi)源項(xiàng)目,你會(huì)驚訝于百度竟然沒(méi)有多少可參考資料,就連百度百科上的介紹也只有幾百字,谷歌上倒有不少介紹,英語(yǔ)不好,暫時(shí)略過(guò)。作為一個(gè)J2EE應(yīng)用服務(wù)器,在Eclipse早已提供開(kāi)發(fā)支持,配置截圖如下:
【百度百科】
Apache Geronimo 是 Apache 軟件基金會(huì)的開(kāi)放源碼J2EE服務(wù)器,它集成了眾多先進(jìn)技術(shù)和設(shè)計(jì)理念。
這些技術(shù)和理念大多源自獨(dú)立的項(xiàng)目,配置和部署模型也各不相同。
Geronimo能將這些項(xiàng)目和方法的配置及部署完全整合到一個(gè)統(tǒng)一、易用的模型中。
??另外,好在IBM developerWorks中國(guó)上給出完整的介紹和詳細(xì)的使用教程,下面介紹內(nèi)容摘自IBM developerWorks中國(guó)的Geronimo 入門:(注:IBM developerWorks中國(guó)有不少關(guān)于它的技術(shù)文章,推薦參考學(xué)習(xí))
-
Geronimo 中集成的開(kāi)放源碼項(xiàng)目|開(kāi)放源碼項(xiàng)目 |說(shuō)明|
| Apache Tomcat 5.5 | 支持 Java Servlet 2.4 和 JavaServer Pages?(JSP) 2.0 的 Web 層應(yīng)用服務(wù)器 |
| Jetty | 支持 Java Servlet 2.4 和 JavaServer Pages?(JSP) 2.0 的 Web 層應(yīng)用服務(wù)器 —— 可以替代 Tomcat 服務(wù)器 |
| ActiveMQ | 開(kāi)放源碼的 Java Message Service(JMS) 1.1 應(yīng)用程序提供者,支持消息驅(qū)動(dòng) bean(MDB) |
| OpenEJB | 開(kāi)放源碼的 Enterprise JavaBeans(EJB)容器系統(tǒng)和 EJB 服務(wù)器,支持 Enterprise JavaBeans 2.1,包括 Container Managed Persistence 2(CMP2)和 EJB Query Language(EJBQL) |
| Apache Axis 和 Scout | 一種 Simple Object Access Protocol(SOAP)實(shí)現(xiàn)(Axis)和 JSR 93(JAXR)實(shí)現(xiàn)(Scout),用于 Web 服務(wù)和 Web Services Interoperability Organization(WS-I) Basic Profile 支持 |
| Apache Derby | 完全成熟的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),支持本機(jī) Java Database Connectivity(JDBC) |
-
集成在 Geronimo 中的開(kāi)放源碼項(xiàng)目|開(kāi)放源碼項(xiàng)目 |說(shuō)明|
| Spring Framework | 流行的應(yīng)用程序框架,用于從輕量級(jí) Inversion of Control(IoC)組件構(gòu)建應(yīng)用程序 |
| ServiceMix | 開(kāi)放源碼工具集,支持 Java Business Integration(JBI)并且為面向服務(wù)體系結(jié)構(gòu)(SOA)實(shí)現(xiàn)提供 Enterprise Service Bus(ESB) |
??當(dāng)然以上介紹的內(nèi)容和我要講的內(nèi)容關(guān)系不大,僅作知識(shí)普及。介紹內(nèi)容好像沒(méi)有提到我說(shuō)的geronimo-javamail_1.4,不過(guò)從我的理解角度來(lái)講,geronimo-javamail_1.4是Apache基于Geronimo開(kāi)發(fā)的JavaMail服務(wù)組件,還有類似的servlet組件和JTA組件等,這些組件都有單獨(dú)的jar包,Geronimo官網(wǎng)上我并沒(méi)找到這些jar包,而是在outofmemory網(wǎng)站的Maven中央倉(cāng)庫(kù)找到的。(http://maven.outofmemory.cn/o...)
二、geronimo-javamail_1.4使用說(shuō)明
1、jar包不全,導(dǎo)致郵件發(fā)送異常報(bào)錯(cuò)
??簡(jiǎn)單將Apache的geronimo-javamail_1.4_spec-1.3.jar等同Oracle官方的mail.jar,沿用原有代碼進(jìn)行郵件發(fā)送測(cè)試,出現(xiàn)如下異常錯(cuò)誤信息:
javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp at javax.mail.Session.getProvider(Session.java:237) at javax.mail.Session.getTransport(Session.java:346)??從報(bào)錯(cuò)信息來(lái)看,是缺少名為smtp的provider,信息很明確,卻不知從何排查。我當(dāng)時(shí)的第一反應(yīng)是,兩者的配置方式可能不同,但從網(wǎng)上大部分給出的意見(jiàn)是用回原來(lái)的mail.jar包(比如stackoverflow:Unable to locate provider for protocol: smtp),以致于我也開(kāi)始放棄其他解決方案。但是當(dāng)我將這種解決方案用在項(xiàng)目中,我開(kāi)始產(chǎn)生另外一種顧慮,geronimo-javamail_1.4會(huì)不會(huì)已經(jīng)在其他功能中使用了?(這個(gè)評(píng)估不到位,就可能導(dǎo)致不必要的風(fēng)險(xiǎn)),再者項(xiàng)目用的是Maven依賴庫(kù),進(jìn)行jar刪除操作也是一件麻煩的事,而僅加多mail.jar又會(huì)引發(fā)其他問(wèn)題(參看JavaMail郵件發(fā)送不成功的那些坑人情況及分析說(shuō)明的“4、jar包重疊存在javax.mail.*”)。
??于是,我又嘗試搜索可能的其他解決方案,不過(guò)這次從我嘗試翻墻試試谷歌,果然無(wú)意間看到了一個(gè)關(guān)于Geronimo JavaMail 1.4的官方指導(dǎo)說(shuō)法,內(nèi)容如下:(鏈接:http://geronimo.apache.org/ma...)
??原來(lái)是因?yàn)槿鄙賕eronimo-javamail_1.4_provider這個(gè)配套jar包,可是在stackoverflow這個(gè)專業(yè)的問(wèn)答社區(qū)網(wǎng)站也沒(méi)見(jiàn)人提及,這也足以說(shuō)明Geronimo JavaMail 1.4確實(shí)還應(yīng)用得不是很廣泛。
2、jar包版本配套不兼容,導(dǎo)致郵件內(nèi)容錯(cuò)誤
??雖然問(wèn)題是找到,但也很快出現(xiàn)的另外一個(gè)問(wèn)題,項(xiàng)目使用的是geronimo-javamail_1.4_spec-1.3.jar,geronimo-javamail_1.4_provider該用哪個(gè)版本呢?我想郵件發(fā)送是基本常用功能,應(yīng)該不會(huì)改動(dòng)太大,代碼應(yīng)該是兼容的。由于沒(méi)有找到官方給的配套版本說(shuō)明,我就先從outofmemory網(wǎng)站的Maven中央倉(cāng)庫(kù)下載了最新的provider-1.8.3.jar。測(cè)試發(fā)現(xiàn)發(fā)送的郵件無(wú)標(biāo)題且內(nèi)容亂碼,一下子拋出了一個(gè)jar包配套兼容性的問(wèn)題。
??抱著試試看的想法,我又下載了provider-1.3.jar和provider-1.4.jar,結(jié)果測(cè)試都正常。這下問(wèn)題來(lái)了,到底選1.3還是1.4呢?把問(wèn)題和風(fēng)險(xiǎn)上報(bào)領(lǐng)導(dǎo),領(lǐng)導(dǎo)也是舉棋不定了...既然官方說(shuō)明是javamail_1.4_spec-1.6.jar配套javamail_1.4_provider-1.7.jar,那javamail_1.4_spec-1.3.jar就參考配套javamail_1.4_provider-1.4.jar吧,也只能這么參考選擇了...(其實(shí)也是一個(gè)不太科學(xué)的選擇方法)
轉(zhuǎn)載于:https://www.cnblogs.com/JackFe/p/6557367.html
總結(jié)
以上是生活随笔為你收集整理的使用geronimo-javamail_1.4发送邮件的有关说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何检索论文被引用情况
- 下一篇: thingworx ADO安装