趙義輝,喬運(yùn)華,張振超,袁金鵬
(北京機(jī)械工業(yè)自動(dòng)化研究所,北京 100120)
隨著企業(yè)信息化的不斷發(fā)展,EIP(企業(yè)信息門戶)在企業(yè)中的應(yīng)用越來越普及,也對(duì)用戶郵件業(yè)務(wù)往來提出了更高的要求。目前幾乎人人都有自己的電子郵箱,有些人甚至有多個(gè)不同的郵箱賬戶,諸如Gmail郵箱、新浪郵箱、網(wǎng)易郵箱、QQ郵箱等等。WebMail是一個(gè)基于Web的電子郵件收發(fā)系統(tǒng),用戶通過WebMail系統(tǒng)可以直接通過瀏覽器進(jìn)行收發(fā)郵件,無需進(jìn)行客戶端的安裝配置;另外,WebMail系統(tǒng)還可以根據(jù)企業(yè)需要與其他業(yè)務(wù)系統(tǒng)(諸如EIP系統(tǒng),ERP系統(tǒng))進(jìn)行集成使用,用戶使用方便快捷。目前在RS10系統(tǒng)集成了WebMail郵件系統(tǒng),這樣在RS10系統(tǒng)中處理業(yè)務(wù)時(shí)將一些處理信息通過郵件形式反饋給其他用戶。而不同企業(yè)存在不同的郵箱賬戶,一些公用免費(fèi)郵箱也存在著多樣性問題,為了讓用戶在處理業(yè)務(wù)在一個(gè)統(tǒng)一的郵箱平臺(tái)上,WebMail郵件系統(tǒng)中通過添加第三方郵箱賬戶便可實(shí)現(xiàn)不同域名的郵箱郵件的實(shí)時(shí)收發(fā),這樣便可以實(shí)現(xiàn)RS10系統(tǒng)平臺(tái)化處理業(yè)務(wù),進(jìn)行統(tǒng)一操作界面下的收發(fā)文辦公等。
Apache James全稱Java Apache Mail Enterprise Server,是Apache組織的子項(xiàng)目之一,是完全基于Java技術(shù),實(shí)現(xiàn)了SMTP、POP3與NNTP等多種郵件相關(guān)協(xié)議的電子郵件服務(wù)器。
WebMail中所使用的郵件服務(wù)器即為Apache James Server 3.0-M3版本。通過前期技術(shù)預(yù)研以及服務(wù)器性能測(cè)試,在RS10系統(tǒng)中集成的WebMail選擇這一郵件服務(wù)器,并在實(shí)際的部署環(huán)境中運(yùn)行性能穩(wěn)定。
RS10系統(tǒng)是集多年ERP系統(tǒng)設(shè)計(jì)、開發(fā)、實(shí)施的經(jīng)驗(yàn),結(jié)合中國(guó)國(guó)情和企業(yè)管理發(fā)展需求,適應(yīng)電子商務(wù)環(huán)境的企業(yè)管理信息化的全面解決方案。RS10系統(tǒng)將以物流、生產(chǎn)、資金三大體系為主線,集成供應(yīng)鏈、客戶關(guān)系管理等外部資源,構(gòu)筑信息交流的綜合平臺(tái),實(shí)現(xiàn)物流、信息流、資金流、責(zé)任流的四流統(tǒng)一。在目前的RS10系統(tǒng)中集成了WebMail郵件系統(tǒng),以便于在制造業(yè)的業(yè)務(wù)系統(tǒng)中處理實(shí)際業(yè)務(wù)時(shí)將處理信息及時(shí)反饋。在WebMail系統(tǒng)中編寫了對(duì)外暴漏的接口以供EIP頁(yè)面調(diào)用,并在EIP系統(tǒng)中設(shè)置了輪詢機(jī)制來調(diào)用WebMail其中一個(gè)讀取未讀郵件數(shù)的接口服務(wù),這樣即可實(shí)時(shí)顯示用戶未讀郵件數(shù)。WebMail系統(tǒng)中的企業(yè)通訊錄數(shù)據(jù)均來自于EIP系統(tǒng),用戶的通訊錄數(shù)據(jù)是一致的,故在Oracle數(shù)據(jù)庫(kù)設(shè)計(jì)方面也保持了一致性,通過設(shè)置用戶的數(shù)據(jù)庫(kù)連接配置文件,使得WebMail獲取的通訊錄數(shù)據(jù)與EIP系統(tǒng)中的是一致的。
W e b M a i l系統(tǒng)使用了三個(gè)開源框架:SiteMesh(2.4.1)、Spring(2.5.6)、Hibernate(3)作為支撐。SiteMesh應(yīng)用Decorator模式,用filter截取request和response,把頁(yè)面組件head,content,banner結(jié)合為一個(gè)完整的視圖,提高了頁(yè)面的可維護(hù)性和復(fù)用性。Spring是基于控制反轉(zhuǎn)(Inversion of Control ,IoC)和面向切面(Aspect Oriented Programming ,AOP)的容器框架,提供了WebMail接口層,其他RS10的子業(yè)務(wù)系統(tǒng)在需要郵件收發(fā)功能時(shí),直接進(jìn)行調(diào)用。Hibernate是為郵件系統(tǒng)的MySql數(shù)據(jù)庫(kù)提供數(shù)據(jù)持久化支撐的。
首先配置郵件服務(wù)器,通過配置 James Server安裝目錄james-serverconf下的database.properties、dnsservice.xml、domainlist.xml、mailecontainer.xml等文件后運(yùn)行james-serverin目錄下的run.bat啟動(dòng)James服務(wù)器。在啟動(dòng)過程中注意觀察控制臺(tái)提示啟動(dòng)成功后,檢查MySQL數(shù)據(jù)庫(kù)成功創(chuàng)建數(shù)據(jù)表:james_domain,james_mail,james_mail_header,james_mail_property,james_mail_userflag,james_mailbox,james_recipient_rewrite,james_subscription,james_user,openjpa_sequence_table。這些表結(jié)構(gòu)都是James要使用的,其中的james_mail即為郵件表,用于存儲(chǔ)郵件信息?;诂F(xiàn)有的數(shù)據(jù)表,只修改james_mailbox表結(jié)構(gòu)便可實(shí)現(xiàn)WebMail收取第三方郵件。新增NETBOX_PASSWORD,PASSWORD_HASH_ALGORITHM,NEWEST_SENT_DATE 字段,下圖即為修改后的james_mailbox表結(jié)構(gòu):
其中NETBOX_PASSWORD字段為其他郵箱賬戶的密碼(加密后);PASSWORD_HASH_ALGORIHTM字段為密碼加密所使用的算法;NEWEST_SENT_DATE為最新的收取郵件時(shí)間。
收發(fā)第三方郵件的系統(tǒng)處理流程:
通過前臺(tái)表單提交業(yè)務(wù)系統(tǒng)中的使用到的第三方郵箱賬戶及密碼,通過郵箱用戶名后綴來獲取第三方郵箱服務(wù)器地址。WebMail先通過Authenticator類認(rèn)證用戶名密碼,需要SSL加密連接的進(jìn)行SSL加密處理,然后獲取session,并且連接到了第三方郵箱的相應(yīng)賬戶下的store,打開相應(yīng)的Folder,就可得到所有郵件(本W(wǎng)ebMail考慮到郵箱容量的限制,設(shè)置為獲取最近三個(gè)月的郵件),注意獲得郵件后及時(shí)關(guān)閉連接 。
驗(yàn)證通過的第三方郵件賬戶、選定的哈希算法以及通過選定的哈希算法對(duì)第三方郵箱賬戶下的密碼進(jìn)行加密處理之后存儲(chǔ)到j(luò)ames_mailbox表中。
通過此方法獲取到的郵件Message對(duì)象是只讀的,此時(shí)必須要新建一個(gè)Message對(duì)象,將獲得的只讀的郵件對(duì)象中的信息解析后設(shè)置到新建的Message對(duì)象中。因無法直接將郵件對(duì)象通過Hibernate存儲(chǔ)到j(luò)ames_mail表中(考慮到此方法的復(fù)雜性,涉及到Apache James服務(wù)器自動(dòng)處理的其他幾張表,RS10系統(tǒng)中的外部郵件處理均通過Apache James處理存儲(chǔ)到數(shù)據(jù)庫(kù)中,并且對(duì)郵件數(shù)據(jù)庫(kù)中郵件的處理不影響實(shí)際第三方郵箱服務(wù)器),此時(shí)可以考慮將此封郵件發(fā)送至當(dāng)前用戶的WebMail賬戶下,并將其他信息通過一定的方式組合后添加至郵件主題中。全部第三方郵件通過James Server發(fā)送成功之后,將以上處理的所有郵件的發(fā)件人、發(fā)送時(shí)間、收件人進(jìn)行批修改,前臺(tái)獲取數(shù)據(jù)展示時(shí)通過jstl標(biāo)簽來處理郵件主題及收件人信息。每次收取郵件后,在james_mailbox表中的NEWEST_SEND_DATE字段記錄最新的收取時(shí)間,下次收取郵件保證只收取在該收取時(shí)間之后的郵件。系統(tǒng)連接第三方郵箱服務(wù)器并通過POP3協(xié)議收取郵件部分關(guān)鍵代碼:
在RS10系統(tǒng)中即可以第三方賬戶發(fā)送郵件,通過進(jìn)入WebMail第三方郵箱郵件列表頁(yè)面上的發(fā)郵件來實(shí)現(xiàn)。通過記錄的第三方賬戶,從james_mailbox表中讀取加密后的密碼,并通過解密算法來獲得真正的密碼,然后通過該第三方賬戶及密碼連接第三方郵件服務(wù)器,連接之后通過SMTP協(xié)議發(fā)送郵件。通過SMTP協(xié)議發(fā)送郵件部分關(guān)鍵代碼:
在RS10系統(tǒng)實(shí)際的業(yè)務(wù)處理中,存在著郵件信息交互的郵箱多樣性問題,而且不同企業(yè)往往使用不同的企業(yè)郵件,這樣在企業(yè)辦公中的郵件收發(fā)存在著多個(gè)郵箱操作平臺(tái),這給企業(yè)信息交流、公文收發(fā)等實(shí)際的業(yè)務(wù)流程處理帶來了極大的麻煩,諸如本研究所每個(gè)用戶既有oa辦公郵箱賬戶,又有ac.cn郵箱賬戶,在處理不同郵箱郵件需要登錄不同的郵箱收發(fā)郵件。本文提出的解決方案,在RS10系統(tǒng)下的EIP信息門戶中集成了WebMail郵件系統(tǒng),并很好地將多個(gè)不同域名郵箱中郵件集中到了這一統(tǒng)一的郵件平臺(tái)上,為用戶提供了統(tǒng)一的收發(fā)業(yè)務(wù)郵件接口,并在數(shù)據(jù)庫(kù)后臺(tái)可以統(tǒng)一集中管理郵件數(shù)據(jù)信息,提高了RS10系統(tǒng)的業(yè)務(wù)數(shù)據(jù)安全性以及業(yè)務(wù)辦理效率。
[1] 張孝祥,方立勛.JAVA郵件開發(fā)詳解[M].電子工業(yè)出版社,2007.
[2] http://james.apache.org.[EB/OL].
[3] 張紅斌.java2高級(jí)程序設(shè)計(jì)[M].中科多媒體出版社,2001.
[4] 李峰,劉彥隆.基于SSH框架與jQuery技術(shù)的JavaWeb開發(fā)應(yīng)用[J].科技情報(bào)開發(fā)與經(jīng)濟(jì),2010,20(6):106-108,117.
[5] 孫衛(wèi)琴.精通hibernate[M].電子工業(yè)出版社,2005.
[6] 陸天波,王娟,李俊娥.基于Java Servlet的WebMail系統(tǒng)[J].計(jì)算機(jī)工程與設(shè)計(jì),2002,23(10):38-39,43.
[7] 朱玲.基于James的WebMail的設(shè)計(jì)與實(shí)現(xiàn)[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2007(7):38-39,44.