畢業(yè)設計system based on web with e protocol and system functions_第1頁
已閱讀1頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  基于WEB的電子郵件系統(tǒng)郵件協(xié)議研究與系統(tǒng)功能實現(xiàn)</p><p>  摘要:通過分析JavaMail的實現(xiàn)原理,采用開源框架Struts,Spring,Hibernate和面向對象的方法實現(xiàn)基于WEB的電子郵件系統(tǒng)功能。論文研究了接收郵件的和解析郵件的工作原理,并闡述了如何實現(xiàn)。本系統(tǒng)中我主要負責用戶注冊、登陸、退出、接收站內信、讀取站內信、移動站內信、刪除站內信、設置其他郵箱、收取其他郵

2、箱郵件、解析其他郵箱郵件、刪除其他郵箱郵件、系統(tǒng)管理等功能的實現(xiàn)。</p><p>  關鍵詞:JavaMail;Struts;Spring;Hibernate </p><p>  system based on web with e protocol and system functions</p><p>  Abstract:Through analysis

3、 JavaMail of the realization of the principle of open-source framework for the use of Struts, Spring, Hibernate and object-oriented method of web-based e system. Research papers to receive e messages and the work of anal

4、ytic theory, and explained , login, exit, receiving station within the letter, read a letter station, mobile station letter letter to delete stations, set up other mail, receive mail to other e Mail resolve to delete the

5、 other E messages, the system manag</p><p>  Keywords: JavaMail;Struts;Spring;Hibernate </p><p><b>  目錄</b></p><p><b>  第1章 引言4</b></p><p>  1.

6、1 基于WEB的電子郵件選題目的和意義4</p><p>  1.2 基于WEB的電子郵件國內外研究現(xiàn)狀5</p><p>  1.3 基于WEB的電子郵件系統(tǒng)開發(fā)研究方法與策略6</p><p>  1.4 基于WEB的電子郵件系統(tǒng)軟件開發(fā)的可行性6</p><p>  1.5 系統(tǒng)開發(fā)與運行環(huán)境6</p><

7、p>  1.5.1 系統(tǒng)開發(fā)環(huán)境6</p><p>  1.5.2 軟件運行環(huán)境7</p><p>  第2章 系統(tǒng)開發(fā)相關技術8</p><p>  2.1 Struts簡介8</p><p>  2.1.1 優(yōu)點:8</p><p>  2.1.2 缺點:8</p><p>

8、;  2.2 Spring簡介9</p><p>  2.3 Hibernate簡介9</p><p>  2.4 MVC簡介10</p><p>  2.5 JavaMail API研究10</p><p>  2.5.1 JavaMail API簡介10</p><p>  2.5.2 相關協(xié)議一覽11

9、</p><p>  2.5.3 JavaMail安裝12</p><p>  2.5.4 JavaMail API 詳解13</p><p>  2.5.5 使用JavaMail API17</p><p>  2.5.6 郵件認證18</p><p>  第3章 概要設計19</p><

10、;p>  第4章 詳細設計與編碼實現(xiàn)20</p><p>  4.1 程序包的結構20</p><p>  4.2系統(tǒng)的功能模塊的詳細設計與實現(xiàn)20</p><p>  4.2.1 用戶注冊登錄模塊20</p><p>  4.2.2 站內接收郵件模塊23</p><p>  4.2.3 其他郵箱模塊

11、26</p><p>  4.2.4 系統(tǒng)管理模塊29</p><p><b>  第5章 結論30</b></p><p>  第6章 參考文獻32</p><p>  第7章 致謝錯誤!未定義書簽。</p><p><b>  第1章 引言</b></p&g

12、t;<p>  1.1 基于WEB的電子郵件選題目的和意義</p><p>  電子郵件是80年代初新起的一種基于計算機網(wǎng)絡技術,采用存儲和轉發(fā)方式傳遞交換信息的快捷,高效,廉價的電子信息業(yè)務,是計算機互聯(lián)網(wǎng)系統(tǒng)中提供的一項基本服務。</p><p>  電子郵件作為一種現(xiàn)代化通信工具可以傳遞文字,圖表,聲音,電影等各類信息,其傳遞速度也是傳統(tǒng)郵件所無法比擬的。其主要應用領域

13、是電子郵件服務。用戶將要發(fā)送的信息以規(guī)定的格式通過通信網(wǎng)絡發(fā)送到收信人的信箱中,信箱實際上與通信網(wǎng)絡相連的計算機存儲器,收信人可以通過通信網(wǎng)絡隨時打開自己的信箱,看到別人發(fā)來的信件,同時可以利用自己的信箱寫回信或發(fā)送信件。</p><p>  電子郵件服務在信息的交流,傳播,檢索,管理等領域的應用越來越廣泛,隨著電子郵件數(shù)量的增加,需求多樣化,電子郵件技術的發(fā)展趨勢也越趨于更細致化,更復雜化。作為電子郵件的信息服

14、務平臺的郵件系統(tǒng)使整個電子郵件世界的核心,也是個性化增值信息服務的關鍵技術。電子郵件系統(tǒng)是在模擬郵政系統(tǒng)基礎上,汲取電報,電傳,傳真技術和計算機信息技術的精華,利于處處轉發(fā)的通信方式,在開放系統(tǒng)互聯(lián)國際標準中形成為網(wǎng)絡用于傳送消息和文件提供一個可靠,異步,垮平臺的機制,可以實現(xiàn)點到點和點到多結點上的網(wǎng)絡用戶間的通信。</p><p>  電子郵件系統(tǒng)經(jīng)過幾十年的發(fā)展,已經(jīng)形成了完善的技術體系。電子郵件系統(tǒng)的發(fā)展經(jīng)

15、歷了遠程登陸模式,專用客服端模式,基于WEB的模式,目前正向WAP模式遷移。隨著互聯(lián)網(wǎng)的飛速發(fā)展,電子郵件的用戶數(shù)量也業(yè)務量的急增,種類繁多的商業(yè)增值服務需求以及用戶對服務種類的智能化需求,向負載它們的電子郵件系統(tǒng)服務的種類,容量,技術支持,付費方式等方面提出了挑戰(zhàn)。郵件服務系統(tǒng)在保留了電子郵件系統(tǒng)最初的收發(fā)郵件,郵件存儲等基本功能的同時,融入了最新的計算機與網(wǎng)絡技術,是電子郵件系統(tǒng)有了全新的改觀。</p><p&g

16、t;  電子郵件已經(jīng)成為人們喜愛的通信方式之一,是信息交流的重要手段之一,也是單位加強信息交流的重要手段。在我國信息化的過程中,郵件系統(tǒng)已經(jīng)成為信息系統(tǒng)中必不可少的一部分。傳統(tǒng)的郵件系統(tǒng)分為郵件服務器和客服端,即ClientServer(CS)結構。用戶通過郵件客戶端來接受和發(fā)送郵件。近年來隨著web技術的不斷成熟,采用瀏覽器和服務器BrowserServer形式的軟件層出不窮,并在實際應用中得到了良好的效果。BS結構同傳統(tǒng)的CS結構相

17、比具有對客戶機的低要求,較低的開發(fā)成本,方便的維護,軟件的高復用性等優(yōu)點。</p><p>  因此,系統(tǒng)采用BS結構,即用戶以web方式進行接收和發(fā)送郵件。</p><p>  1.2 基于WEB的電子郵件國內外研究現(xiàn)狀</p><p>  國內很多企事業(yè)單位都有自己的郵件服務系統(tǒng),免費郵箱有163,新浪等,用戶對電子郵件安全性、可靠性及功能上的要求也在不斷提高。

18、因此,電子郵件服務供應商必須提供更安全、更可靠、功能更豐富的服務,才能發(fā)展業(yè)務,吸引用戶,從眾多競爭者中脫穎而出。如何構建高效、穩(wěn)定、安全、易用、可擴展、功能豐富的電子郵件系統(tǒng)是眾多電信運營商、ISP(Internet Service Provider)、ICP(Internet Content Provider)共同面臨的問題。郵件服務器供應商致力于以下幾個方面提高郵件服務功能:</p><p>  (1)增加

19、多用戶模板的功能,以滿足不同用戶對界面的不同喜好,如提供多種郵件webmail頁面風格,提供個性化模板和多風格信紙,用戶可以定義郵件系統(tǒng)界面等。</p><p>  (2)增加防病毒模塊,以增加E統(tǒng)整體的安全性,利用郵件加密和郵件簽名等方法進行郵件傳送。在服務器端使用防病毒模塊。將電子郵件系統(tǒng)向統(tǒng)一信息系統(tǒng)發(fā)展,加入最新資訊,多媒體等功能。反垃圾郵件為用戶提供反垃圾郵件的多種過濾器,充分保證用戶收到最低限度的垃圾

20、郵件騷擾。</p><p>  1.3 基于WEB的電子郵件系統(tǒng)開發(fā)研究方法與策略</p><p>  (1)查看163郵箱、郵箱等,研究它們的實現(xiàn)方式,結合自己要實現(xiàn)的系統(tǒng)找到合適的切入點。</p><p>  (2)本課題要求對MVC有一定的掌握,熟悉Struts、Spring、Hibernate、MySQL、Tomcat的使用,以及有較強的自學能力和熟練使用M

21、yElipse開發(fā)環(huán)境的能力。</p><p>  (3)對于技術難題先查資料,找不到答案詢問同學和老師,請求幫助。</p><p>  1.4 基于WEB的電子郵件系統(tǒng)軟件開發(fā)的可行性</p><p><b>  (1)技術可行性</b></p><p>  本系統(tǒng)主要用到開源框架Struts、Spring、Hiber

22、nate,有很多的書籍和資料介紹如何使用這些框架,JAVA是目前較為流行的技術,有一定的編程基礎就能快速學習JAVA,所以在技術上是可行的。</p><p><b>  (2)經(jīng)濟可行性</b></p><p>  由于本系統(tǒng)是本科畢業(yè)設計的題目,這樣的系統(tǒng)對于大多數(shù)企業(yè)來說不用花費高昂的代價去架設企業(yè)郵箱,企業(yè)可以使用我們開發(fā)的系統(tǒng)。我們本科生也有充裕的時間去開發(fā)這

23、樣的一個系統(tǒng),只需要一臺電腦和人力,不需要很大的投資。所以在經(jīng)濟上是可行的。 </p><p><b>  (3)操作可行性</b></p><p>  本系統(tǒng)采用當前最為流行的技術Struts+Spring+Hibernate框架去實現(xiàn),擴展性很強,對于以后有比較好的特性也能很快速和方便的添加上去,所以在操作上是可行的。</p><p>  

24、1.5 系統(tǒng)開發(fā)與運行環(huán)境</p><p>  1.5.1 系統(tǒng)開發(fā)環(huán)境</p><p><b>  (1)JAVA環(huán)境</b></p><p>  采用的是JDK1.6,我們要開發(fā)的系統(tǒng)是基于J2EE,需要安裝J2SE,J2SE SDK是開發(fā)任何Java系統(tǒng)必須安裝的工具包。</p><p><b>  (2

25、)數(shù)據(jù)庫</b></p><p>  采用的是MySQL5.1,MySQL是最受歡迎的開源SQL數(shù)據(jù)庫管理系統(tǒng),是一個快捷的、可靠的和易于使用的數(shù)據(jù)庫服務器。</p><p><b>  (3)Web服務器</b></p><p>  采用的是Tomcat6.0.18解壓版本,Tomcat是Apache-Jarkarta的一個子項目

26、,是一個免費的、開放源碼的、支持JSP和Servlet技術的容器,它同時又是一個Web服務器軟件。Tomcat很受廣大程序員的喜歡,因為它運行時占用的系統(tǒng)資源小,擴展性好,支持負載平衡與郵件服務等開發(fā)應用系統(tǒng)常用的功能。Tomcat是一個小型的輕量級應用服務器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調試JSP程序的首選。</p><p>  (4)集成開發(fā)工具MyEclipse</p

27、><p>  MyEclipse是目前最流行的J2EE應用集成開發(fā)工具。MyEclipse一經(jīng)出現(xiàn)就以其功能強大、插件豐富的特性贏得了認可,其主要的屬性有強大的插件功能、代碼重構和代碼自動生成功能、快速修復錯誤、調整組織導入包、彈出窗口進行代碼自動裝配。由于功能強大,MyEclipse成為J2EE IDE領域的霸主,它能夠很好地與MySQL、Tomcat進行集成。本系統(tǒng)中我們選用MyEclipse7.0作為開發(fā)工具。

28、</p><p>  1.5.2 軟件運行環(huán)境</p><p><b>  (1)軟件系統(tǒng)環(huán)境</b></p><p>  Windows XP操作系統(tǒng)、Linux系統(tǒng)。</p><p><b>  (2)硬件系統(tǒng)環(huán)境</b></p><p>  普通的計算機,局域網(wǎng),以及能

29、夠連接上的Internet。</p><p>  第2章 系統(tǒng)開發(fā)相關技術</p><p>  2.1 Struts簡介</p><p>  Struts只是一個MVC框架(Framework),用于快速開發(fā)Java Web應用。Struts實現(xiàn)的重點在C(Controller),包括ActionServletRequestProcessor和我們定制的Action

30、,也為V(View)提供了一系列定制標簽(Custom Tag)。但Struts幾乎沒有涉及M(Model),所以Struts可以采用JAVA實現(xiàn)的任何形式的商業(yè)邏輯。 </p><p>  2.1.1 優(yōu)點:     Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟件,這是它的一大優(yōu)點。使開發(fā)者能更深入的了解其內部實現(xiàn)機制。<

31、;/p><p>  Taglib和頁面導航。Taglib是Struts的標記庫,靈活動用,能大大提高開發(fā)效率。另外,就目前國內的JSP開發(fā)者而言,除了使用JSP自帶的常用標記外,很少開發(fā)自己的標記,或許Struts是一個很好的起點。關于頁面導航,我認為那將是今后的一個發(fā)展方向,事實上,這樣做,使系統(tǒng)的脈絡更加清晰。通過一個配置文件,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著莫大的好處。尤其是當另一批開發(fā)者

32、接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。</p><p>  2.1.2 缺點:     Taglib是Struts的一大優(yōu)勢,但對于初學者而言,卻需要一個持續(xù)學習的過程,甚至還會打亂你網(wǎng)頁編寫的習慣,但是,當你習慣了它時,你會覺得它真的很棒。Struts將MVC的Controller一分為三,在獲得結構更加清晰的同時,也增加了系統(tǒng)的復雜度。雖然它現(xiàn)在還有不少缺點,但它是

33、一種非常優(yōu)秀的J2EE MVC實現(xiàn)方式。 </p><p>  2.2 Spring簡介</p><p>  Spring是一個輕型容器(light-weight container),其核心是Bean工廠(Bean Factory),用以構造我們所需要的M(Model)。在此基礎之上,Spring提供了AOP(Aspect-Oriented Programming, 面向層面的編程)的實

34、現(xiàn),用它來提供非管理環(huán)境下申明方式的事務、安全等服務;對Bean工廠的擴展ApplicationContext更加方便我們實現(xiàn)J2EE的應用;DAOORM的實現(xiàn)方便我們進行數(shù)據(jù)庫的開發(fā);Web MVC和Spring Web提供了Java Web應用的框架或與其他流行的Web框架進行集成。</p><p>  2.3 Hibernate簡介</p><p>  Hibernate顧名思義冬眠

35、的意思,相信它的創(chuàng)造者的用意在于用這個工具將數(shù)據(jù)庫連接持久化層冬眠,關于Hibernate網(wǎng)上爭論很多,有人說其為工具,有人說其為框架,我相信一個人有一個人理解問題的角度,只要處理問題的方法正確就可以了。Hibernate是采用ORM映射機制的持久層開發(fā)工具,它是JAVA應用和關系數(shù)據(jù)庫之前的橋梁,負責JAVA對象和關系數(shù)據(jù)之間的映射。內部封裝了JDBC訪問數(shù)據(jù)庫的操作,向上層應用提供了面向對象的數(shù)據(jù)庫訪問API,在JAVA應用中使用到

36、Hibernate包含如下步驟。</p><p>  (1)創(chuàng)建Hibernate配置文件</p><p><b>  (2)創(chuàng)建持久類</b></p><p>  (3)創(chuàng)建對象-關系-映射文件</p><p>  (4)通過HibernateAPI編寫訪問數(shù)據(jù)庫的代碼</p><p>  如果

37、想了解Hibernate或者是要學習它的人必須要首先了解兩個比較重要的概念:</p><p>  (1)POJO:在Hibernate中理解為數(shù)據(jù)庫表所對應的Domain Object,如果從子面上理解就是無格式普通JAVA對象,簡單的理解就是一個不包含邏輯代碼的值對象。從數(shù)據(jù)層面上看,POJO作為數(shù)據(jù)實體的對象化表現(xiàn)形式,也成為實體。</p><p>  (2)ORM:ORM可以理解成一

38、種機制也可以理解成一種模式,對象-關系-映射,我個人覺得如果想理解它可以和MVC比較,模型-視圖-控制。ORM是把對象和關系數(shù)據(jù)庫映射到一起,而MVC是把視圖和模型控制在一起。</p><p>  創(chuàng)建Hibernate的配置文件Hibernate從中讀取和數(shù)據(jù)庫連接的相關信息,這個配置文件應該位于應用的classpath中,主要有兩種形式XML格式和.Properteis信息文件。創(chuàng)建持久化類就是指需要被Hib

39、ernate持久化到數(shù)據(jù)庫中的類,持久化類通常都是模型中的實體類,符合JavaBean的規(guī)范,包含一些屬性,以及與之對應的get、set方法。</p><p><b>  2.4 MVC簡介</b></p><p>  MVC是三個單詞的縮寫,分別為:模型(Model),視圖(View)和控制Controller)。</p><p>  MVC

40、模式的目的就是實現(xiàn)Web系統(tǒng)的職能分工。 Model層實現(xiàn)系統(tǒng)中的業(yè)務邏輯,通??梢杂肑avaBean或EJB來實現(xiàn)。View層用于與用戶的交互,通常用JSP來實現(xiàn)。Controller層是Model與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當?shù)囊晥D以用于顯示,同時它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作。</p><p>  2.5 JavaMail API研究</p>

41、<p>  2.5.1 JavaMail API簡介 </p><p>  JavaMail API是讀取、撰寫、發(fā)送電子信息的可選包。我們可用它來建立如Eudora、Foxmail、MS Outlook Express一般的郵件用戶代理程序(Mail User Agent,簡稱MUA)。而不是像sendmail或者其它的郵件傳輸代理(Mail Transfer Agent,簡稱MTA)程序那樣可以傳送

42、、遞送、轉發(fā)郵件。從另外一個角度來看,我們這些電子郵件用戶日常用MUA程序來讀寫郵件,而MUA依賴著 MTA處理郵件的遞送。 </p><p>  2.5.2 相關協(xié)議一覽 </p><p>  4大信息傳輸協(xié)議: SMTP 、POP 、IMAP 、MIME,上面的4個協(xié)議,并不是全部,還有NNTP和其它一些協(xié)議可用于傳輸信息,但是由于不常用到,所以本文便不提及了。理解這4個基本的協(xié)議有助

43、于我們更好的使用JavaMail API。然而JavaMail API是被設計為與協(xié)議無關的,目前我們并不能克服這些協(xié)議的束縛。確切的說,如果我們使用的功能并不被我們選擇的協(xié)議支持。</p><p><b>  (1)SMTP</b></p><p>  簡單郵件傳輸協(xié)議定義了遞送郵件的機制。</p><p><b>  (2)POP

44、</b></p><p>  POP是一種郵局協(xié)議,目前為第3個版本,即眾所周知的POP3。POP定義了一種用戶如何獲得郵件的機制。它規(guī)定了每個用戶使用一個單獨的郵箱。大多數(shù)人在使用POP時所熟悉的功能并非都被支持,例如查看郵箱中的新郵件數(shù)量。而這個功能是微軟的Outlook內建的,那么就說明微軟 Outlook之類的郵件客戶端軟件是通過查詢最近收到的郵件來計算新郵件的數(shù)量來實現(xiàn)前面所說的功能。因此在

45、我們使用JavaMail API時需要注意,當需要獲得如前面所講的新郵件數(shù)量之類的信息時,我們不得不自己進行計算。 </p><p><b>  (3)IMAP</b></p><p>  IMAP使用在接收信息的高級協(xié)議,目前版本為第4版,所以也被稱為IMAP4。需要注意的是在使用IMAP時,郵件服務器必須支持該協(xié)議。從這個方面講,我們并不能完全使用IMAP來替代P

46、OP,不能期待IMAP在任何地方都被支持。假如郵件服務器支持IMAP,那么我們的郵件程序將能夠具有以下被IMAP所支持的特性:每個用戶在服務器上可具有多個目錄,這些目錄能在多個用戶之間共享。 </p><p>  其與POP相比高級之處顯而易見,但是在嘗試采取IMAP時,我們認識到它并不是十分完美的:由于IMAP需要從其它服務器上接收新信息,將這些信息遞送給用戶,維護每個用戶的多個目錄,這都為郵件服務器帶來了高負

47、載。并且IMAP與POP的一個不同之處是POP用戶在接收郵件時將從郵件服務器上下載郵件,而IMAP允許用戶直接訪問郵件目錄,所以在郵件服務器進行備份作業(yè)時,由于每個長期使用此郵件系統(tǒng)的用戶所用的郵件目錄會占有很大的空間, 這將直接導致郵件服務器上磁盤空間暴漲。 </p><p><b>  (4)MIME </b></p><p>  MIME并不是用于傳送郵件的協(xié)議

48、,它作為多用途郵件的擴展定義了郵件內容的格式:信息格式、附件格式等等。一些RFC標準都涉及了MIME: RFC 822, RFC 2045, RFC 2046, RFC 2047。</p><p>  (5)NNTP和其它的第三方協(xié)議 </p><p>  JavaMail API在設計時考慮到與第三方協(xié)議實現(xiàn)提供商之間的分離,我們可以很容易的添加一些第三方協(xié)議。</p>&

49、lt;p>  2.5.3 JavaMail安裝 </p><p>  (1)安裝JavaMail</p><p>  為了使用JavaMail API,需要下載文件名格式為javamail-[version].zip的文件(這個文件中包括了JavaMail實現(xiàn)),并將其中的mail.jar文件添加到CLASSPATH中。這個實現(xiàn)提供了對SMTP、IMAP4、POP3的支持。 <

50、/p><p>  (2) 安裝JavaBeans Activation Framework</p><p>  在安裝了JavaMail之后,我們還需要安裝JavaBeans Activation Framework,因為這個框架是JavaMail API所需要的。如果我們使用J2EE的話,那么我們并無需單獨下載JavaMail,因為它存在于J2EE.jar中,只需將J2EE.jar加入到 C

51、LASSPATH即可。此框架增加了對任何數(shù)據(jù)塊的分類、以及對它們的處理的特性。這些特性是JavaMail API需要的。 </p><p>  2.5.4 JavaMail API 詳解</p><p>  (1) JavaMail環(huán)境 </p><p>  A.JavaMail核心類結構 </p><p>  在javax.mail的包下面

52、存在著一些核心類:Session、Message、Address、Authenticator、Transport、Store、Folder。而且在javax.mail.internet包中還有一些常用的子類。 </p><p>  B.Session </p><p>  Session類定義了基本的郵件會話,就像 會話那樣,我們進行收發(fā)郵件的工作都是基于這個會話的。Session對象利用

53、了java.util.Properties對象獲得了郵件服務器、用戶名、密碼信息和整個應用程序都要使用到的共享信息。 </p><p>  Session類的構造方法是私有的,所以我們可以使用Session類提供的getDefaultInstance()這個靜態(tài)工廠方法獲得一個默認的Session對象: </p><p>  Properties props = new Propertie

54、s(); </p><p>  Session session = Session.getDefaultInstance(props, null); </p><p>  或者使用getInstance()這個靜態(tài)工廠方法獲得自定義的Session: </p><p>  Properties props = new Properties(); </p>

55、<p>  Session session = Session.getInstance(props, null); </p><p>  C.Message </p><p>  當我們建立了Session對象后,便可以被發(fā)送的構造信息體了。在這里SUN提供了Message類型來幫助開發(fā)者完成這項工作。由于 Message是一個抽象類,大多數(shù)情況下,我們使用javax.mai

56、l.internet.MimeMessage這個子類,該類是使用MIME類 型、MIME信息頭的郵箱信息。信息頭只能使用US-ASCII字符,而非ASCII字符將通過編碼轉換為ASCII的方式使用。 </p><p>  為了建立一個MimeMessage對象,我們必須將Session對象作為MimeMessage構造方法的參數(shù)傳入: </p><p>  MimeMessage mess

57、age = new MimeMessage(session); </p><p>  注意:對于MimeMessage類來講存在著多種構造方法,比如使用輸入流作為參數(shù)的構造方法。 </p><p>  在建立了MimeMessage對象后,我們需要設置它的各個part,對于MimeMessage類來說,這些part就是MimePart接口。最基本的設置信息內容的方法就是通過表示信息內容和米

58、么類型的參數(shù)調用setContent()方法: </p><p>  message.setContent("lgpzll", "textplain"); </p><p>  然而,如果我們所使用的MimeMessage中信息內容是文本的話,我們便可以直接使用setText()方法來方便的設置文本內容。 </p><p> 

59、 message.setText("lgpzll"); </p><p>  前面所講的兩種方法,對于文本信息,后者更為合適。而對于其它的一些信息類型,比如HTML信息,則要使用前者。 </p><p>  使用setSubject()方法對郵件設置郵件主題:</p><p>  message.setSubject("First&qu

60、ot;); </p><p>  D.Address </p><p>  像Message一樣,Address類也是一個抽象類,所以使用javax.mail.internet.InternetAddress這個子類。 </p><p>  通過傳入代表郵件地址的字符串,我們可以建立一個郵件地址類: </p><p>  Address ad

61、dress = new InternetAddress("lgpzll163"); </p><p>  如果要在郵件地址后面增加名字的話,可以通過傳遞兩個參數(shù):代表郵件地址和名字的字符串來建立一個具有郵件地址和名字的郵件地址類: </p><p>  Address address = new InternetAddress("lgpzll163 "

62、;, "lgpzll"); </p><p>  在建立了郵件地址類后,我們通過message的setFrom()和setReplyTo()兩種方法設置郵件的發(fā)信人: </p><p>  message.setFrom(address); </p><p>  message.setReplyTo(address); </p>&

63、lt;p>  若在郵件中存在多個發(fā)信人地址,我們可用addForm()方法增加發(fā)信人: </p><p>  Address address[] =””;</p><p>  message.addFrom(address); </p><p>  為了設置收信人,我們使用addRecipient()方法增加收信人,此方法需要使用Message.Recipie

64、ntType的常量來區(qū)分收信人的類型: </p><p>  message.addRecipient(type, address) </p><p>  下面是Message.RecipientType的三個常量: </p><p>  Message.RecipientType.TO 收件人</p><p>  Message.Rec

65、ipientType.CC 抄送人</p><p>  Message.RecipientType.BCC 發(fā)件人</p><p>  E.Authenticator </p><p>  像java.net類那樣,JavaMail API通過使用授權者類(Authenticator)以用戶名、密碼的方式訪問那些受到保護的資源,在這里“資源”就是指郵件服務器。

66、在 javax.mail包中可以找到這個JavaMail的授權者類(Authenticator)。 </p><p>  在使用Authenticator這個抽象類時,我們必須采用繼承該抽象類的方式,并且該繼承類必須具有返回 PasswordAuthentication對象(用于存儲認證時要用到的用戶名、密碼)getPasswordAuthentication()方 法。并且要在Session中進行注冊,使Ses

67、sion能夠了解在認證時該使用哪個類。 </p><p>  下面代碼片斷中的MyAuthenticator就是一個Authenticator的子類。 </p><p>  Properties props = new Properties(); </p><p>  Authenticator auth = new MyAuthenticator(); </

68、p><p>  Session session = Session.getDefaultInstance(props, auth); </p><p>  F.Transport </p><p>  在發(fā)送信息時,Transport類將被用到。這個類實現(xiàn)了發(fā)送信息的協(xié)議(通稱為SMTP),此類是一個抽象類,我們可以使用這個類的靜態(tài)方法send()來發(fā)送消息: <

69、/p><p>  Transport.send(message); 也可由Session獲得相應協(xié)議對應的Transport實例。并通過傳遞用戶名、密碼、郵件服務器主機名等參數(shù)建立與郵件服務器的連接,并使用sendMessage()方法將信息發(fā)送,最后關閉連接: </p><p>  message.saveChanges(); </p><p>  Transport

70、 transport = session.getTransport("smtp"); </p><p>  transport.connect(.setDebug(true)。 </p><p>  G.Store和Folder </p><p>  接收郵件和發(fā)送郵件很類似都要用到Session。但是在獲得Session后,我們需要從Sessi

71、on中獲取特定類型的Store,然后連接到Store,這里的Store代表了存儲郵件的郵件服務器。在連接Store的過程中,極有可能需要用到用戶名、密碼或者Authenticator。 </p><p>  Store store = session.getStore("pop3"); </p><p>  store.connect((Folder.READ_ONLY

72、); </p><p>  Message message[] = folder.getMessages(); </p><p>  首先從Store中獲得INBOX這個Folder(對于POP3協(xié)議只有一個名為INBOX的Folder有效),然后以只讀(Folder.READ_ONLY)的方式打開Folder,最后調用Folder的getMessages()方法得到目錄中所有Messag

73、e的數(shù)組。對于POP3協(xié)議只有一個名為INBOX的Folder有效,而對于IMAP協(xié)議,我們可以訪問多個Folder而且SUN在設計Folder的getMessages()方法時采取了很智能的方式:首先接收新郵件列表,然后再需要的時候(比如讀取郵件內容)才從郵件服務器讀取郵件內容。 </p><p>  在讀取郵件時,我們可以用Message類的getContent()方法接收郵件或是writeTo()方法將郵件

74、保存,getContent()方法只接收郵件內容(不包含郵件頭),而writeTo()方法將包括郵件頭。 </p><p>  在讀取郵件內容后,關閉Folder和Store。 </p><p>  folder.close(boolean);</p><p>  store.close(); </p><p>  傳遞給Folder.clo

75、se()方法的boolean 類型參數(shù)表示是否在刪除操作郵件后更新Folder。 </p><p>  2.5.5 使用JavaMail API </p><p><b>  (1)發(fā)送郵件 </b></p><p>  在獲得了Session后,建立并填入郵件信息,然后發(fā)送它到郵件服務器。這便是使用Java Mail API發(fā)送郵件的過程,在

76、發(fā)送郵件之前,我們需要設置SMTP服務器:通過設置Properties的mail.smtp. session = Session.getDefaultInstance(props, null); </p><p>  MimeMessage message = new MimeMessage(session); </p><p>  message.setFrom(new Internet

77、Address(from)); </p><p>  message.addRecipient(Message.RecipientType.TO, </p><p>  new InternetAddress(to)); </p><p>  message.setSubject("lgpzll"); </p><p> 

78、 message.setText("lgpzll"); </p><p>  Transport.send(message); </p><p><b>  (2)接收郵件 </b></p><p>  讀取郵件,獲得session,并且連接到了郵箱的相應store,打開相應的Folder,然后得到想要的郵件,結束時關閉連接

79、。 </p><p>  String session = Session.getDefaultInstance(props, null); </p><p>  Store store = session.getStore("pop3"); </p><p>  store.connect((Folder.READ_ONLY); </p

80、><p>  Message message[] = folder.getMessages(); </p><p>  folder.close(false); </p><p>  store.close(); </p><p>  2.5.6 郵件認證 </p><p>  我們在此取代了直接使用郵件服務器主機名、用戶

81、名、密碼這三個字符串作為連接到POP3 Store的方式,使用存儲了郵件服務器主機名信息的屬性文件,并在獲得Session時傳入自定義的Authenticator實例: </p><p>  Properties props = System.getProperties();</p><p>  props.put("mail.pop3. mailsession = Sessio

82、n.getDefaultInstance(props,</p><p>  new CheckPassword(userName, password));</p><p>  Store store = mailsession.getStore("pop3");</p><p>  store.connect(pop3Server, userNa

83、me, password);</p><p>  CheckPassword類繼承了抽象類Authenticator,并且通過重載Authenticator類的 getPasswordAuthentication()方法返回PasswordAuthentication類對象。而 getPasswordAuthentication()方法的參數(shù)param是以逗號分割的用戶名、密碼組成的字符串。 </p>

84、<p>  package com.mail.othermail;</p><p>  import javax.mail.Authenticator;</p><p>  import javax.mail.PasswordAuthentication;</p><p>  public class CheckPassword extends Aut

85、henticator {</p><p>  String username;</p><p>  String password;</p><p>  public CheckPassword() {</p><p><b>  }</b></p><p>  public CheckPassw

86、ord(String username, String password) {</p><p>  this.username = username;</p><p>  this.password = password;</p><p><b>  }</b></p><p>  protected PasswordA

87、uthentication getPasswordAuthentication() {</p><p>  return new PasswordAuthentication(username, password);</p><p><b>  }</b></p><p>  public String getUsername() {</

88、p><p>  return username;</p><p><b>  }</b></p><p>  public void setUsername(String username) {</p><p>  this.username = username;</p><p><b>

89、  }</b></p><p>  public String getPassword() {</p><p>  return password;</p><p><b>  }</b></p><p>  public void setPassword(String password) {</p&g

90、t;<p>  this.password = password;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  第3章 概要設計</b></p><p>  基于Web的電子郵件系統(tǒng)概要設計由我的搭檔

91、實現(xiàn)。</p><p>  第4章 詳細設計與編碼實現(xiàn)</p><p>  4.1 程序包的結構</p><p>  com.mail.dao中是所有接口</p><p>  com.mail.filter中是過濾器</p><p>  com.mail.impl中是所有接口的實現(xiàn)</p><p&g

92、t;  com.mail.othermail中是管理其他郵箱</p><p>  com.mail.page中是分頁的處理類</p><p>  com.mail.struts.action中是業(yè)務邏輯 </p><p>  com.mail.struts.form中是form表單</p><p>  com.mail.util中是工具類&l

93、t;/p><p>  com.mail.vo中是實體類</p><p>  4.2系統(tǒng)的功能模塊的詳細設計與實現(xiàn)</p><p>  4.2.1 用戶注冊登錄模塊</p><p>  (1)用戶注冊登陸模塊詳細設計</p><p>  公共Action如下圖所示,所有的Action都繼承自BaseAction,在Actio

94、n中使用super.getCurrentUser()可以從session中獲取用戶的實例。</p><p>  圖4-1 公共Action</p><p>  Fig.4-1 Public Action</p><p>  用戶實體類User如下圖所示 </p><p>  圖4-2 用戶實體類</p><p>  F

95、ig.4-2 the entity of User</p><p>  用戶首先注冊然后登陸,登陸后可以修改密碼,用戶注冊登陸模塊的UserAction如下圖所示</p><p>  圖4-3 用戶Action</p><p>  Fig.4-3 the action of UserAction</p><p>  用戶注冊登陸模塊Actio

96、n中的方法實現(xiàn)調用接口IUserDAO中的方法,IUserDAO接口中的方法由IUserDAOImpl具體實現(xiàn),IUserDAO如下圖所示</p><p>  圖4-4 用戶模塊接口</p><p>  Fig.4-4 the interface of user module</p><p>  (2)用戶注冊登陸模塊的實現(xiàn)方式</p><p&g

97、t;<b>  A.用戶注冊</b></p><p>  用戶打開網(wǎng)站即進入用戶登陸頁面,如果用戶沒有注冊那么注冊調用UserAction中的register(),將注冊信息封裝到實體User的一個對象中,通過IUserDAO的register()保存這個對象,持久化到數(shù)據(jù)庫中。</p><p><b>  B.用戶登陸</b></p>

98、;<p>  用戶成功注冊后輸入正確的用戶名和密碼就可以登陸系統(tǒng),調用UserAction中的login()方法,將登陸的用戶名和密碼傳遞給IUserDAO中l(wèi)ogin(),判斷用戶是否存在,如果用戶存在并且密碼正確那就向session中寫入user這個實例,跳轉到郵箱主頁,如果用戶不存在或密碼不正確提示用戶,讓用戶重新輸入。</p><p><b>  C.用戶退出</b>&

99、lt;/p><p>  調用UserAction中的logout()方法,從session中刪除當前用戶實例,返回到用戶登陸頁面。</p><p><b>  D.找回密碼</b></p><p>  當用戶忘記密碼的時候點擊找回密碼調用UserAction中的findPassword()將你的用戶名傳遞進去,然后調用IUserDAO中的findU

100、ser(String userName)查詢數(shù)據(jù)庫這個用戶是否存在,如果存在查詢出密碼保護問題和答案,將密碼保護問題顯示給用戶,讓用戶輸入答案,如果用戶的答案和數(shù)據(jù)庫中的答案一致那么調用IUserDAO中的findPassword()方法更新用戶密碼。</p><p><b>  E.修改密碼</b></p><p>  用戶登陸成功后可以修改用戶密碼,調用UserA

101、ction中的updatePasswordInput轉向到更新密碼頁面,更新密碼調用UserAction中的updatePassword()。 </p><p>  4.2.2 站內接收郵件模塊</p><p>  (1)站內接收郵件模塊詳細設計</p><p>  站內新郵件、收件箱、垃圾箱、已刪除實體類Receive,如下圖所示</p><p

102、>  圖4-5 收件箱實體類</p><p>  Fig.4-5 the entity of Inbox</p><p>  其中status字段不同的的值代表郵件所在的郵箱,0代表新郵件在新郵件里,1代表已讀在收件箱里,2代表垃圾郵件在垃圾箱里,3代表已刪除在已刪除里。</p><p>  用戶登陸后可以收郵件,移動郵件,刪除郵件,查看郵件,站內接收郵件模塊

103、ReceiveAction如下圖所示</p><p>  圖4-6 收件箱Action</p><p>  Fig.4-6 the action of Inbox</p><p>  站內接收郵件模塊ReceiveAction中的方法實現(xiàn)調用接口IReceiveDAO中的方法,IReceiveDAO接口中的方法由IReceiveDAOImpl具體實現(xiàn),IReceiv

104、eDAO如下圖所示</p><p>  圖4-7 收件箱模塊接口</p><p>  Fig.4-7 the Inbox interface module</p><p>  (2)站內接收郵件模塊的實現(xiàn)方式</p><p><b>  A.新郵件</b></p><p>  用戶登陸成功后點擊新

105、郵件調用ReceiveAction中的newreceive()方法,通過IReceiveDAO中的queryAllNew()查詢我所有新的郵件,即標記字段為0的郵件。</p><p><b>  B.收件箱</b></p><p>  調用ReceiveAction中的AllMail方法查詢我所有的沒有在垃圾箱和已刪除中的郵件,即查詢已讀和未讀郵件,通過IReceiv

106、eDAO中的queryAll()實現(xiàn)。</p><p>  已刪除:調用ReceiveAction中的hasDel()方法查詢我已刪除郵件,通過IReceiveDAO中hasDel()實現(xiàn)。</p><p><b>  D.垃圾箱</b></p><p>  調用ReceiveAction中的dustbinbox()方法查詢我所有垃圾箱中的郵件

107、,通過IReceiveDAO中的queryAllDustbin()方法實現(xiàn)</p><p><b>  E.讀取郵件</b></p><p>  點擊收到的郵件標題,進入查看郵件詳細信息,調用ReceiveAction中的find()方法實現(xiàn),find()方法中傳遞郵件id通過IReceiveDAO中的query()方法查看郵件詳細信息。</p><

108、;p>  移動到垃圾箱:調用ReceiveAction中的dustbin()方法,傳遞郵件id,通過IReceiveDAO中的dustbin()方法設置郵件的狀態(tài)為2。</p><p><b>  F.刪除郵件</b></p><p>  只是刪除到已刪除,調用ReceiveAction中SetDel()方法,傳遞郵件id,通過IReceiveDAO中的setd

109、elete()方法設置郵件狀態(tài)為3。</p><p><b>  G.永久刪除</b></p><p>  刪除數(shù)據(jù)庫中數(shù)據(jù),不能找回,調用ReceiveAction中的del(),傳遞郵件id,通過IReceiveDAO中的delete()方法刪除數(shù)據(jù)庫中的記錄。</p><p>  4.2.3 其他郵箱模塊</p><p

110、>  (1)其他郵箱模塊詳細設計</p><p>  其他郵箱主要是收取其他郵件服務器上的郵件,需要Internet支持,可以添加其他郵箱、管理其他郵箱,接收郵件,查看郵件,刪除郵件,回復郵件,使用其他郵箱發(fā)信等功能。</p><p>  用戶郵件地址實體類Mail,如下圖所示</p><p>  圖4-8 用戶地址實體類</p><p&g

111、t;  Fig.4-8 the entity of User Address</p><p>  郵件服務器實體類Server,如下圖所示</p><p>  圖4-9 郵件服務器實體類</p><p>  Fig.4-9 the entity of mail Server </p><p>  其他郵箱業(yè)務邏輯和實現(xiàn)OtherMailAct

112、ion,如下圖所示</p><p>  圖4-10 其他郵箱Action</p><p>  Fig.4-10 the action of OtherMailAction</p><p>  其他郵箱列表顯示郵件、顯示郵箱相信、刪除郵件業(yè)務邏ailAction,如下圖所示</p><p>  圖4-11 郵件Action</p>

113、<p>  Fig.4-11 the action ailAction</p><p>  郵件ailManage,如下圖所示,主要獲取從服務器上下載的郵件列表、計算郵件數(shù)量、查看郵箱詳情、發(fā)送郵件</p><p>  圖4-12 郵件處理</p><p>  Fig.4-12 Mail ()方法查詢我的郵件所在本地服務器的目錄,將目錄作為參數(shù)ailMa

114、nage的getMailCountLoc()方法查詢我當前郵件地址所在本地服務器的郵件數(shù)量,并將其他郵件地址和郵件數(shù)量列表顯示在頁面。</p><p><b>  D.接收郵件</b></p><p>  調用OtherMailAction中DownMail()方法從郵件服務器上下載郵件,首先通過通過IMailDAO中的queryByND()查詢我的其他郵箱的郵箱用戶

115、名和用戶密碼以及域名,然后通過IServerDAO的QureyServerByDomain()方法查詢當前對應我郵件地址域名的郵件服務器的pop地址,將這些作為參數(shù)傳遞給UserManage的Recail()方法,這里采用JavaMail API的接口登陸郵件服務器,這里創(chuàng)建一個ActiveUser的對象,然后根據(jù)用戶名,本地郵件服務器目錄,域名創(chuàng)建當前用戶的目錄,啟動新線程Recail接收郵件,這里以只讀的方式下載郵件存放在當前用戶的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論