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