簡(jiǎn)單郵件客戶端設(shè)計(jì)_第1頁(yè)
簡(jiǎn)單郵件客戶端設(shè)計(jì)_第2頁(yè)
簡(jiǎn)單郵件客戶端設(shè)計(jì)_第3頁(yè)
簡(jiǎn)單郵件客戶端設(shè)計(jì)_第4頁(yè)
簡(jiǎn)單郵件客戶端設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

aaaa《計(jì)算機(jī)網(wǎng)絡(luò)》課程設(shè)計(jì)報(bào)告題目:簡(jiǎn)單郵件客戶端設(shè)計(jì)學(xué)院:計(jì)算機(jī)科學(xué)與工程學(xué)院專業(yè):軟件工程2012年3月10日目錄TOC\o"1-5"\h\z\o"CurrentDocument"簡(jiǎn)單郵件客戶端設(shè)計(jì)說(shuō)明書 1一前言 1二需求分析 12.1功能需求 1\o"CurrentDocument"2.2開(kāi)發(fā)環(huán)境工具 1\o"CurrentDocument"2.3所需要的知識(shí) 2三概要設(shè)計(jì) 2\o"CurrentDocument"3.1郵件系統(tǒng)各功能概述 2\o"CurrentDocument"JavaMai1簡(jiǎn)介 2\o"CurrentDocument"3.1.2設(shè)計(jì)目標(biāo) 33.1.3系統(tǒng)功能概述 3\o"CurrentDocument"3.2郵件管理系統(tǒng)總體設(shè)計(jì)方案 4\o"CurrentDocument"3.2.1系統(tǒng)體系結(jié)構(gòu) 4\o"CurrentDocument"3.2.2功能模塊 4\o"CurrentDocument"3.3系統(tǒng)開(kāi)發(fā)的技術(shù)難點(diǎn)和解決方案 5\o"CurrentDocument"MIMEMesssage的解析 5\o"CurrentDocument"3.3.2郵件發(fā)送 6\o"CurrentDocument"3.3.3系統(tǒng)性能問(wèn)題 6\o"CurrentDocument"3.4系統(tǒng)特點(diǎn) 7\o"CurrentDocument"3.5系統(tǒng)具體設(shè)計(jì) 73.6關(guān)鍵代碼 113.7結(jié)束語(yǔ) 20簡(jiǎn)單郵件客戶端設(shè)計(jì)說(shuō)明書一刖言隨著互聯(lián)網(wǎng)技術(shù)及網(wǎng)絡(luò)辦公化的發(fā)展,電子郵件成為人們主要的通信方式之一。越來(lái)越多的人開(kāi)始使用它。而且用它的人數(shù)勢(shì)必會(huì)繼續(xù)增加。雖然,現(xiàn)在已經(jīng)有很多的郵件收發(fā)軟件例如著名的FoxMail,但是對(duì)于大多數(shù)的非專業(yè)的人來(lái)說(shuō)它還是有點(diǎn)難度。因此,我們所設(shè)計(jì)的基于JavaMail的郵件收發(fā)系統(tǒng)就利用JavaMail開(kāi)發(fā)包的高級(jí)應(yīng)用和E-Mail的相關(guān)協(xié)議開(kāi)發(fā)出這個(gè)功能相對(duì)簡(jiǎn)單,但是實(shí)用、方便、快捷的郵件收發(fā)系統(tǒng)。主要用于幫助用戶將郵件發(fā)送給SMTP服務(wù)器和從POP3郵件服務(wù)器讀取用戶的電子郵件。它集郵件的撰寫、發(fā)送和接收功能與一體。并且支持附件的發(fā)送和接收以及其它一些附加功能的實(shí)現(xiàn)。雖然它沒(méi)有FoxMail那么強(qiáng)大的功能,但是它容易掌握和使用。整個(gè)系統(tǒng)功能流暢,從操作簡(jiǎn)便、界面友好、靈活實(shí)用的要求出發(fā),使用戶之間的交流能夠更加地方便和快捷。本人結(jié)合SMTP以及POP3協(xié)議的實(shí)現(xiàn)原理、相關(guān)JavaMailAPI幫助文檔以及相關(guān)參考書,實(shí)現(xiàn)了一個(gè)工作在PC下的郵箱客戶端程序,該程序基本上實(shí)現(xiàn)了一個(gè)郵箱所對(duì)應(yīng)的所有功能。二需求分析2.1功能需求(1) 開(kāi)發(fā)一個(gè)JavaMailAPI下的郵箱客戶端,實(shí)現(xiàn)郵件的發(fā)送、接收以及。(2) 通過(guò)輸入服務(wù)器地址、用戶名、密碼,可以實(shí)現(xiàn)遠(yuǎn)程FTP服務(wù)器登錄。(3) 提供本地文件和文件夾的上傳功能,對(duì)FTP主機(jī)文件進(jìn)行下載和刪除。(4) 提供對(duì)本地目錄的讀取與返回,能夠列出文件和文件夾。(5) FTP提供兩種工作模式的選擇,Port模式(主動(dòng)模式)和Passive模式(被動(dòng)模式)。aaaa2.2開(kāi)發(fā)環(huán)境工具(1)使用編程工具:(1)使用編程工具:Eclipse使用的語(yǔ)言:Java使用的開(kāi)發(fā)包:javamail-1_4版,下載地址為/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.4-oth-JPR開(kāi)發(fā)平臺(tái):MacOSX所需要的知識(shí)計(jì)算機(jī)網(wǎng)絡(luò)的基本知識(shí)了解SMTP協(xié)議以及POP3協(xié)議基本實(shí)現(xiàn)原理使用Windows下的Eclipse編譯器的使用方法熟悉郵件的各項(xiàng)功能。三概要設(shè)計(jì)3.1郵件系統(tǒng)各功能概述3.1.1JavaMail簡(jiǎn)介JavaMailAPI是JavaEE的一部分,是JavaSE的可選組件。該組件提供了一個(gè)平臺(tái)無(wú)關(guān)、協(xié)議獨(dú)立的框架,預(yù)置了一些最常用的郵件傳送協(xié)議的實(shí)現(xiàn)方法,通過(guò)一組API來(lái)模擬郵件系統(tǒng)。提供Email的發(fā)送和接收服務(wù)。它借鑒了IMAP、MAPI、CMC等消息系統(tǒng)API的設(shè)計(jì),采用面向?qū)ο蟮乃枷雽⒔?008年4月18日收到接口與實(shí)現(xiàn)相分離,支持存取方式、消息格式、消息傳送協(xié)議不同的郵件消息系統(tǒng),可以簡(jiǎn)便的為應(yīng)用程序增加Email支持,廣泛應(yīng)用于構(gòu)件郵件和消息應(yīng)用系統(tǒng) JavaMailAPI封裝了電子郵件功能中:郵件對(duì)象、發(fā)送、身份認(rèn)證、接收等功能。其核心類有:Session、AuthenticatorAddressMessageTransport、Store、Folder等。其中Session是郵件操作的接口,用于建立了基本的郵件會(huì)話;Authenticator類提供訪問(wèn)郵件服務(wù)器所需的認(rèn)證信息;Message描述基本的郵件消息,是收發(fā)郵件的操作單位;Transport是發(fā)送郵件時(shí)所用的協(xié)議,通常是SMTP;Store模擬了消息數(shù)據(jù)庫(kù)及其內(nèi)部存儲(chǔ)消息的目錄的訪問(wèn)協(xié)議;Folder用于描述消息數(shù)據(jù)庫(kù)中的目錄結(jié)構(gòu)。一個(gè)Session會(huì)有多個(gè)Trans—port,每個(gè)Store包含一系列的Folder和Message,每個(gè)Folder又包含一系列的Folder和Message。借助這些類,就可以構(gòu)建各種典型的郵件應(yīng)用。JavaMail的最新實(shí)現(xiàn)是1.4版本,可以支持POP3、IMAP4、SMTP協(xié)議。由于JavaMail還需要JavaBeansActivationFramework(JAF)框架的支持,3.1.2設(shè)計(jì)目標(biāo)公用郵箱是和外單位交互的主要渠道,用戶獲取和提交一些重要數(shù)據(jù)和文件,也是與本單位其它部門進(jìn)行業(yè)務(wù)的信息交換的重要渠道。公用郵箱不僅有13常辦公相關(guān)的各類郵件,還有很多其它種類的郵件。此外,一些與辦公相關(guān)的郵件還會(huì)發(fā)送到工作人員的個(gè)人郵箱中。工作人員使用Fox.mail或其它郵件客戶端將公用郵箱中的郵件從服務(wù)器下載至本地,然后進(jìn)行處理。這樣的工作模式存在的缺點(diǎn)有:郵箱中郵件太多,很難找到與工作相關(guān)的郵件,工作效率低下,存在潛在處理風(fēng)險(xiǎn);工作人員都利用郵件客戶端存儲(chǔ)和處理郵件,造成資源浪費(fèi),且無(wú)法及時(shí)得悉郵件的處理情況,難以落實(shí)責(zé)任;難以對(duì)辦公相關(guān)的郵件進(jìn)行統(tǒng)一歸檔和備份,并提供檢索、統(tǒng)計(jì)、數(shù)據(jù)分析等服務(wù);郵件帳號(hào)分散管理,帶來(lái)潛在的信息安全隱患。本系統(tǒng)的設(shè)計(jì)旨在解決這些問(wèn)題,為工作人員提供一個(gè)基于Web的簡(jiǎn)潔、易用、安全可靠、功能完備的辦公郵件處理平臺(tái)。3.1.3系統(tǒng)功能概述(1) 郵件自動(dòng)獲取與過(guò)濾系統(tǒng)每天實(shí)時(shí)或者在固定的時(shí)間,統(tǒng)一收集多個(gè)外部郵件服務(wù)上多個(gè)郵件帳號(hào)的新郵件后匯總在一起,并根據(jù)發(fā)送地址和過(guò)濾規(guī)則對(duì)郵件進(jìn)行過(guò)濾,提取服務(wù)器上的有效郵件,通過(guò)人工干預(yù)或者自動(dòng)化的機(jī)制將郵件基本信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,附件存人文件服務(wù)器,對(duì)完全重復(fù)的郵件通過(guò)比對(duì)后只保留一份。(2) 郵件分類對(duì)過(guò)濾后的有效郵件,按照制定好的分類規(guī)則,根據(jù)郵件主題、發(fā)件人信息、附件屬性及關(guān)鍵詞對(duì)郵件及其附件進(jìn)行歸類,并提供自動(dòng)歸類和人工干預(yù)后確定郵件類別兩種靈活的類別確認(rèn)機(jī)制。(3) 郵件提醒與處理在郵件歸類后,對(duì)于新郵件,系統(tǒng)通過(guò)與短信發(fā)送平臺(tái)的接口,將發(fā)件人、發(fā)送時(shí)間、主題、優(yōu)先級(jí)等信息以短信的形式發(fā)送給相應(yīng)郵件類別的處理者。郵件處理者通過(guò)網(wǎng)頁(yè)登陸系統(tǒng),可以像使用Web郵箱那樣,方便快捷的查閱和處理只屬于自己需要處理的那些郵件。郵件管理系統(tǒng)向用戶提供郵件檢索、刪除、調(diào)整分類等功能??梢越y(tǒng)一直觀的對(duì):信息過(guò)濾情況、信息分類跟蹤、處理情況、審閱結(jié)果、處理者信息、反饋情況等進(jìn)行展示。還可以對(duì)郵件進(jìn)行統(tǒng)計(jì),生成月度及年度郵件統(tǒng)計(jì)報(bào)表。普通用戶只能管理與自己工作相關(guān)的郵件,系統(tǒng)管理員可以管理所有郵件。郵件帳號(hào)設(shè)定及過(guò)濾和分類規(guī)則定義 系統(tǒng)管理員可根據(jù)需求設(shè)定多個(gè)郵件帳號(hào),將不同郵箱的郵件匯總在一起。過(guò)濾規(guī)則是系統(tǒng)選擇接收郵件的依據(jù),目前狀況下,對(duì)郵件地址和發(fā)送時(shí)間進(jìn)行過(guò)濾已能滿足需求。分類規(guī)則是對(duì)郵件進(jìn)行分類的依據(jù),對(duì)每個(gè)公司或單位,管理員可以根據(jù)業(yè)務(wù)類型定義郵件及附件類別,然后指定該類別郵件的關(guān)鍵詞、特征及處理者。3.2郵件管理系統(tǒng)總體設(shè)計(jì)方案3.2.1系統(tǒng)體系結(jié)構(gòu)系統(tǒng)基于B/S結(jié)構(gòu),采用MVC(Mode1.View.Controller)模式,體系結(jié)構(gòu)系統(tǒng)采用三層結(jié)構(gòu):第一層是客戶端層,用戶通過(guò)IE、Firefox等瀏覽器與系統(tǒng)交互,發(fā)起瀏覽、檢索、處理郵件、系統(tǒng)配置與管理等請(qǐng)求,并展示處理結(jié)果。第二層為服務(wù)器層,可以分為兩個(gè)功能相對(duì)獨(dú)立的部分,一個(gè)是Web服務(wù)器,用于響應(yīng)和處理客戶端請(qǐng)求,通過(guò)請(qǐng)求處理程序與后臺(tái)數(shù)據(jù)庫(kù)交互,返回處理結(jié)果給瀏覽器;一個(gè)是郵件處理部分,通過(guò)JavaMailAPI與郵件服務(wù)器交互,發(fā)送和接收郵件,并對(duì)有效郵件進(jìn)行解析與分類,將結(jié)果存放在數(shù)據(jù)庫(kù)和文件系統(tǒng)中,然后借助短信發(fā)送平臺(tái)的接口通知用戶處理郵件。第三層為數(shù)據(jù)層,包括:用于存儲(chǔ)系統(tǒng)信息、郵件信息的數(shù)據(jù)庫(kù)服務(wù)器,存儲(chǔ)郵件附件的文件服務(wù)器。為了提高系統(tǒng)可擴(kuò)展性和滿足復(fù)雜應(yīng)用邏輯的需求,在系統(tǒng)第二層的Web應(yīng)用中,是MVC模式的一種實(shí)現(xiàn)。3.2.2功能模塊系統(tǒng)涵蓋了運(yùn)行中心日常郵件管理與維護(hù)的所有功能,共分為六個(gè)模塊:郵件獲取模塊、郵件發(fā)送模塊、郵件分類模塊、郵件處理模塊、郵件管理模塊、聯(lián)系人模塊。這些模塊功能aaaa相對(duì)獨(dú)立,具有高內(nèi)聚、低耦合的特點(diǎn),每個(gè)模塊都有定義良好的接口,可以擴(kuò)展和增加復(fù)雜的應(yīng)用邏輯。其中,郵件發(fā)送模塊可以發(fā)送文字,圖片,附件,并可以同時(shí)發(fā)送給不同的郵箱。其中可編輯發(fā)送文字的大小格式顏色等。郵件獲取模塊可以獲取郵件,在收件箱可以看到郵件列表,刷新可見(jiàn)新郵件。郵件分類模塊是將郵件客戶端分為發(fā)信箱,收信箱,已發(fā)送,已刪除郵件管理模塊是可對(duì)郵件刪除,回復(fù),徹底刪除,對(duì)已刪除的郵件可以恢復(fù),刷新收信箱。郵件處理模塊是對(duì)郵件的查看,下載附件,回復(fù)。聯(lián)系人模塊是可以添加,刪除聯(lián)系人,發(fā)郵件的時(shí)候可以直接點(diǎn)擊已添加過(guò)的聯(lián)系人進(jìn)行發(fā)送。3.3系統(tǒng)開(kāi)發(fā)的技術(shù)難點(diǎn)和解決方案3.3.1MIMEMesssage的解析MIME(MultipurposeInternetMailExtension)協(xié)議是目前應(yīng)用最廣泛的郵件協(xié)議,用于定義郵件的格式,它可以包含文本、圖像、音頻、視頻以及其它應(yīng)用程序?qū)S玫臄?shù)據(jù)。郵件的解析實(shí)際上可以就是解析MIME消息的過(guò)程,是郵件過(guò)濾、分類、管理等工作的前提。通常情況下,一個(gè)MIME消息由消息頭(Headers)和消息體(Content)組成。消息頭包括:發(fā)送者、接收者、發(fā)送時(shí)間、主題、優(yōu)先級(jí)、郵件內(nèi)容類型、MIME版本號(hào)等信息。消息體為郵件的內(nèi)容,它可以為簡(jiǎn)單的文本,也可以是包含多個(gè)分段(Part)的多重消息(Muhipart),而其中每個(gè)分段的消息都有自己的消息頭和消息體。對(duì)于不帶附件的簡(jiǎn)單郵件,其消息體的內(nèi)容類型是純文本,text/plain或者text/html等。對(duì)于帶附件或者包含多種內(nèi)容格式的郵件,其消息體為muhipart類型,通常為:muhipart/mixed、muhipart/related或multipart/alternative.比如:郵件正文、附件、HTML信件等。因此,郵件消息的解析過(guò)程實(shí)際上是一個(gè)后序周游整棵MIME消息樹(shù)的過(guò)程。消息的解析需要遞歸訪問(wèn)消息中的每個(gè)消息體,也就是樹(shù)的葉結(jié)點(diǎn),從中獲取相關(guān)信息,并生成一個(gè)郵件對(duì)象,用于隨后的郵件分類和寫人數(shù)據(jù)庫(kù)操作。在解析時(shí),需要將發(fā)送者、接收者、主題、發(fā)送時(shí)間、正文等有用信息存儲(chǔ)在定義好的郵件對(duì)象中,將附件和HTML格式的信件存儲(chǔ)在文件系統(tǒng),并將附件的文件名和文件路徑存儲(chǔ)在郵件對(duì)象中。3.3.2郵件發(fā)送Emai1的發(fā)送實(shí)際上就是構(gòu)造一個(gè)MIME消息的過(guò)程。JavaMailAPI提供了相應(yīng)的接口用于構(gòu)造一個(gè)郵件消息,但是相對(duì)較復(fù)雜。本系統(tǒng)采用A—pache的開(kāi)源工具包CommonsEmail來(lái)實(shí)現(xiàn)郵件發(fā)送。CommonsEmail構(gòu)建于JavaMailAPI上,對(duì)JavaMail進(jìn)行了再封裝,提供了極為簡(jiǎn)便的借口用于通過(guò)Java程序發(fā)送Email。它提供的主要類有:SimpleEmail(用于發(fā)送簡(jiǎn)單的文本類型Email)、MultiPartEmail(用于發(fā)送帶附件的Email)、HtmlEmail(用于發(fā)送Html格式的郵件)、EmailAttachment(描述Email的附件)]。借助CommonsEmail工具包發(fā)送一個(gè)簡(jiǎn)單Email只需要?jiǎng)?chuàng)建SimpleEmail對(duì)象,設(shè)置SMTP服務(wù)器、認(rèn)證信息、發(fā)送者、接收者、主題、正文,然后發(fā)送即可。要發(fā)送一個(gè)帶附件的郵件,只需要構(gòu)造一個(gè)MuhiPartEmail對(duì)象,設(shè)置和簡(jiǎn)單Email一樣的屬性,然后構(gòu)造附件對(duì)象并將之附加在MuhiPartEmail中即可。不難看出采用了CommonsEmail工具包后,郵件的發(fā)送十分簡(jiǎn)潔,只需要構(gòu)建相應(yīng)的附件和郵件內(nèi)容即可,而且工具包還支持直接用網(wǎng)絡(luò)上的文件作為附件內(nèi)容。3.3.3系統(tǒng)性能問(wèn)題郵件服務(wù)器上可能會(huì)有很多封郵件,如何判斷一封郵件是否被處理過(guò),并對(duì)未處理的郵件消息進(jìn)行過(guò)濾與分類是系統(tǒng)的一個(gè)性能瓶頸。系統(tǒng)基于Web技術(shù)構(gòu)建客戶端,而Web應(yīng)用程序不可避免的會(huì)有頻繁的數(shù)據(jù)庫(kù)操作,建立數(shù)據(jù)庫(kù)連接是相當(dāng)耗費(fèi)資源和時(shí)間的操作。在JSP應(yīng)用中若直接采用JDBC接口訪問(wèn)數(shù)據(jù)庫(kù),必然會(huì)頻繁建立和關(guān)閉數(shù)據(jù)庫(kù)連接,從而導(dǎo)致服務(wù)器性能下降。為保證系統(tǒng)高效運(yùn)行,采用如下的策略來(lái)提高整體性能:(1) 多線程技術(shù)每個(gè)Email消息的處理是相對(duì)獨(dú)立的過(guò)程,因而采用多線程技術(shù)同時(shí)處理多封郵件是提高性能的最簡(jiǎn)單可行的做法。系統(tǒng)共使用8個(gè)線程處理郵件消息,根據(jù)郵件消息的總數(shù),就能計(jì)算出每個(gè)線程所需要處理的消息數(shù)為N=[M/8]([]表示取上整)。其中第k個(gè)線程處理郵件消息隊(duì)列中第8i+k(i=0,1,…,N一1)個(gè)消息,以倒序的方式處理可以使得消息相對(duì)均勻的分配給處理線程,并保證有效消息先被處理。(2) 靈活高效的過(guò)濾機(jī)制每個(gè)Email都會(huì)對(duì)應(yīng)一個(gè)固定的Message—ID和SentDate,在解析時(shí)很容易獲取。系統(tǒng)會(huì)對(duì)每個(gè)帳號(hào)設(shè)定郵件開(kāi)始接收13期(ReceiveStartDate),在處理E—mail消息時(shí),先根據(jù)SentDate來(lái)判斷,若在該13期前,則不予以處理。每次接收完成后,更新ReceiveStartDate至當(dāng)前13期。為了避免重新設(shè)定Re—ceiveStartDate或者重新執(zhí)行接收任務(wù)時(shí),對(duì)已經(jīng)處理過(guò)的有效郵件重復(fù)處理,系統(tǒng)提供兩種機(jī)制,一種是不在服務(wù)器上保留副本,這樣每次獲取的必然是新郵件;一種是保留副本,但利用Property文件記錄每個(gè)符合要求的消息的處理情況,以便快速判斷郵件消息是否被處理過(guò)。aaaa(3)采用數(shù)據(jù)庫(kù)連接池技術(shù)連接池會(huì)在初始化時(shí)保持一定數(shù)量的數(shù)據(jù)庫(kù)連接,應(yīng)用程序在操作數(shù)據(jù)庫(kù)時(shí),從連接池中獲取一個(gè)連接,完成操作后釋放連接,這樣大大提高了系統(tǒng)性能。保存郵件信息至數(shù)據(jù)庫(kù)時(shí),系統(tǒng)采用ApacheDBCPComponent來(lái)建立數(shù)據(jù)庫(kù)連接池。在系統(tǒng)的Web應(yīng)用部分,通過(guò)配置Tomcat數(shù)據(jù)源來(lái)建立數(shù)據(jù)庫(kù)連接池。3.4系統(tǒng)特點(diǎn)系統(tǒng)借助JavaMailAPI實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的基于Web的郵件客戶端,可以將不同郵件服務(wù)器的有效郵件聚合在一起進(jìn)行統(tǒng)一歸檔管理,并提供統(tǒng)一、友好的界面以方便相關(guān)人員處理郵件。系統(tǒng)在自動(dòng)化的基礎(chǔ)上提供選擇性干預(yù)的機(jī)制,以應(yīng)對(duì)一些特殊情況。系統(tǒng)使用Java語(yǔ)言開(kāi)發(fā),基于B/S結(jié)構(gòu),采用MVC模式,系統(tǒng)層次清晰,結(jié)構(gòu)合理。在后臺(tái)處理程序和應(yīng)用邏輯的設(shè)計(jì)中,采用面向?qū)ο蟮脑O(shè)計(jì)方法和分層設(shè)計(jì)思想,將抽象和實(shí)現(xiàn)相分離,具有很好的可擴(kuò)展性好。為了提高系統(tǒng)性能,采用了多線程技術(shù)和連接池技術(shù),系統(tǒng)執(zhí)行效率高。系統(tǒng)支持自定義簡(jiǎn)單的過(guò)濾規(guī)則、郵件類別、分類規(guī)則,并能很容易的進(jìn)行擴(kuò)展以支持復(fù)雜的自動(dòng)化分類技術(shù)。3.5系統(tǒng)具體設(shè)計(jì)登陸界面簡(jiǎn)單郵件管理系統(tǒng)SMTPIfift:J■洪55契H細(xì)丄g功能目錄文件作)郵件(M)

「電子郵件系統(tǒng)~"爰件夾

收件英4已發(fā)選郵件9已幡輟件L懺系人{口kifless27kino發(fā)送郵件郵件已發(fā)送0900350206郵件己發(fā)送成功!(星期日)收件箱正在查收邱件,詰璃后…r_2_2發(fā)件人__r_2_2發(fā)件人__killessZ?收件箱接畋時(shí)間Re:0900350Z06 衛(wèi)年。3月1L日04:49-讀取郵件內(nèi)容收我啦!??!謝謝你??!1At或1L0A1[為』8:的一打9855如9愈'qq.mtnwtw巴的0W如為8收到啦!!!謝謝你!!!

收件人kill”"收件人kill”"了?OSOO35aZC-6發(fā)送摑間 m已發(fā)送郵Z01Z^03fiLIB12:46已發(fā)送郵件列表■H7nH3EElEE33r^^u刪除U徹底刪除對(duì)郵件的操作:?回復(fù)對(duì)郵件的操作:U.刷新收件箱收件人:kille55?7<kilie55^7(^16S.com>收件人:抄送:主題:回復(fù):匹:。。00350M6回復(fù)郵件aaaaT^JavaMail¥咨「匸再mion?jjbframe 3.6關(guān)鍵代碼$mailutil?雷nriairi?Butils田utils.bickerTray&JRESystemLibrary(JVMContent!mdom^-S.Q.O-ALPHA-^Jar-/Usioiodsn.jar-/Users/sumornoyan;De*何imap.jar-/ers/^umoniQY^n/[應(yīng)msiLJar-/User^/surmomoyan;Dii>iomailapi.jar-yUsers/sumomayar館popSjar-7UsersIsumcmoyanyI?桓imtp.jar-JUiers/sumorYioyari/t卜日ihAalog&r?Xlinkman.xmlLoginAction.java*用于驗(yàn)證登陸是否成功*/packageaction;importmailutil.GetMail;importmailutil.SendAttachMail;importutils.EditorUtils;publicclassLoginAction{privateStringPOP3Host="";//POP3月艮務(wù)器privateStringSMTPHost="";//SMTP月艮務(wù)器privateStringuser="";//登錄服務(wù)器的帳號(hào)privateStringpassword="";//登錄服務(wù)器的密碼privateGetMailgetMail=null;privateSendAttachMailsendMail=null;//三個(gè)參數(shù)的構(gòu)造方法publicLoginAction(StringsMTPHost,StringpOP3Host,Stringuser,Stringpassword){super();POP3Host=pOP3Host;SMTPHost=sMTPHost;this.user=user;this.password=password;//實(shí)例化收郵件對(duì)象getMail=GetMail.getMailInstantiate();getMail.setPOP3Host(POP3Host);getMail.setUser(user);getMail.setPassword(password);//實(shí)例化發(fā)郵件件對(duì)象sendMail=SendAttachMail.getSendMailInstantiate();sendMail.setSMTPHost(SMTPHost);sendMail.setUser(user);sendMail.setPassword(password);}//判斷登陸是否成功publicbooleanisLogin(){booleanisLogin=false;//判斷用戶名是否為空if(checkUser()){try{sendMail.connect();//連接發(fā)件服務(wù)器(只能通過(guò)連接發(fā)件箱驗(yàn)證身份,否者發(fā)件時(shí)會(huì)拋異常)isLogin=true;}catch(Exceptione){isLogin=false;e.printStackTrace();}}returnisLogin;}//驗(yàn)證用戶輸入數(shù)據(jù)的有效性publicbooleancheckUser(){booleancheck=false;booleancheckSMTP=SMTPHost.toLowerCase().startsWith("smtp");//驗(yàn)證smtp服務(wù)器booleancheckPOP=POP3Host.toLowerCase().startsWith("pop");//驗(yàn)證pop服務(wù)器booleancheckPassword=!"".equals(password)&&password.length()>=1;booleancheckUser=EditorUtils.checkEmailAdress(user);//驗(yàn)證郵箱的有效性if(checkSMTP&&checkPOP&&checkPassword&&checkUser){check=true;//驗(yàn)證通過(guò)}returncheck;}}添加附件//添加附件privatevoidaddAttachment(){aaaaif(listmodel.getSize()>=4){JOptionPane.showMessageDialo(this,"只能添加4個(gè)附件");return;}Filef=newFile(".”);〃得到當(dāng)前目錄JFileChooserchooser=newJFileChooser(f);//構(gòu)造一個(gè)當(dāng)前路徑的文件選擇器if(chooser.showOpenDialog(getContentPane())==JFileChooserAPPROVE_OPTIO){//如果選擇確定鍵Filefile=chooser.getSelectedFile();Iconicon=chooser.getIcon(file);attachmentList.setCellRenderer(newCellRender(icon));listmodel.addElement(file.getName());〃將附件添加到JLIST中attachArrayList.add(file.getPath());〃將附件的路徑添加到附件列表中}if(listmodel.getSize()<=1){boxV1.add(adjunctL);boxV2.add(jsp);}validate();repaint();}發(fā)送郵件newThread(){//開(kāi)啟一個(gè)新的線程發(fā)送郵件publicvoidrun(){Stringmessage='";if("".equals(message=sendMail.send())){SendedMailTable.getSendedMailTabl().setValues(toMan,subject,attachArrayLis,text,copy,sendMan)//將郵件添加到已發(fā)送message="郵件已發(fā)送成功!";}else{message="<html><h4>郵件發(fā)送失敗!失敗原因:</h4></html>\n"+message;}progressBar.dispose();JOptionPane.showMessageDialo(SendFrame.this,message,"提示",JOptionPane.INFORMATION_MESSAG)§}}.start();刷新列表splitPane.setOneTouchExpandable(true);//在分隔條上提供一個(gè)UI小部件來(lái)快速展開(kāi)/折疊分隔條收件箱列表//獲得所有郵件的列表publicMessage[]getAllMail()throwsException{//建立POP3連接connect。;//連接郵件服務(wù)器//取得一個(gè)Folder對(duì)象,得到默認(rèn)的收件箱文件夾folder=store.getDefaultFolder().getFolder("INBOX");if(folder==null)System.out.println("出錯(cuò)!");if(!folder.isOpen())folder.open(FolderREAD_ONL);//folder.open(Folder.READ_WRITE);//取得所有的Message對(duì)象msg=folder.getMessages();FetchProfileprofile=newFetchProfile();profile.add(FetchProfile.ItemENVELOP);folder.fetch(msg,profile);closeConnect();〃關(guān)閉連接郵件服務(wù)器returnmsg;}對(duì)郵件的操作//查找指定郵件publicMessagefindMail(Message[]msg,Stringid)throwsException{EnumerationenumMail=null;Headerh=null;for(inti=0;i<msg.length;i++){enumMail=msg[i].getAllHeaders();//查找郵件頭中的Message-ID項(xiàng)while(enumMail.hasMoreElements()){h=(Header)enumMail.nextElement();//根據(jù)傳入的message-id來(lái)查找目標(biāo)郵件booleanmessageId=(h.getName().equals("Message-ID"))||(h.getName().equals("Message-Id"));if(messageId&&(h.getValue().equals(id))){returnmsg[i];}}}returnnull;}//刪除郵件publicbooleandeleteMail(String[]id){booleanisDelete=false;try{connect();//連接郵件服務(wù)器aaaa//取得一個(gè)Folder對(duì)象folder=store.getDefaultFolder().getFolder("INBOX");folder.open(Folder.READ_WRIT畢Message]]deletemsg=folder.getMessages();Messagemes=null;for(inti=0;i<id.length;i++){mes=findMail(deletemsg,id[i])//查找指定郵件mes.setFlag(Flags.Flag.DELETE「,true);//把郵件標(biāo)記為刪除}closeConnect();//關(guān)閉郵件服務(wù)器的連接并刪除郵件CheckNewMialUtilisCheck=true;//設(shè)置新郵件標(biāo)記isDelete=true;}catch(Exceptione){e.printStackTrace();}returnisDelete;}//讀取郵件內(nèi)容publicMapreadMail(Stringid)throwsException{Mapmap=newHashMap();//找到目標(biāo)郵件Messagereadmsg=findMailmsg,id);//讀取郵件標(biāo)題map.put("subject",readmsg.getSubject。);//讀取發(fā)件人map,put("sender”,MimeUtility.decodeTextreadmsg.getFrom()[0].toString。));map.put("attach",//取得郵件內(nèi)容if(readmsg.isMimeType("text/*")){map.put("content",readmsg.getContent().toString());}else{Multipartmp=(Multipart)readmsg.getContent();BodyPartpart=null;Stringdisp=null;StringBufferresult=newStringBuffer();//遍歷每個(gè)Miltipart對(duì)象for(intj=0;j<mp.getCount();j++){part=mp.getBodyPart(j);disp=part.getDisposition();//如果有附件if(disp!=null&&(disp.equals(PartATTACHMEN)||disp

.equals(Part.INLIN))){//取得附件文件名Stringfilename=MimeUtility.decodeTextpart.getFileName())//解決中文附件名的問(wèn)題map.put("attach",filename);//下載附件InputStreamin=part.getInputStream();//附件輸入流if(attachFile.isDownload(filename))attachFile.choicePat

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論