版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、分類號分類號: U U D D C:C: 密密 級級: : 編編 號號: : 論論 文文 B/S 結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計與開發(fā)結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計與開發(fā) 論文作者姓名論文作者姓名: : 申請學(xué)位專業(yè)申請學(xué)位專業(yè): : 申請學(xué)位類別申請學(xué)位類別: : 指指導(dǎo)導(dǎo)教教師師姓姓名名 ( (職職稱稱 ) ): : ) ) 論文提交日期論文提交日期: : 20XX20XX 月月 日日 B/S 結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計與開發(fā)結(jié)構(gòu)下的郵件系統(tǒng)的設(shè)計與開發(fā) 摘摘 要要 隨著網(wǎng)絡(luò)的逐漸普及,Email 在人們生活中應(yīng)用日益廣范,除了專業(yè)的郵件 服務(wù)系統(tǒng)之外,一般大型網(wǎng)站與單位都提供了 email 服務(wù)。因此,本次
2、設(shè)計是通 過對 SMTP、pop3 協(xié)議的熟悉和理解、以及對 JSP 編程和網(wǎng)頁設(shè)計技能的掌握, 開發(fā)出一個簡單的 B/S 結(jié)構(gòu)下的郵件服務(wù)系統(tǒng)。能完成郵件的發(fā)送、接收、以 及附件處理功能等。主要運用的軟件有 Eclipse, SQL Server,在 JAVA 環(huán)境下, 利用 JSP 編程來實現(xiàn)郵件系統(tǒng)的各種功能。該系統(tǒng)主要支持用戶的身份驗證,用 戶只有通過正確注冊后才能進入該系統(tǒng)。在系統(tǒng)中可以查看自己的郵件也可以 發(fā)送郵件到任意的郵箱,發(fā)郵件的時候可以進行附件的發(fā)送。通過本次課題的學(xué) 習(xí)和研究掌握了基本的 web 編程技能,更實踐了自我的動手能力。同時認識到在 信息化高速發(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ā)平臺 .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è)計 .5 3.1系統(tǒng)設(shè)計目的 .5 3.2系統(tǒng)功能需求分析 .5 3.3系統(tǒng)總體構(gòu)架 .6 3.4系統(tǒng)功能模塊簡介 .6 3.5數(shù)據(jù)庫設(shè)計 .7 4系統(tǒng)詳細設(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 參考文獻 .21 致 謝 .22 聲 明 .23 第 1 頁 共 23 頁 1 1 引言引言 1.11.1 課題背景課題背景 隨著網(wǎng)絡(luò)的逐漸普及現(xiàn)在的人們對于電子郵件已經(jīng)不再陌生了,自從電子郵 件進入人們的生活以來,人們對傳統(tǒng)的信件已經(jīng)不再依賴,它的可靠、快速、方 便、靈活、廉價、內(nèi)容豐富等特點都在使我們更加喜歡和接受它。近年來,電子 郵件飛速發(fā)展,可以看到在比較專業(yè)、服務(wù)比較全面周到的網(wǎng)
10、站基本上都有免費 電子郵件服務(wù)。他們大部分都是通過各種軟件進行開發(fā)的。而在當今很流行的 Java 技術(shù)中就包含有 JavaMail API,它提供了大量的類和接口來與網(wǎng)絡(luò)郵件傳 輸。關(guān)于 Jsp,最近兩年,Jsp 技術(shù)發(fā)展十分迅速,它的興起讓 IT 人員耳目一新, 實現(xiàn)了長期以來的夢想。它的出現(xiàn)無疑是當今計算機技術(shù)通向計算時代的一個 非常重要的里程碑。因此,本次畢業(yè)設(shè)計就是利用 Java 技術(shù)來實現(xiàn)簡單的郵件 發(fā)送和接收的功能。 1.21.2 課題研究意義課題研究意義 對于用戶來說一款簡單,方便,快捷的郵件收發(fā)系統(tǒng)將會在很大程度上為用 戶提供滿意的服務(wù),制作一款能滿足用戶需求的郵件收發(fā)系統(tǒng)是每
11、一個設(shè)計者所 追求的目標。因此希望通過本次設(shè)計完成一個簡單的郵件收發(fā)系統(tǒng),實現(xiàn)郵件的 接收與發(fā)送,并能完成附件的傳輸,同時能實現(xiàn)郵件用戶登錄管理及郵件刪除等 功能。從課題研究中更深入的了解郵件收發(fā)系統(tǒng)的設(shè)計原理,發(fā)現(xiàn)設(shè)計過程中的 不足和知識的欠缺,為今后做出更好的設(shè)計打下一個堅實的基礎(chǔ)。 2 2相關(guān)技術(shù)和開發(fā)平臺相關(guān)技術(shù)和開發(fā)平臺 2.12.1 開發(fā)環(huán)境的選擇開發(fā)環(huán)境的選擇 整個系統(tǒng)開發(fā)完全采用 Browser/Server 模式,開發(fā)平臺為 Java 平臺,以 Tomcat 為 JSP 引擎和 Web 服務(wù)器,后臺數(shù)據(jù)庫使用 SQL Server 20XX。 在開發(fā)模式上選擇 Browser
12、/Server 模式,是因為 B/S 模式有以下優(yōu)點: 1開發(fā)成本及維護成本降低。由于 B/S 架構(gòu)管理軟件只安裝在服務(wù)器端 (Server)上,網(wǎng)絡(luò)管理人員只需要管理服務(wù)器就行了,用戶界面主要事務(wù)邏輯在 服務(wù)器(Server)端完全通過 WWW 瀏覽器實現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實 現(xiàn),所有的客戶端只有瀏覽器,網(wǎng)絡(luò)管理人員只需要做硬件維護。 2良好的安全性能,防火墻技術(shù)可以保證后臺數(shù)據(jù)庫的安全性。所有客戶 端請求都是通過 DBMS 來訪問數(shù)據(jù)庫,從而大大減少了數(shù)據(jù)直接暴露的風險。因 此系統(tǒng)的架構(gòu)就采用了 B/S 設(shè)計模式。 2.22.2 JSP 技術(shù)技術(shù) 1. JSP 簡介
13、 第 2 頁 共 23 頁 JSP(JavaServer Pages)是由 Sun Microsystems 公司倡導(dǎo)、許多公司參與 一起建立的一種動態(tài)網(wǎng)頁技術(shù)標準, 在傳統(tǒng)的網(wǎng)頁 HTML 文件(*.htm,*.html)中 加入 Java 程序片段(Scriptlet)和 JSP 標記(tag),就構(gòu)成了 JSP 網(wǎng)頁(*.jsp)。 Web 服務(wù)器在遇到訪問 JSP 網(wǎng)頁的請求時,首先執(zhí)行其中的程序片段,然后將執(zhí) 行結(jié)果以 HTML 格式返回給客戶。程序片段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁以及 發(fā)送 email 等等,這就是建立動態(tài)網(wǎng)站所需要的功能。所有程序操作都在服務(wù) 器端執(zhí)行,網(wǎng)絡(luò)上傳送
14、給客戶端的僅是得到的結(jié)果,對客戶瀏覽器的要求最低,可 以實現(xiàn)無 Plugin,無 ActiveX,無 Java Applet,甚至無 Frame。 在 Sun 正式發(fā)布 JSP(JavaServer Pages) 之后,這種新的 Web 應(yīng)用開發(fā) 技術(shù)很快引起了人們的關(guān)注。 JSP 為創(chuàng)建高度動態(tài)的 Web 應(yīng)用提供了一個獨 特的開發(fā)環(huán)境。JSP 與 Microsoft 的 Active Server Pages 兼容,但是它是使用 類似 HTML 的卷標以及 JAVA 程序代碼段,而不是 VBScript。 2. SQL20XX 簡介 在本次畢業(yè)設(shè)計中,應(yīng)用到了數(shù)據(jù)庫,在畢業(yè)設(shè)計中采用的是
15、SQL20XX 數(shù)據(jù) 庫系統(tǒng),所以在這個地方有必要對其進行簡單的介紹。 SQL 是一種數(shù)據(jù)庫所用的標準語言,全名為 Structured Query Language。Microsoft SQL Server 是基于 SQL 的客戶服務(wù)器數(shù)據(jù)庫。它是一 個高性能、多用戶的關(guān)系型數(shù)據(jù)庫,具有高容量的事務(wù)處理及決策支持功能,使 用戶能夠用它建立大范圍的分布式系統(tǒng)。 基本上,SQL Server 也是數(shù)據(jù)庫的一種,與 Access 數(shù)據(jù)庫一樣,主要的功能 就是用來存儲數(shù)據(jù),但相對于 Access 數(shù)據(jù)庫來說,SQL Server 又多了一些數(shù)據(jù) 庫應(yīng)有的功能,整理如下: (1)安全性:在 SQL S
16、erver 中提供了賬號管理的功能。對于數(shù)據(jù)庫中所存 儲的數(shù)據(jù),可通過賬號與密碼的管理,達到數(shù)據(jù)保密的目的。 (2)集中性:在 Access 數(shù)據(jù)庫中,一個文件就是一個數(shù)據(jù)庫,不易集中管理, 而 SQL Server 則是將所有的數(shù)據(jù)庫都放在同一個 Server 中,方便用戶管理。 (3)記錄性:在 SQL Server 中,有一個 Log 文件,是專門用來記錄用戶在數(shù) 據(jù)庫中所進行的改變。例如,新增了哪幾條記錄,刪除哪幾條記錄,若將來發(fā)現(xiàn)執(zhí) 行錯誤,即可利用 Undo(恢復(fù))將執(zhí)行過的動作,恢復(fù)成未改變之前的數(shù)據(jù)存儲狀 態(tài)。 (4)備份性:對于 Access 數(shù)據(jù)庫而言,所謂的備份就是將文件
17、再復(fù)制一份, 而 SQL Server 中則設(shè)計有一套很完整的數(shù)據(jù)庫備份系統(tǒng),讓用戶可以既方便又 容易地備份數(shù)據(jù)。 (5)完整性:由于 SQL Server 中提供了很多數(shù)據(jù)庫相關(guān)功能,算是一個更為 第 3 頁 共 23 頁 完整的數(shù)據(jù)庫系統(tǒng)。 SQL Server 作為 Windows 數(shù)據(jù)庫家族中出類拔萃的成員,其穩(wěn)定性和安全 性是無與倫比的,這也是網(wǎng)站建設(shè)至關(guān)重要的。隨著 SQL Server20XX 的推出,其 易用性、可擴展性、穩(wěn)定性等方面又有了明顯增強。因此,我們選擇 SQL Server 作為建立網(wǎng)站數(shù)據(jù)庫的工具。 2.32.3 系統(tǒng)所需協(xié)議介紹系統(tǒng)所需協(xié)議介紹 SMTP(簡單郵
18、件傳輸協(xié)議)負責郵件的發(fā)送和傳輸,使用 TCP25 端口,首先用 戶寫好郵件之后發(fā)送給 SMTP 服務(wù)器,SMTP 將郵件轉(zhuǎn)換為 ASCII 碼并添加報頭, 發(fā)送出去,郵件在 INTERNET 中路由交換到達目的地的郵件服務(wù)器,對方的 SMTP 將郵件的 ASCII 碼解碼。 SMTP 協(xié)議是隨著 Internet 的發(fā)展逐漸規(guī)范化和進一步完善的。SMTP 協(xié)議 最早在 RFC821 中被定義,它提供了 Internet 上兩個節(jié)點之間傳送信息的一種方 式。SMTP 協(xié)議非常的簡單和直觀,在 RFC821 中,SMTP 由一些通過 ASCII 碼表示 的命令字組成,通過這些命令字,兩個節(jié)點之間
19、(客戶機和服務(wù)器)可以建立 SMTP 連接,并進行信息傳遞。 POP 協(xié)議(電子郵局協(xié)議)是一種允許用戶從郵件服務(wù)器收發(fā)郵件的協(xié)議。 它有兩種版本,即 POP2 和 POP3,都具有簡單的電子郵件存儲轉(zhuǎn)發(fā)功能。POP2 與 POP3 本質(zhì)上類似,都屬于離線式工作協(xié)議,但是由于使用了不同的協(xié)議端口,兩 者并不兼容。與 SMTP 協(xié)議相結(jié)合,POP3 是目前最常用的電子郵件服務(wù)協(xié)議。 POP3 除了支持離線工作方式外,還支持在線工作方式。在離線工作方式下, 用戶收發(fā)郵件時,首先通過 POP3 客戶程序登錄到支持 POP3 協(xié)議的郵件服務(wù)器, 然后發(fā)送郵件及附件;接著,郵件服務(wù)器將為該用戶收存的郵件
20、傳送給 POP3 客 戶程序,并將這些郵件從服務(wù)器上刪除;最后,郵件服務(wù)器將用戶提交的發(fā)送郵 件,轉(zhuǎn)發(fā)到運行 SMTP 協(xié)議的計算機中,通過它實現(xiàn)郵件的最終發(fā)送。在為用戶從 郵件服務(wù)器收取郵件時,POP3 是以該用戶當前存儲在服務(wù)器上全部郵件為對象 進行操作的,并一次性將它們下載到用戶端計算機中。一旦客戶的郵件下載完畢,郵 件服務(wù)器對這些郵件的暫存托管即告完成。使用 POP3,用戶不能對他們貯存在 郵件服務(wù)器上的郵件進行部分傳輸。離線工作方式適合那些從固定計算機上收 發(fā)郵件的用戶使用。 當使用 POP3 在線工作方式收發(fā)郵件時,用戶在所用的計算機與郵件服務(wù)器 保持連接的狀態(tài)下讀取郵件。用戶的郵
21、件保留在郵件服務(wù)器上。 2.42.4 系統(tǒng)所需配置簡介系統(tǒng)所需配置簡介 1. Tomcat Tomcat 是一個免費的開源的 Serlvet 容器,它是 Apache 基金會的 Jakarta 第 4 頁 共 23 頁 項目中的一個核心項目,由 Apache,Sun 和其它一些公司及個人共同開發(fā)而成。 由于有了 Sun 的參與和支持,最新的 Servlet 和 Jsp 規(guī)范總能在 Tomcat 中得到 體現(xiàn)。 在 Tomcat 中,應(yīng)用程序的部署很簡單,用戶只需將自己的 WAR 放到 Tomcat 的 webapp 目錄下,Tomcat 會自動檢測到這個文件,并將其解壓。用戶在瀏覽器 中訪問這
22、個應(yīng)用的 Jsp 時,通常第一次會很慢,因為 Tomcat 要將 Jsp 轉(zhuǎn)化為 Servlet 文件,然后編譯。編譯以后,訪問將會很快。另外 Tomcat 也提供了一個 應(yīng)用:manager,訪問這個應(yīng)用需要用戶名和密碼,用戶名和密碼存儲在一個 xml 文件中。通過這個應(yīng)用,輔助于 Ftp,用戶可以在遠程通過 Web 部署和撤銷應(yīng)用。 當然本地也可以。 基于 Tomcat 的開發(fā)其實主要是 Jsp 和 Servlet 的開發(fā),開發(fā) Jsp 和 Servlet 非常簡單,你可以用普通的文本編輯器或者 IDE,然后將其打包成 WAR 即 可。這里要提到另外一個工具 Ant,Ant 也是 Jaka
23、rta 中的一個子項目,它所實現(xiàn) 的功能類似于 Unix 中的 make。只需要寫一個 build.xml 文件,然后運行 Ant 就 可以完成 xml 文件中定義的工作,這個工具對于一個大的應(yīng)用來說非常好,只需 在 xml 中寫很少的東西就可以將其編譯并打包成 WAR。事實上,在很多應(yīng)用服務(wù) 器的發(fā)布中都包含了 Ant。另外,在 Jsp1.2 中,可以利用標簽庫實現(xiàn) Java 代碼 與 Html 文件的分離,使 Jsp 的維護更方便。 Tomcat 在 JBuder 中不用配置,但是在用 Eclipce 中就需要配置:首先安裝 好 Tomcat,然后把 Tomcat 的包 apache-to
24、mcat-5.5.15 在 MyEclipce 下進行配 置就可以了。配置好后綁定,啟動。MyEclipce 下面進行介紹。 2. Eclipse 和 MyEclipse 相比于大量的 JAVA 開發(fā)工具,不可否認 Borland 的 JBuider 和 Eclipse 是 最可靠也是最普遍的。相比于 JBuider,Eclipse 小巧,速度上更是大大超越了 JBuider,所以這次設(shè)計用的是 Eclipse。 Eclipse 是一個開放源代碼的、與 NetBeans、Sun ONE Studio 和 Borland JBuider 類似的一種基于 Java 的整合型可擴展開發(fā)平臺,也是目前
25、最著名的開 源項目之一,就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建 開發(fā)環(huán)境。幸運的是,Eclipse 附帶了一個標準的插件集,包括 Java 開發(fā)工具 (Java Development Tools,JDT)。其未來的目標不僅僅是成為專門開發(fā) Java 程 序的 IDE 環(huán)境,根據(jù) Eclipse 的體系結(jié)構(gòu),通過開發(fā)插件,它能擴展到任何語言的 開發(fā),甚至能成為圖片繪制的工具。 Eclipse SDK(軟件開發(fā)者包)是 Eclipse Platform、JDT 和 PDE 所生產(chǎn)的組 件合并,它們可以一次下載。這些部分在一起提供了一個具有豐富特性的開發(fā)環(huán) 第 5 頁 共 2
26、3 頁 境,允許開發(fā)者有效地建造可以無縫集成到 Eclipse Platform 中的工具。 Eclipse SDK 由 Eclipse 項目生產(chǎn)的工具和來自其它開放源代碼的第三方軟件 組合而成。Eclipse 項目生產(chǎn)的軟件以 CPL 發(fā)布,第三方組件有各自自身的許可 協(xié)議。 MyEclipse 企業(yè)級工作平臺(MyEclipse Enterprise Workbench ,簡稱 MyEclipse)是對 Eclipse IDE 的擴展,利用它我們可以在數(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 項目部署服務(wù) (6)數(shù)據(jù)庫服務(wù) (7)MyEclipse 整合幫助 對于以上每一種功能上的類別,在 Eclipse 中都有相應(yīng)的功能部件,并通過 一系列的插件來實現(xiàn)它們。MyEclipse 結(jié)構(gòu)上的這種模塊化,可以讓我們在不影 響其他模塊的情況下,對任一模塊進行單獨的擴展和升級。 3 3
28、系統(tǒng)需求分析與總體設(shè)計系統(tǒng)需求分析與總體設(shè)計 3.13.1 系統(tǒng)設(shè)計目的系統(tǒng)設(shè)計目的 本次畢業(yè)設(shè)計所要完成的,是一個 tomcat 服務(wù)器下的郵件收發(fā)平臺,該平臺 功能類似于 OUTLOOK,但是由于時間的關(guān)系,只是實現(xiàn)了 OUTLOOK 的部分功能,但 是該平臺是基于 WEB 的一個 B/S 應(yīng)用程序,它不用安裝傳統(tǒng)的 C/S 程序,只是需 要在任意的客戶端上訪問該服務(wù)器就可以實現(xiàn)郵件收發(fā)功能。 3.23.2 系統(tǒng)功能需求分析系統(tǒng)功能需求分析 由于該 WEB 平臺是通過 SMTP 協(xié)議來進行發(fā)送郵件,POP3 協(xié)議來接收郵件, 所以該平臺只是相當于一個代理郵件系統(tǒng)。該平臺應(yīng)該實現(xiàn)用戶的登錄驗
29、證,只 有擁有對該郵箱有合法權(quán)限的用戶才能進行登錄,可以有多個用戶同時對該郵箱 (所代理的郵箱)進行控制。而在發(fā)郵件系統(tǒng)中,需要用戶輸入要送發(fā)郵件的對方 郵箱名稱,可以進行本地計算機資源傳輸,也就是添加附件的功能。在收郵件系 統(tǒng)中,郵箱將自動將所有郵件包括其基本信息顯示在收件箱中,并且將帶附件的 郵件的附件自動保存在本地計算機特定路徑下。 第 6 頁 共 23 頁 3.33.3 系統(tǒng)總體構(gòu)架系統(tǒng)總體構(gòu)架 系統(tǒng)總體模塊框架如下圖所示,用戶在不同的模塊通過相關(guān)操作完成對郵件 的接收和發(fā)送并實現(xiàn)對郵件的管理。系統(tǒng)總體結(jié)構(gòu)分為四個模塊,關(guān)于每個模塊 的具體功能和實現(xiàn)將在后面進行介紹。 圖 1 設(shè)計系統(tǒng)
30、結(jié)構(gòu)圖 3.43.4 系統(tǒng)功能模塊簡介系統(tǒng)功能模塊簡介 1.登錄模塊 要求用戶輸入正確的用戶名,密碼。如果輸入信息合法則登錄成功進入郵件 發(fā)送模塊。如果輸入信息某一項錯誤,則顯示該用戶名不存在,登錄失敗。 圖 2 登錄流程圖 2.郵件發(fā)送模塊 用戶發(fā)送郵件,需要輸入收件人郵箱 Adress,郵件標題,正文。如果需要添 加附件則點擊“瀏覽”進行添加。 如果輸入的收件人郵箱 Adress 錯誤或文本框至少有一項為空,則郵件發(fā)送 失敗,反之郵件發(fā)送成功,轉(zhuǎn)到郵件發(fā)送成功界面。 郵件收發(fā)系統(tǒng) 用戶登錄 模塊 接收郵件 模塊 發(fā)送郵件 模塊 郵件管理 模塊 發(fā)送郵件 失 敗 跳轉(zhuǎn)到收件箱 驗證信息 成功
31、 用戶登錄 第 7 頁 共 23 頁 失敗 圖 3 發(fā)送郵件流程圖 3. 郵件接收模塊 通過郵件發(fā)送界面點擊超連接進入郵件接收界面,系統(tǒng)將所有接收的郵件信 息顯示出來,包括發(fā)件人、主題、發(fā)送時間、郵件大小等。如果是帶有附件的郵 件,附件則自動保存到本地計算機特定路徑下。 4.郵件管理模塊 在收郵件箱內(nèi)點擊你要讀取的郵件即可進入該郵件了解其中的具體內(nèi)容,進 入某一封具體信件后將可以完整的看到該信件的具體內(nèi)容,同樣可以點擊頁面上 的超連接進行回復(fù)或繼續(xù)查看其他信件。 3.53.5 數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計 本系統(tǒng)的數(shù)據(jù)庫只涉及到了用戶登錄信息一張表格,主要用來檢查用戶是否 有權(quán)限登錄該郵箱。 表 1
32、用戶信息表 名稱字段名稱數(shù)據(jù)類型主鍵非空 用戶名unameVarchar(50)noNo 密碼passVarchar(50)noNo 代理服務(wù)器serverVarchar(50)noNo 標識列idInt(4)yesNo 4 4系統(tǒng)詳細設(shè)計及實現(xiàn)系統(tǒng)詳細設(shè)計及實現(xiàn) 4.14.1 系系統(tǒng)流程說明統(tǒng)流程說明 該系統(tǒng)首先需要用戶填寫合法的登錄信息,系統(tǒng)對信息進行驗證。驗證失敗 則返回登錄頁面并顯示相應(yīng)錯誤信息,驗證成功則進入收件箱列表。然后用戶可 以根據(jù)自己的需要可以選擇讀取具體某一封信件也可以進入發(fā)件箱來發(fā)送郵件。 下面用一張流程圖來進行形象的說明。 發(fā)送成功頁面 用戶登錄 發(fā)件處理程序 第 8
33、頁 共 23 頁 圖 4 系統(tǒng)流程圖 4.24.2 用用戶管理模塊戶管理模塊 該部分數(shù)據(jù)庫方面只是涉及到一張Userinfo表,有3個字段,分別是標識列 (主鍵):ID (int(4);用戶名:username(varchar(50);密碼: pass(varchar(50);用戶郵箱:sever(varchar(50)。當用戶進入登錄頁面后, 要求輸入用戶名和密碼,而且用戶名不能為空,如果為空validator驗證框架將會 判斷,而且阻止表單提交。 表單提交后在配置文件Struts-config.xml中找到相應(yīng)的Action,再通過該 配置的name屬性找到相應(yīng)的ActionForm,對它
34、進行表單值的填充,然后進入真正 的控制器處理程序LoginAction的execute方法,在該方法中將用戶名,密碼作為 參數(shù)傳入讀取數(shù)據(jù)庫的數(shù)據(jù)處理層中,由JTDS建立驅(qū)動,連接,構(gòu)建SQL語句,用預(yù) 編譯對象執(zhí)行SQL語句,再用它的SET方法傳送參數(shù),由于是一個查詢語句有返回 值,用ResultSet對象接收,進行讀取,如果存在,也就是說存在用戶名和密碼都和 用戶輸入信息相同,而且在同一行,則返回一個Boolean TRUE,否則沒找到就返回 一個FALSE。如果返回的值為false,則返回一個mapping對象,該對象在配置文件 中找到相應(yīng)的跳轉(zhuǎn)路徑(該處理返回一個錯誤頁面)。如果返回t
35、rue,那么程序繼 續(xù)運行,因為程序的設(shè)計要求是驗證成功后進入的是讀取全部郵件的一個列表, 所以在下面的程序中要對郵件進行讀取,并返回所有的信息。如果返回true后, 進入真正的郵件接收處理程序,在得到所有郵件的信息后把它們用ArrayList集 合進行保存,并通過request請求將結(jié)果集返回。 字符編碼處理 郵件收發(fā)處理 接收全部郵件 操作提示頁面 表單提交驗證 失 敗 成功 第 9 頁 共 23 頁 圖5 用戶登錄框 當用戶登錄信息為空時所顯示的頁面如圖6所示。 圖6 非法用戶登錄頁面 當用戶登錄名不存在時所顯示的頁面如圖7所示。 圖7 用戶名不存在時顯示的頁面 主要代碼: html:f
36、orm action=/login.do method=post 該代碼是在Login.jsp中實現(xiàn)由用戶提交表單后提交到的控制器位置。提交 方法為post. 而在Struts框架中的關(guān)鍵是對核心配置文件Struts-Config.xml的配置, 該 配置決定了整個應(yīng)用程序的程序控制。該代碼是在對Login.jsp提交上來的 Action和ActionForm的查找做部署。名字為login,提交路徑為path=/login,生 存周期為會話,該控制器的物理路徑為 第 10 頁 共 23 頁 type=com.action.LoginAction,forward 標簽為當控制器處理完后返回一個
37、Actionorward的對象,該對象將在該標簽內(nèi)對應(yīng),查找到對應(yīng)的name屬性后,根據(jù) path跳轉(zhuǎn)到對應(yīng)的jsp.該action的name屬性將找對應(yīng)的ActionForm進行相應(yīng)的 表單填充。actionForm的配置代碼如下 該 ActionForm 是一個動態(tài)的 ActionForm,該類繼承于 org.apache.struts.validator.DynaValidatorForm,在form-property 標簽里面 指定他的屬性和類型。 在對表單的非空驗證的時候用了 Validator 驗證框架,該框架的配置文件 如下: 對應(yīng)的配置文件的實現(xiàn)如下代碼: 上面的代碼是對表單的
38、非空驗證,是對應(yīng)的要驗證的 表單名字,中property為指定要驗證的 第 11 頁 共 23 頁 表單控件名字,depends為驗證方法,該方法在Validator驗證框架中已經(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)+; 上面代碼是控制器實現(xiàn)對用戶權(quán)限的合法性的判斷。其中Action是Struts框 架中的控制器,通過重寫它的execute方法實現(xiàn)Struts控制器。D
40、ynaActionForm ac=(DynaActionForm)form為實例已經(jīng)填充的ActionForm對象。通過用戶在下拉 列表中選擇的郵箱來判斷代理服務(wù)器的名字。 對用戶是否在數(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ù)庫中該用戶名字存在則返回一個TRUE,通過判斷來選擇是跳轉(zhuǎn)到 哪個頁面。return mapping.findForward(return)就是返回一個在Struts-config.xml 中存在的forward對象。 public boolean check(S
42、tring name,String pass,String server) String sql=select * from Userinfo where uname=(?) and pass=(?) and server=(?); 第 12 頁 共 23 頁 查詢的游標字符串。 boolean T=false; tryClass.forName(ul); 建立驅(qū)動。 catch(ClassNotFoundException e)e.printStackTrace(); try Connection con=DriverManager.getConnection(ur); 建立連接 tryPr
43、eparedStatement pt=con.prepareStatement(sql); 建立預(yù)編譯對象。 try pt.setString(1,name); pt.setString(2,pass); pt.setString(3,server); 設(shè)置編譯對象的差數(shù)。 ResultSet rs=pt.executeQuery(); 用結(jié)果集來存儲返回記錄。 while(rs.next()T=true; 如果有該記錄返回真。 finallypt.close(); finallycon.close(); catch(SQLException q)q.printStackTrace(); re
44、turn T; 4.34.3 郵件發(fā)送郵件發(fā)送模塊模塊 登錄成功后點擊超鏈接進入發(fā)郵件箱,在這里用戶可以輸入相應(yīng)的信息,可 超鏈接到發(fā)件箱,輸入內(nèi)容表單提交,進入控制器 SendM,在 execute 方法里調(diào)用 郵件發(fā)送核心代碼(SendText.java),在該方法中利用 SMTP 發(fā)送郵件的代碼,發(fā) 送郵件主要需要 4 個主要的對象,Session 對象,建立連接;Prop 是 Properties 的對象,Properties 是 java.util 包下的類,是一個集合類,封裝 SMTP 協(xié)議的類; MimeMessage 類,通過該對象來實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的傳輸,將發(fā)件人添加到列表中;
45、sendmail 為從表單中提交來的路徑的字符串形式。通過他將正文和附件內(nèi)容分 開封裝進行傳輸;附件以 DataSource 類型保存。發(fā)送郵件,從 MimeMessage 對 象中獲得發(fā)送人的 Adress 列表,發(fā)送成功后進入 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主機 prop.put(mail.smtp.auth, true); 使用smtp身份驗證 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(); 定義一個Multipart對象用來裝整個郵件的正文部分 Multipart multipart = new MimeMultipart(); 定義一個MimeBodyPart對象,用來裝郵件的文本內(nèi)容然后加入Multipart 對象中 MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText(content); multipart.addBodyPart(messageBodyPart);/ 裝載正文 定義一個MimeBodyPart對象,用來裝
49、郵件的附件內(nèi)容然后加入Multipart 對象中 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ā)送的對象 tra.connect(, wen870105, wenshengyong); 連接方法1 tra.sendMessage(mess, mess.getAllRecipients(); / tra.send(mess);/該方法發(fā)送不用建立連接 tra.close(); catch (MessagingException ex) ex.printStackTrace(); 下面的代碼為整個應(yīng)用程序的Struts-config.xml的配置。 第 15 頁
51、 共 23 頁 4.44.4 郵件接收郵件接收模塊模塊 點擊超鏈接后進入 ResiveM 中,同樣在該控制器中調(diào)用接收郵件的核心代碼 (Mail.java).在該方法中首先由自己的代理郵箱用戶名,密碼和 POP3 協(xié)議建立 連接,以只讀方式打開并將信息保存在 Message 數(shù)組中循環(huán)得到各部分想得到的 值,在得到的值中由于存在字符編碼等問題,所以封裝了一個類 MailFetcher.java 用來得到各部分信息,并且進行處理。各部分在代碼中都做 了注解,通過調(diào)用方法可以得到,然后用 Hash Table 進行間值對的封裝,再存放 在回話中。由于要傳到 JSP 中讀取,通過會話可以實現(xiàn),也可以
52、通過 request 的 getAttrntrt 方法。 關(guān)鍵難點是在對有附件的處理的時候,要先通過判斷,要判斷內(nèi)容為什么類 型,然后把內(nèi)容進行解析,String 的為正文,那么要傳回來進行保存,在 JSP 中顯 示。如果為附件,則通過 IO 的形式在本地計算機上保存。 郵件接收界面如圖 9 所示。 圖 9 接收郵件界面 主要代碼: 下面是在控制器中對郵件的讀取的方法的調(diào)用 String mailHost = ; String userName = wen870105; 第 17 頁 共 23 頁 String pwd = wenshengyong; ArrayList arr=new Arr
53、ayList();范型,只 能在1.5語法中 try 對讀取所有郵件的方法的調(diào)用 arr=Mail.receiveAllMail(mailHost, userName, pwd); 保存郵件的信息,存儲在request中 request.setAttribute(arr, arr); 返回一個ActionForward對象 return mapping.findForward(recev); 查看所有郵件消息的具體實現(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)用查看其中一個郵件的內(nèi)容的方法 String mailHost = ; String userName = wen870105; String pwd = wenshengyong; DynaActionForm ac=(DynaActionForm)form; 得到超連接傳的參數(shù)來判斷具體是哪個郵件
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)容存儲在request中。 下面代碼為實現(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 用戶登錄模塊測試用戶登錄模塊測試 對該模塊的測試主要是測試用戶的登錄情況,對各種異常信息進行測試。 用戶登錄模塊測試如表2所示。 表 2 用戶登錄模塊測試數(shù)據(jù)列表 測試功 能 測試數(shù)據(jù)預(yù)期結(jié)果實際結(jié)果比較 用戶登 錄 用戶名:joy 密碼:123 輸入不合 法 用戶不存在錯誤的密碼,登錄失敗 用戶登 錄 用戶名
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題02化學(xué)實驗基本技能-2023年高考化學(xué)一輪復(fù)習(xí)小題多維練(新高考專用)
- 夢想作文演講稿400字(8篇內(nèi)容范文)
- 2024年腹部外科手術(shù)器械項目成效分析報告
- 2024年新形勢下白酒二批協(xié)議
- 2023年泌尿系統(tǒng)感染用藥項目成效分析報告
- 2023年油基型密封膠項目評價分析報告
- 幼兒園中班總結(jié)報告?zhèn)€人(5篇)
- 2024年攜手共進:餐飲業(yè)合作伙伴協(xié)議
- 2024年攪拌站工程用混凝土及砂漿采購合同
- 2024年工程機械租賃全面協(xié)議
- 五年級英語上冊Unit1Getupontime!教案陜旅版
- 風機安裝工程質(zhì)量通病及預(yù)防措施
- 三角形鋼管懸挑斜撐腳手架計算書
- 文件和文件夾的基本操作教案
- 剪紙教學(xué)課件53489.ppt
- 旅游業(yè)與公共關(guān)系PPT課件
- 勞動法講解PPT-定稿..完整版
- 彩色的翅膀_《彩色的翅膀》課堂實錄
- 假如你愛我的正譜
- 銅芯聚氯乙烯絕緣聚氯乙烯護套控制電纜檢測報告可修改
- 中醫(yī)住院醫(yī)師規(guī)范化培訓(xùn)基地工作指南
評論
0/150
提交評論