BS結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā)_第1頁
BS結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā)_第2頁
BS結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā)_第3頁
BS結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā)_第4頁
BS結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、分類號(hào)分類號(hào): U U D D C:C: 密密 級(jí)級(jí): : 編編 號(hào)號(hào): : 論論 文文 B/S 結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā)結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā) 論文作者姓名論文作者姓名: : 申請(qǐng)學(xué)位專業(yè)申請(qǐng)學(xué)位專業(yè): : 申請(qǐng)學(xué)位類別申請(qǐng)學(xué)位類別: : 指指導(dǎo)導(dǎo)教教師師姓姓名名 ( (職職稱稱 ) ): : ) ) 論文提交日期論文提交日期: : 20XX20XX 月月 日日 B/S 結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā)結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計(jì)與開發(fā) 摘摘 要要 隨著網(wǎng)絡(luò)的逐漸普及,Email 在人們生活中應(yīng)用日益廣范,除了專業(yè)的郵件 服務(wù)系統(tǒng)之外,一般大型網(wǎng)站與單位都提供了 email 服務(wù)。因此,本次

2、設(shè)計(jì)是通 過對(duì) SMTP、pop3 協(xié)議的熟悉和理解、以及對(duì) JSP 編程和網(wǎng)頁設(shè)計(jì)技能的掌握, 開發(fā)出一個(gè)簡單的 B/S 結(jié)構(gòu)下的郵件服務(wù)系統(tǒng)。能完成郵件的發(fā)送、接收、以 及附件處理功能等。主要運(yùn)用的軟件有 Eclipse, SQL Server,在 JAVA 環(huán)境下, 利用 JSP 編程來實(shí)現(xiàn)郵件系統(tǒng)的各種功能。該系統(tǒng)主要支持用戶的身份驗(yàn)證,用 戶只有通過正確注冊后才能進(jìn)入該系統(tǒng)。在系統(tǒng)中可以查看自己的郵件也可以 發(fā)送郵件到任意的郵箱,發(fā)郵件的時(shí)候可以進(jìn)行附件的發(fā)送。通過本次課題的學(xué) 習(xí)和研究掌握了基本的 web 編程技能,更實(shí)踐了自我的動(dòng)手能力。同時(shí)認(rèn)識(shí)到在 信息化高速發(fā)展的今天,高效、

3、快速、方便的郵件收發(fā)系統(tǒng)將得到越來越多的人 關(guān)注和使用,它將給人們帶來更方便快捷的生活。 關(guān)鍵詞關(guān)鍵詞: : B/S;郵件系統(tǒng);SMTP;POP3;JSP The design and development of E-mail system based on B/S Abstract Nowadays, with the increasing popularity of the network, Email system is used widely more and more. Since the e-mail comes to our life, people do not just d

4、epend on the traditional letters, either. Its reliable, fast, convenient and flexible, which makes people accept and use it widely. The graduation designment is a way to let us know how to develop an email system based on WEB. This system uses an agent mail which gets through SMTP and POP3 protocol

5、to achieve the email system. It is similar to OUTLOOK which is based on WEB Service. The mainly used soft wares are Eclipse, SQL Server. Java is also used too, under which we can use JSP programming to achieve for various functions. This system supports users authentication. Before accessing the sys

6、tem, users must have a proper registration. In this system, users can not only check their mail but also send them to any mail boxes. When sending the e-mail, they can also send the attachment. During this period, not only can I deepen the understanding of professional knowledge, but also I practice

7、 my self-agility. At the same time, I realized that, with the rapid development of the informational technology, more and more people will be concerned with the efficient, fast and convenient mail system. After that, perhaps most of them will have a try. In a word, e-mail will make our life more eff

8、icient and convenient. Key words: B/S; mail system; SMTP; POP3; JSP 目目 錄錄 論文總頁數(shù):23 頁 1引言 .1 1.1課題背景 .1 1.2課題研究意義 .1 2相關(guān)技術(shù)和開發(fā)平臺(tái) .1 2.1開發(fā)環(huán)境的選擇 .1 2.2JSP 技術(shù).1 2.3系統(tǒng)所需協(xié)議介紹 .3 2.4系統(tǒng)所需配置簡介 .3 3系統(tǒng)需求分析與總體設(shè)計(jì) .5 3.1系統(tǒng)設(shè)計(jì)目的 .5 3.2系統(tǒng)功能需求分析 .5 3.3系統(tǒng)總體構(gòu)架 .6 3.4系統(tǒng)功能模塊簡介 .6 3.5數(shù)據(jù)庫設(shè)計(jì) .7 4系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn) .7 4.1系統(tǒng)流程說明 .7 4.2

9、用戶管理模塊 .8 4.3郵件發(fā)送模塊 .12 4.4郵件接收模塊 .16 5測試及問題分析 .19 5.1用戶登錄模塊測試 .19 5.2發(fā)郵件模塊測試 .19 5.3測試結(jié)果分析 .19 結(jié) 論 .21 參考文獻(xiàn) .21 致 謝 .22 聲 明 .23 第 1 頁 共 23 頁 1 1 引言引言 1.11.1 課題背景課題背景 隨著網(wǎng)絡(luò)的逐漸普及現(xiàn)在的人們對(duì)于電子郵件已經(jīng)不再陌生了,自從電子郵 件進(jìn)入人們的生活以來,人們對(duì)傳統(tǒng)的信件已經(jīng)不再依賴,它的可靠、快速、方 便、靈活、廉價(jià)、內(nèi)容豐富等特點(diǎn)都在使我們更加喜歡和接受它。近年來,電子 郵件飛速發(fā)展,可以看到在比較專業(yè)、服務(wù)比較全面周到的網(wǎng)

10、站基本上都有免費(fèi) 電子郵件服務(wù)。他們大部分都是通過各種軟件進(jìn)行開發(fā)的。而在當(dāng)今很流行的 Java 技術(shù)中就包含有 JavaMail API,它提供了大量的類和接口來與網(wǎng)絡(luò)郵件傳 輸。關(guān)于 Jsp,最近兩年,Jsp 技術(shù)發(fā)展十分迅速,它的興起讓 IT 人員耳目一新, 實(shí)現(xiàn)了長期以來的夢想。它的出現(xiàn)無疑是當(dāng)今計(jì)算機(jī)技術(shù)通向計(jì)算時(shí)代的一個(gè) 非常重要的里程碑。因此,本次畢業(yè)設(shè)計(jì)就是利用 Java 技術(shù)來實(shí)現(xiàn)簡單的郵件 發(fā)送和接收的功能。 1.21.2 課題研究意義課題研究意義 對(duì)于用戶來說一款簡單,方便,快捷的郵件收發(fā)系統(tǒng)將會(huì)在很大程度上為用 戶提供滿意的服務(wù),制作一款能滿足用戶需求的郵件收發(fā)系統(tǒng)是每

11、一個(gè)設(shè)計(jì)者所 追求的目標(biāo)。因此希望通過本次設(shè)計(jì)完成一個(gè)簡單的郵件收發(fā)系統(tǒng),實(shí)現(xiàn)郵件的 接收與發(fā)送,并能完成附件的傳輸,同時(shí)能實(shí)現(xiàn)郵件用戶登錄管理及郵件刪除等 功能。從課題研究中更深入的了解郵件收發(fā)系統(tǒng)的設(shè)計(jì)原理,發(fā)現(xiàn)設(shè)計(jì)過程中的 不足和知識(shí)的欠缺,為今后做出更好的設(shè)計(jì)打下一個(gè)堅(jiān)實(shí)的基礎(chǔ)。 2 2相關(guān)技術(shù)和開發(fā)平臺(tái)相關(guān)技術(shù)和開發(fā)平臺(tái) 2.12.1 開發(fā)環(huán)境的選擇開發(fā)環(huán)境的選擇 整個(gè)系統(tǒng)開發(fā)完全采用 Browser/Server 模式,開發(fā)平臺(tái)為 Java 平臺(tái),以 Tomcat 為 JSP 引擎和 Web 服務(wù)器,后臺(tái)數(shù)據(jù)庫使用 SQL Server 20XX。 在開發(fā)模式上選擇 Browser

12、/Server 模式,是因?yàn)?B/S 模式有以下優(yōu)點(diǎn): 1開發(fā)成本及維護(hù)成本降低。由于 B/S 架構(gòu)管理軟件只安裝在服務(wù)器端 (Server)上,網(wǎng)絡(luò)管理人員只需要管理服務(wù)器就行了,用戶界面主要事務(wù)邏輯在 服務(wù)器(Server)端完全通過 WWW 瀏覽器實(shí)現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實(shí) 現(xiàn),所有的客戶端只有瀏覽器,網(wǎng)絡(luò)管理人員只需要做硬件維護(hù)。 2良好的安全性能,防火墻技術(shù)可以保證后臺(tái)數(shù)據(jù)庫的安全性。所有客戶 端請(qǐng)求都是通過 DBMS 來訪問數(shù)據(jù)庫,從而大大減少了數(shù)據(jù)直接暴露的風(fēng)險(xiǎn)。因 此系統(tǒng)的架構(gòu)就采用了 B/S 設(shè)計(jì)模式。 2.22.2 JSP 技術(shù)技術(shù) 1. JSP 簡介

13、 第 2 頁 共 23 頁 JSP(JavaServer Pages)是由 Sun Microsystems 公司倡導(dǎo)、許多公司參與 一起建立的一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn), 在傳統(tǒng)的網(wǎng)頁 HTML 文件(*.htm,*.html)中 加入 Java 程序片段(Scriptlet)和 JSP 標(biāo)記(tag),就構(gòu)成了 JSP 網(wǎng)頁(*.jsp)。 Web 服務(wù)器在遇到訪問 JSP 網(wǎng)頁的請(qǐng)求時(shí),首先執(zhí)行其中的程序片段,然后將執(zhí) 行結(jié)果以 HTML 格式返回給客戶。程序片段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁以及 發(fā)送 email 等等,這就是建立動(dòng)態(tài)網(wǎng)站所需要的功能。所有程序操作都在服務(wù) 器端執(zhí)行,網(wǎng)絡(luò)上傳送

14、給客戶端的僅是得到的結(jié)果,對(duì)客戶瀏覽器的要求最低,可 以實(shí)現(xiàn)無 Plugin,無 ActiveX,無 Java Applet,甚至無 Frame。 在 Sun 正式發(fā)布 JSP(JavaServer Pages) 之后,這種新的 Web 應(yīng)用開發(fā) 技術(shù)很快引起了人們的關(guān)注。 JSP 為創(chuàng)建高度動(dòng)態(tài)的 Web 應(yīng)用提供了一個(gè)獨(dú) 特的開發(fā)環(huán)境。JSP 與 Microsoft 的 Active Server Pages 兼容,但是它是使用 類似 HTML 的卷標(biāo)以及 JAVA 程序代碼段,而不是 VBScript。 2. SQL20XX 簡介 在本次畢業(yè)設(shè)計(jì)中,應(yīng)用到了數(shù)據(jù)庫,在畢業(yè)設(shè)計(jì)中采用的是

15、SQL20XX 數(shù)據(jù) 庫系統(tǒng),所以在這個(gè)地方有必要對(duì)其進(jìn)行簡單的介紹。 SQL 是一種數(shù)據(jù)庫所用的標(biāo)準(zhǔn)語言,全名為 Structured Query Language。Microsoft SQL Server 是基于 SQL 的客戶服務(wù)器數(shù)據(jù)庫。它是一 個(gè)高性能、多用戶的關(guān)系型數(shù)據(jù)庫,具有高容量的事務(wù)處理及決策支持功能,使 用戶能夠用它建立大范圍的分布式系統(tǒng)。 基本上,SQL Server 也是數(shù)據(jù)庫的一種,與 Access 數(shù)據(jù)庫一樣,主要的功能 就是用來存儲(chǔ)數(shù)據(jù),但相對(duì)于 Access 數(shù)據(jù)庫來說,SQL Server 又多了一些數(shù)據(jù) 庫應(yīng)有的功能,整理如下: (1)安全性:在 SQL S

16、erver 中提供了賬號(hào)管理的功能。對(duì)于數(shù)據(jù)庫中所存 儲(chǔ)的數(shù)據(jù),可通過賬號(hào)與密碼的管理,達(dá)到數(shù)據(jù)保密的目的。 (2)集中性:在 Access 數(shù)據(jù)庫中,一個(gè)文件就是一個(gè)數(shù)據(jù)庫,不易集中管理, 而 SQL Server 則是將所有的數(shù)據(jù)庫都放在同一個(gè) Server 中,方便用戶管理。 (3)記錄性:在 SQL Server 中,有一個(gè) Log 文件,是專門用來記錄用戶在數(shù) 據(jù)庫中所進(jìn)行的改變。例如,新增了哪幾條記錄,刪除哪幾條記錄,若將來發(fā)現(xiàn)執(zhí) 行錯(cuò)誤,即可利用 Undo(恢復(fù))將執(zhí)行過的動(dòng)作,恢復(fù)成未改變之前的數(shù)據(jù)存儲(chǔ)狀 態(tài)。 (4)備份性:對(duì)于 Access 數(shù)據(jù)庫而言,所謂的備份就是將文件

17、再復(fù)制一份, 而 SQL Server 中則設(shè)計(jì)有一套很完整的數(shù)據(jù)庫備份系統(tǒng),讓用戶可以既方便又 容易地備份數(shù)據(jù)。 (5)完整性:由于 SQL Server 中提供了很多數(shù)據(jù)庫相關(guān)功能,算是一個(gè)更為 第 3 頁 共 23 頁 完整的數(shù)據(jù)庫系統(tǒng)。 SQL Server 作為 Windows 數(shù)據(jù)庫家族中出類拔萃的成員,其穩(wěn)定性和安全 性是無與倫比的,這也是網(wǎng)站建設(shè)至關(guān)重要的。隨著 SQL Server20XX 的推出,其 易用性、可擴(kuò)展性、穩(wěn)定性等方面又有了明顯增強(qiáng)。因此,我們選擇 SQL Server 作為建立網(wǎng)站數(shù)據(jù)庫的工具。 2.32.3 系統(tǒng)所需協(xié)議介紹系統(tǒng)所需協(xié)議介紹 SMTP(簡單郵

18、件傳輸協(xié)議)負(fù)責(zé)郵件的發(fā)送和傳輸,使用 TCP25 端口,首先用 戶寫好郵件之后發(fā)送給 SMTP 服務(wù)器,SMTP 將郵件轉(zhuǎn)換為 ASCII 碼并添加報(bào)頭, 發(fā)送出去,郵件在 INTERNET 中路由交換到達(dá)目的地的郵件服務(wù)器,對(duì)方的 SMTP 將郵件的 ASCII 碼解碼。 SMTP 協(xié)議是隨著 Internet 的發(fā)展逐漸規(guī)范化和進(jìn)一步完善的。SMTP 協(xié)議 最早在 RFC821 中被定義,它提供了 Internet 上兩個(gè)節(jié)點(diǎn)之間傳送信息的一種方 式。SMTP 協(xié)議非常的簡單和直觀,在 RFC821 中,SMTP 由一些通過 ASCII 碼表示 的命令字組成,通過這些命令字,兩個(gè)節(jié)點(diǎn)之間

19、(客戶機(jī)和服務(wù)器)可以建立 SMTP 連接,并進(jìn)行信息傳遞。 POP 協(xié)議(電子郵局協(xié)議)是一種允許用戶從郵件服務(wù)器收發(fā)郵件的協(xié)議。 它有兩種版本,即 POP2 和 POP3,都具有簡單的電子郵件存儲(chǔ)轉(zhuǎn)發(fā)功能。POP2 與 POP3 本質(zhì)上類似,都屬于離線式工作協(xié)議,但是由于使用了不同的協(xié)議端口,兩 者并不兼容。與 SMTP 協(xié)議相結(jié)合,POP3 是目前最常用的電子郵件服務(wù)協(xié)議。 POP3 除了支持離線工作方式外,還支持在線工作方式。在離線工作方式下, 用戶收發(fā)郵件時(shí),首先通過 POP3 客戶程序登錄到支持 POP3 協(xié)議的郵件服務(wù)器, 然后發(fā)送郵件及附件;接著,郵件服務(wù)器將為該用戶收存的郵件

20、傳送給 POP3 客 戶程序,并將這些郵件從服務(wù)器上刪除;最后,郵件服務(wù)器將用戶提交的發(fā)送郵 件,轉(zhuǎn)發(fā)到運(yùn)行 SMTP 協(xié)議的計(jì)算機(jī)中,通過它實(shí)現(xiàn)郵件的最終發(fā)送。在為用戶從 郵件服務(wù)器收取郵件時(shí),POP3 是以該用戶當(dāng)前存儲(chǔ)在服務(wù)器上全部郵件為對(duì)象 進(jìn)行操作的,并一次性將它們下載到用戶端計(jì)算機(jī)中。一旦客戶的郵件下載完畢,郵 件服務(wù)器對(duì)這些郵件的暫存托管即告完成。使用 POP3,用戶不能對(duì)他們貯存在 郵件服務(wù)器上的郵件進(jìn)行部分傳輸。離線工作方式適合那些從固定計(jì)算機(jī)上收 發(fā)郵件的用戶使用。 當(dāng)使用 POP3 在線工作方式收發(fā)郵件時(shí),用戶在所用的計(jì)算機(jī)與郵件服務(wù)器 保持連接的狀態(tài)下讀取郵件。用戶的郵

21、件保留在郵件服務(wù)器上。 2.42.4 系統(tǒng)所需配置簡介系統(tǒng)所需配置簡介 1. Tomcat Tomcat 是一個(gè)免費(fèi)的開源的 Serlvet 容器,它是 Apache 基金會(huì)的 Jakarta 第 4 頁 共 23 頁 項(xiàng)目中的一個(gè)核心項(xiàng)目,由 Apache,Sun 和其它一些公司及個(gè)人共同開發(fā)而成。 由于有了 Sun 的參與和支持,最新的 Servlet 和 Jsp 規(guī)范總能在 Tomcat 中得到 體現(xiàn)。 在 Tomcat 中,應(yīng)用程序的部署很簡單,用戶只需將自己的 WAR 放到 Tomcat 的 webapp 目錄下,Tomcat 會(huì)自動(dòng)檢測到這個(gè)文件,并將其解壓。用戶在瀏覽器 中訪問這

22、個(gè)應(yīng)用的 Jsp 時(shí),通常第一次會(huì)很慢,因?yàn)?Tomcat 要將 Jsp 轉(zhuǎn)化為 Servlet 文件,然后編譯。編譯以后,訪問將會(huì)很快。另外 Tomcat 也提供了一個(gè) 應(yīng)用:manager,訪問這個(gè)應(yīng)用需要用戶名和密碼,用戶名和密碼存儲(chǔ)在一個(gè) xml 文件中。通過這個(gè)應(yīng)用,輔助于 Ftp,用戶可以在遠(yuǎn)程通過 Web 部署和撤銷應(yīng)用。 當(dāng)然本地也可以。 基于 Tomcat 的開發(fā)其實(shí)主要是 Jsp 和 Servlet 的開發(fā),開發(fā) Jsp 和 Servlet 非常簡單,你可以用普通的文本編輯器或者 IDE,然后將其打包成 WAR 即 可。這里要提到另外一個(gè)工具 Ant,Ant 也是 Jaka

23、rta 中的一個(gè)子項(xiàng)目,它所實(shí)現(xiàn) 的功能類似于 Unix 中的 make。只需要寫一個(gè) build.xml 文件,然后運(yùn)行 Ant 就 可以完成 xml 文件中定義的工作,這個(gè)工具對(duì)于一個(gè)大的應(yīng)用來說非常好,只需 在 xml 中寫很少的東西就可以將其編譯并打包成 WAR。事實(shí)上,在很多應(yīng)用服務(wù) 器的發(fā)布中都包含了 Ant。另外,在 Jsp1.2 中,可以利用標(biāo)簽庫實(shí)現(xiàn) Java 代碼 與 Html 文件的分離,使 Jsp 的維護(hù)更方便。 Tomcat 在 JBuder 中不用配置,但是在用 Eclipce 中就需要配置:首先安裝 好 Tomcat,然后把 Tomcat 的包 apache-to

24、mcat-5.5.15 在 MyEclipce 下進(jìn)行配 置就可以了。配置好后綁定,啟動(dòng)。MyEclipce 下面進(jìn)行介紹。 2. Eclipse 和 MyEclipse 相比于大量的 JAVA 開發(fā)工具,不可否認(rèn) Borland 的 JBuider 和 Eclipse 是 最可靠也是最普遍的。相比于 JBuider,Eclipse 小巧,速度上更是大大超越了 JBuider,所以這次設(shè)計(jì)用的是 Eclipse。 Eclipse 是一個(gè)開放源代碼的、與 NetBeans、Sun ONE Studio 和 Borland JBuider 類似的一種基于 Java 的整合型可擴(kuò)展開發(fā)平臺(tái),也是目前

25、最著名的開 源項(xiàng)目之一,就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建 開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開發(fā)工具 (Java Development Tools,JDT)。其未來的目標(biāo)不僅僅是成為專門開發(fā) Java 程 序的 IDE 環(huán)境,根據(jù) Eclipse 的體系結(jié)構(gòu),通過開發(fā)插件,它能擴(kuò)展到任何語言的 開發(fā),甚至能成為圖片繪制的工具。 Eclipse SDK(軟件開發(fā)者包)是 Eclipse Platform、JDT 和 PDE 所生產(chǎn)的組 件合并,它們可以一次下載。這些部分在一起提供了一個(gè)具有豐富特性的開發(fā)環(huán) 第 5 頁 共 2

26、3 頁 境,允許開發(fā)者有效地建造可以無縫集成到 Eclipse Platform 中的工具。 Eclipse SDK 由 Eclipse 項(xiàng)目生產(chǎn)的工具和來自其它開放源代碼的第三方軟件 組合而成。Eclipse 項(xiàng)目生產(chǎn)的軟件以 CPL 發(fā)布,第三方組件有各自自身的許可 協(xié)議。 MyEclipse 企業(yè)級(jí)工作平臺(tái)(MyEclipse Enterprise Workbench ,簡稱 MyEclipse)是對(duì) Eclipse IDE 的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫和 J2EE 的開發(fā)、 發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的 J2EE 集成開發(fā)環(huán)境,包括了完備的編碼

27、、調(diào)試、測試和發(fā)布功能,完整支持 HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。 在結(jié)構(gòu)上,MyEclipse 的特征可以被分為 7 類: (1)J2EE 模型 (2)WEB 開發(fā)工具 (3)EJB 開發(fā)工具 (4)應(yīng)用程序服務(wù)器的連接器 (5)J2EE 項(xiàng)目部署服務(wù) (6)數(shù)據(jù)庫服務(wù) (7)MyEclipse 整合幫助 對(duì)于以上每一種功能上的類別,在 Eclipse 中都有相應(yīng)的功能部件,并通過 一系列的插件來實(shí)現(xiàn)它們。MyEclipse 結(jié)構(gòu)上的這種模塊化,可以讓我們在不影 響其他模塊的情況下,對(duì)任一模塊進(jìn)行單獨(dú)的擴(kuò)展和升級(jí)。 3 3

28、系統(tǒng)需求分析與總體設(shè)計(jì)系統(tǒng)需求分析與總體設(shè)計(jì) 3.13.1 系統(tǒng)設(shè)計(jì)目的系統(tǒng)設(shè)計(jì)目的 本次畢業(yè)設(shè)計(jì)所要完成的,是一個(gè) tomcat 服務(wù)器下的郵件收發(fā)平臺(tái),該平臺(tái) 功能類似于 OUTLOOK,但是由于時(shí)間的關(guān)系,只是實(shí)現(xiàn)了 OUTLOOK 的部分功能,但 是該平臺(tái)是基于 WEB 的一個(gè) B/S 應(yīng)用程序,它不用安裝傳統(tǒng)的 C/S 程序,只是需 要在任意的客戶端上訪問該服務(wù)器就可以實(shí)現(xiàn)郵件收發(fā)功能。 3.23.2 系統(tǒng)功能需求分析系統(tǒng)功能需求分析 由于該 WEB 平臺(tái)是通過 SMTP 協(xié)議來進(jìn)行發(fā)送郵件,POP3 協(xié)議來接收郵件, 所以該平臺(tái)只是相當(dāng)于一個(gè)代理郵件系統(tǒng)。該平臺(tái)應(yīng)該實(shí)現(xiàn)用戶的登錄驗(yàn)

29、證,只 有擁有對(duì)該郵箱有合法權(quán)限的用戶才能進(jìn)行登錄,可以有多個(gè)用戶同時(shí)對(duì)該郵箱 (所代理的郵箱)進(jìn)行控制。而在發(fā)郵件系統(tǒng)中,需要用戶輸入要送發(fā)郵件的對(duì)方 郵箱名稱,可以進(jìn)行本地計(jì)算機(jī)資源傳輸,也就是添加附件的功能。在收郵件系 統(tǒng)中,郵箱將自動(dòng)將所有郵件包括其基本信息顯示在收件箱中,并且將帶附件的 郵件的附件自動(dòng)保存在本地計(jì)算機(jī)特定路徑下。 第 6 頁 共 23 頁 3.33.3 系統(tǒng)總體構(gòu)架系統(tǒng)總體構(gòu)架 系統(tǒng)總體模塊框架如下圖所示,用戶在不同的模塊通過相關(guān)操作完成對(duì)郵件 的接收和發(fā)送并實(shí)現(xiàn)對(duì)郵件的管理。系統(tǒng)總體結(jié)構(gòu)分為四個(gè)模塊,關(guān)于每個(gè)模塊 的具體功能和實(shí)現(xiàn)將在后面進(jìn)行介紹。 圖 1 設(shè)計(jì)系統(tǒng)

30、結(jié)構(gòu)圖 3.43.4 系統(tǒng)功能模塊簡介系統(tǒng)功能模塊簡介 1.登錄模塊 要求用戶輸入正確的用戶名,密碼。如果輸入信息合法則登錄成功進(jìn)入郵件 發(fā)送模塊。如果輸入信息某一項(xiàng)錯(cuò)誤,則顯示該用戶名不存在,登錄失敗。 圖 2 登錄流程圖 2.郵件發(fā)送模塊 用戶發(fā)送郵件,需要輸入收件人郵箱 Adress,郵件標(biāo)題,正文。如果需要添 加附件則點(diǎn)擊“瀏覽”進(jìn)行添加。 如果輸入的收件人郵箱 Adress 錯(cuò)誤或文本框至少有一項(xiàng)為空,則郵件發(fā)送 失敗,反之郵件發(fā)送成功,轉(zhuǎn)到郵件發(fā)送成功界面。 郵件收發(fā)系統(tǒng) 用戶登錄 模塊 接收郵件 模塊 發(fā)送郵件 模塊 郵件管理 模塊 發(fā)送郵件 失 敗 跳轉(zhuǎn)到收件箱 驗(yàn)證信息 成功

31、 用戶登錄 第 7 頁 共 23 頁 失敗 圖 3 發(fā)送郵件流程圖 3. 郵件接收模塊 通過郵件發(fā)送界面點(diǎn)擊超連接進(jìn)入郵件接收界面,系統(tǒng)將所有接收的郵件信 息顯示出來,包括發(fā)件人、主題、發(fā)送時(shí)間、郵件大小等。如果是帶有附件的郵 件,附件則自動(dòng)保存到本地計(jì)算機(jī)特定路徑下。 4.郵件管理模塊 在收郵件箱內(nèi)點(diǎn)擊你要讀取的郵件即可進(jìn)入該郵件了解其中的具體內(nèi)容,進(jìn) 入某一封具體信件后將可以完整的看到該信件的具體內(nèi)容,同樣可以點(diǎn)擊頁面上 的超連接進(jìn)行回復(fù)或繼續(xù)查看其他信件。 3.53.5 數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫設(shè)計(jì) 本系統(tǒng)的數(shù)據(jù)庫只涉及到了用戶登錄信息一張表格,主要用來檢查用戶是否 有權(quán)限登錄該郵箱。 表 1

32、用戶信息表 名稱字段名稱數(shù)據(jù)類型主鍵非空 用戶名unameVarchar(50)noNo 密碼passVarchar(50)noNo 代理服務(wù)器serverVarchar(50)noNo 標(biāo)識(shí)列idInt(4)yesNo 4 4系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn) 4.14.1 系系統(tǒng)流程說明統(tǒng)流程說明 該系統(tǒng)首先需要用戶填寫合法的登錄信息,系統(tǒng)對(duì)信息進(jìn)行驗(yàn)證。驗(yàn)證失敗 則返回登錄頁面并顯示相應(yīng)錯(cuò)誤信息,驗(yàn)證成功則進(jìn)入收件箱列表。然后用戶可 以根據(jù)自己的需要可以選擇讀取具體某一封信件也可以進(jìn)入發(fā)件箱來發(fā)送郵件。 下面用一張流程圖來進(jìn)行形象的說明。 發(fā)送成功頁面 用戶登錄 發(fā)件處理程序 第 8

33、頁 共 23 頁 圖 4 系統(tǒng)流程圖 4.24.2 用用戶管理模塊戶管理模塊 該部分?jǐn)?shù)據(jù)庫方面只是涉及到一張Userinfo表,有3個(gè)字段,分別是標(biāo)識(shí)列 (主鍵):ID (int(4);用戶名:username(varchar(50);密碼: pass(varchar(50);用戶郵箱:sever(varchar(50)。當(dāng)用戶進(jìn)入登錄頁面后, 要求輸入用戶名和密碼,而且用戶名不能為空,如果為空validator驗(yàn)證框架將會(huì) 判斷,而且阻止表單提交。 表單提交后在配置文件Struts-config.xml中找到相應(yīng)的Action,再通過該 配置的name屬性找到相應(yīng)的ActionForm,對(duì)它

34、進(jìn)行表單值的填充,然后進(jìn)入真正 的控制器處理程序LoginAction的execute方法,在該方法中將用戶名,密碼作為 參數(shù)傳入讀取數(shù)據(jù)庫的數(shù)據(jù)處理層中,由JTDS建立驅(qū)動(dòng),連接,構(gòu)建SQL語句,用預(yù) 編譯對(duì)象執(zhí)行SQL語句,再用它的SET方法傳送參數(shù),由于是一個(gè)查詢語句有返回 值,用ResultSet對(duì)象接收,進(jìn)行讀取,如果存在,也就是說存在用戶名和密碼都和 用戶輸入信息相同,而且在同一行,則返回一個(gè)Boolean TRUE,否則沒找到就返回 一個(gè)FALSE。如果返回的值為false,則返回一個(gè)mapping對(duì)象,該對(duì)象在配置文件 中找到相應(yīng)的跳轉(zhuǎn)路徑(該處理返回一個(gè)錯(cuò)誤頁面)。如果返回t

35、rue,那么程序繼 續(xù)運(yùn)行,因?yàn)槌绦虻脑O(shè)計(jì)要求是驗(yàn)證成功后進(jìn)入的是讀取全部郵件的一個(gè)列表, 所以在下面的程序中要對(duì)郵件進(jìn)行讀取,并返回所有的信息。如果返回true后, 進(jìn)入真正的郵件接收處理程序,在得到所有郵件的信息后把它們用ArrayList集 合進(jìn)行保存,并通過request請(qǐng)求將結(jié)果集返回。 字符編碼處理 郵件收發(fā)處理 接收全部郵件 操作提示頁面 表單提交驗(yàn)證 失 敗 成功 第 9 頁 共 23 頁 圖5 用戶登錄框 當(dāng)用戶登錄信息為空時(shí)所顯示的頁面如圖6所示。 圖6 非法用戶登錄頁面 當(dāng)用戶登錄名不存在時(shí)所顯示的頁面如圖7所示。 圖7 用戶名不存在時(shí)顯示的頁面 主要代碼: html:f

36、orm action=/login.do method=post 該代碼是在Login.jsp中實(shí)現(xiàn)由用戶提交表單后提交到的控制器位置。提交 方法為post. 而在Struts框架中的關(guān)鍵是對(duì)核心配置文件Struts-Config.xml的配置, 該 配置決定了整個(gè)應(yīng)用程序的程序控制。該代碼是在對(duì)Login.jsp提交上來的 Action和ActionForm的查找做部署。名字為login,提交路徑為path=/login,生 存周期為會(huì)話,該控制器的物理路徑為 第 10 頁 共 23 頁 type=com.action.LoginAction,forward 標(biāo)簽為當(dāng)控制器處理完后返回一個(gè)

37、Actionorward的對(duì)象,該對(duì)象將在該標(biāo)簽內(nèi)對(duì)應(yīng),查找到對(duì)應(yīng)的name屬性后,根據(jù) path跳轉(zhuǎn)到對(duì)應(yīng)的jsp.該action的name屬性將找對(duì)應(yīng)的ActionForm進(jìn)行相應(yīng)的 表單填充。actionForm的配置代碼如下 該 ActionForm 是一個(gè)動(dòng)態(tài)的 ActionForm,該類繼承于 org.apache.struts.validator.DynaValidatorForm,在form-property 標(biāo)簽里面 指定他的屬性和類型。 在對(duì)表單的非空驗(yàn)證的時(shí)候用了 Validator 驗(yàn)證框架,該框架的配置文件 如下: 對(duì)應(yīng)的配置文件的實(shí)現(xiàn)如下代碼: 上面的代碼是對(duì)表單的

38、非空驗(yàn)證,是對(duì)應(yīng)的要驗(yàn)證的 表單名字,中property為指定要驗(yàn)證的 第 11 頁 共 23 頁 表單控件名字,depends為驗(yàn)證方法,該方法在Validator驗(yàn)證框架中已經(jīng)定義??梢?查閱alidator-rules.xml配置文件。 為要輸出信息的差數(shù),該差數(shù)可以在資源文件中定義。 public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) DynaActionForm ac=(DynaActio

39、nForm)form; String ser=null; if(String)ac.get(server).equals(1) ser=(String)ac.get(name)+; else if(String)ac.get(server).equals(2) ser=(String)ac.get(name)+; else if(String)ac.get(server).equals(3) ser=(String)ac.get(name)+; 上面代碼是控制器實(shí)現(xiàn)對(duì)用戶權(quán)限的合法性的判斷。其中Action是Struts框 架中的控制器,通過重寫它的execute方法實(shí)現(xiàn)Struts控制器。D

40、ynaActionForm ac=(DynaActionForm)form為實(shí)例已經(jīng)填充的ActionForm對(duì)象。通過用戶在下拉 列表中選擇的郵箱來判斷代理服務(wù)器的名字。 對(duì)用戶是否在數(shù)據(jù)庫中存在的方法的調(diào)用 CheckU cu=new CheckU(); boolean t=cu.check(String)ac.get(name),(String)ac.get(pass),ser); HttpSession session=request.getSession(); session.setAttribute(server,ser); if(t=false) ActionErrors err

41、ors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(index.error); this.saveErrors(request, errors); return mapping.findForward(return); 如果數(shù)據(jù)庫中該用戶名字存在則返回一個(gè)TRUE,通過判斷來選擇是跳轉(zhuǎn)到 哪個(gè)頁面。return mapping.findForward(return)就是返回一個(gè)在Struts-config.xml 中存在的forward對(duì)象。 public boolean check(S

42、tring name,String pass,String server) String sql=select * from Userinfo where uname=(?) and pass=(?) and server=(?); 第 12 頁 共 23 頁 查詢的游標(biāo)字符串。 boolean T=false; tryClass.forName(ul); 建立驅(qū)動(dòng)。 catch(ClassNotFoundException e)e.printStackTrace(); try Connection con=DriverManager.getConnection(ur); 建立連接 tryPr

43、eparedStatement pt=con.prepareStatement(sql); 建立預(yù)編譯對(duì)象。 try pt.setString(1,name); pt.setString(2,pass); pt.setString(3,server); 設(shè)置編譯對(duì)象的差數(shù)。 ResultSet rs=pt.executeQuery(); 用結(jié)果集來存儲(chǔ)返回記錄。 while(rs.next()T=true; 如果有該記錄返回真。 finallypt.close(); finallycon.close(); catch(SQLException q)q.printStackTrace(); re

44、turn T; 4.34.3 郵件發(fā)送郵件發(fā)送模塊模塊 登錄成功后點(diǎn)擊超鏈接進(jìn)入發(fā)郵件箱,在這里用戶可以輸入相應(yīng)的信息,可 超鏈接到發(fā)件箱,輸入內(nèi)容表單提交,進(jìn)入控制器 SendM,在 execute 方法里調(diào)用 郵件發(fā)送核心代碼(SendText.java),在該方法中利用 SMTP 發(fā)送郵件的代碼,發(fā) 送郵件主要需要 4 個(gè)主要的對(duì)象,Session 對(duì)象,建立連接;Prop 是 Properties 的對(duì)象,Properties 是 java.util 包下的類,是一個(gè)集合類,封裝 SMTP 協(xié)議的類; MimeMessage 類,通過該對(duì)象來實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的傳輸,將發(fā)件人添加到列表中;

45、sendmail 為從表單中提交來的路徑的字符串形式。通過他將正文和附件內(nèi)容分 開封裝進(jìn)行傳輸;附件以 DataSource 類型保存。發(fā)送郵件,從 MimeMessage 對(duì) 象中獲得發(fā)送人的 Adress 列表,發(fā)送成功后進(jìn)入 secces 界面。 第 13 頁 共 23 頁 圖 8 郵件發(fā)送頁面 主要代碼: public class sendText public void send(String a,String b,String c,String e) String path =e; String sendmail=c ; String tilte = a; String conte

46、nt = b; try Properties prop = new Properties(); prop.put(mail.smtp.host, ); 設(shè)置smtp主機(jī) prop.put(mail.smtp.auth, true); 使用smtp身份驗(yàn)證 Session session = Session.getDefaultInstance(prop, new Authenticator() protected javax.mail.PasswordAuthentication getPasswordAuthentication() return new javax.mail.Passwor

47、dAuthentication(wen870105, wenshengyong); ); session.setDebug(true); MimeMessage mess = new MimeMessage(session); mess.addRecipient(Message.RecipientType.TO, new InternetAddress( 第 14 頁 共 23 頁 sendmail); InternetAddress from = new InternetAddress();/ 發(fā) 件人 mess.setFrom(from); mess.setSubject(tilte);

48、mess.setSentDate(new Date(); 定義一個(gè)Multipart對(duì)象用來裝整個(gè)郵件的正文部分 Multipart multipart = new MimeMultipart(); 定義一個(gè)MimeBodyPart對(duì)象,用來裝郵件的文本內(nèi)容然后加入Multipart 對(duì)象中 MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText(content); multipart.addBodyPart(messageBodyPart);/ 裝載正文 定義一個(gè)MimeBodyPart對(duì)象,用來裝

49、郵件的附件內(nèi)容然后加入Multipart 對(duì)象中 MimeBodyPart fileBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(path); fileBodyPart.setDataHandler(new DataHandler(source); fileBodyPart.setFileName(source.getName(); multipart.addBodyPart(fileBodyPart); 裝載附件 mess.setContent(multipart) 裝載入Message中 mess

50、.saveChanges(); 保存 Transport tra = session.getTransport(smtp); 建立發(fā)送的對(duì)象 tra.connect(, wen870105, wenshengyong); 連接方法1 tra.sendMessage(mess, mess.getAllRecipients(); / tra.send(mess);/該方法發(fā)送不用建立連接 tra.close(); catch (MessagingException ex) ex.printStackTrace(); 下面的代碼為整個(gè)應(yīng)用程序的Struts-config.xml的配置。 第 15 頁

51、 共 23 頁 4.44.4 郵件接收郵件接收模塊模塊 點(diǎn)擊超鏈接后進(jìn)入 ResiveM 中,同樣在該控制器中調(diào)用接收郵件的核心代碼 (Mail.java).在該方法中首先由自己的代理郵箱用戶名,密碼和 POP3 協(xié)議建立 連接,以只讀方式打開并將信息保存在 Message 數(shù)組中循環(huán)得到各部分想得到的 值,在得到的值中由于存在字符編碼等問題,所以封裝了一個(gè)類 MailFetcher.java 用來得到各部分信息,并且進(jìn)行處理。各部分在代碼中都做 了注解,通過調(diào)用方法可以得到,然后用 Hash Table 進(jìn)行間值對(duì)的封裝,再存放 在回話中。由于要傳到 JSP 中讀取,通過會(huì)話可以實(shí)現(xiàn),也可以

52、通過 request 的 getAttrntrt 方法。 關(guān)鍵難點(diǎn)是在對(duì)有附件的處理的時(shí)候,要先通過判斷,要判斷內(nèi)容為什么類 型,然后把內(nèi)容進(jìn)行解析,String 的為正文,那么要傳回來進(jìn)行保存,在 JSP 中顯 示。如果為附件,則通過 IO 的形式在本地計(jì)算機(jī)上保存。 郵件接收界面如圖 9 所示。 圖 9 接收郵件界面 主要代碼: 下面是在控制器中對(duì)郵件的讀取的方法的調(diào)用 String mailHost = ; String userName = wen870105; 第 17 頁 共 23 頁 String pwd = wenshengyong; ArrayList arr=new Arr

53、ayList();范型,只 能在1.5語法中 try 對(duì)讀取所有郵件的方法的調(diào)用 arr=Mail.receiveAllMail(mailHost, userName, pwd); 保存郵件的信息,存儲(chǔ)在request中 request.setAttribute(arr, arr); 返回一個(gè)ActionForward對(duì)象 return mapping.findForward(recev); 查看所有郵件消息的具體實(shí)現(xiàn)方法 public static ArrayList receiveAllMail(String mailHost, String userName, String pwd) t

54、hrows MessagingException, IOException Properties p = new Properties(); Session session = Session.getDefaultInstance(p); Store store = session.getStore(pop3); store.connect(mailHost, userName, pwd); Folder folder = store.getFolder(Inbox); folder.open(Folder.READ_ONLY); Message message = folder.getMes

55、sages(); ArrayList arrMeg = new ArrayList(); / 接收郵件的具體信息 SimpleDateFormat time=new SimpleDateFormat(MM月dd); for (int i = 0, length = message.length; i length; i+) MessageBean megInfo = new MessageBean(); megInfo.setMailTime(time.format(messagei.getSentDate(); megInfo.setMailFrom(MimeUtility.decodeTe

56、xt(messagei.getFrom()0.toString (); megInfo.setMailTopic(MimeUtility.decodeText(messagei.getSubject(); megInfo.setMailSize(messagei.getSize() + b); /顯示是否帶有附件。 Object out_content = messagei.getContent(); 第 18 頁 共 23 頁 if (!(out_content instanceof Multipart)/不是復(fù)合郵件體,既是不帶附件。 megInfo.setMailFile(無); els

57、e megInfo.setMailFile(有); megInfo.setId(i); arrMeg.add(megInfo); / Close connection folder.close(false); store.close(); return arrMeg; 下面代碼為在Action中調(diào)用查看其中一個(gè)郵件的內(nèi)容的方法 String mailHost = ; String userName = wen870105; String pwd = wenshengyong; DynaActionForm ac=(DynaActionForm)form; 得到超連接傳的參數(shù)來判斷具體是哪個(gè)郵件

58、 String p=(String)ac.get(p); int id = Integer.parseInt(p); try try request.setAttribute(bean, Mail.receiveOneMail(mailHost, userName, pwd, id);調(diào)用方法并把郵件的內(nèi)容存儲(chǔ)在request中。 下面代碼為實(shí)現(xiàn)具體的收郵件的方法。 public static MessageBean receiveOneMail(String mailHost, String userName, String pwd,int id) throws MessagingExcep

59、tion, IOException Properties p = new Properties(); Session session = Session.getDefaultInstance(p); Store store = session.getStore(pop3); store.connect(mailHost, userName, pwd); Folder folder = store.getFolder(Inbox); folder.open(Folder.READ_ONLY); Message message = folder.getMessages(); MessageBean megInfo = new MessageBean(); 第 19 頁 共 23 頁 megInfo.setMailContent(messageid.getContent().toString(); return megInfo; 5 5測試及問題分析測試及問題分析 5.15.1 用戶登錄模塊測試用戶登錄模塊測試 對(duì)該模塊的測試主要是測試用戶的登錄情況,對(duì)各種異常信息進(jìn)行測試。 用戶登錄模塊測試如表2所示。 表 2 用戶登錄模塊測試數(shù)據(jù)列表 測試功 能 測試數(shù)據(jù)預(yù)期結(jié)果實(shí)際結(jié)果比較 用戶登 錄 用戶名:joy 密碼:123 輸入不合 法 用戶不存在錯(cuò)誤的密碼,登錄失敗 用戶登 錄 用戶名

溫馨提示

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

評(píng)論

0/150

提交評(píng)論