基于javaMail電子郵件系統(tǒng)的設(shè)計(jì)_第1頁(yè)
基于javaMail電子郵件系統(tǒng)的設(shè)計(jì)_第2頁(yè)
基于javaMail電子郵件系統(tǒng)的設(shè)計(jì)_第3頁(yè)
基于javaMail電子郵件系統(tǒng)的設(shè)計(jì)_第4頁(yè)
基于javaMail電子郵件系統(tǒng)的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)I報(bào)告題 目: 電子郵件系統(tǒng)設(shè)計(jì) 專(zhuān) 業(yè) 軟件工程 學(xué) 生 姓 名 * 班 級(jí) 學(xué) 號(hào) * 指 導(dǎo) 教 師 * 指 導(dǎo) 單 位 計(jì)算機(jī)學(xué)院軟件工程系 日 期 2009.6.102008.6.22 1、 課題名稱(chēng)電子郵件系統(tǒng)設(shè)計(jì)2、 課題內(nèi)容設(shè)計(jì)一個(gè)電子郵件系統(tǒng),包括客戶(hù)端和服務(wù)器端的設(shè)計(jì)、郵件處理過(guò)程建模和具體功能的實(shí)現(xiàn)等。3、 系統(tǒng)分析電子郵件(e-mail)是因特網(wǎng)上使用得最多的和最受用戶(hù)歡迎的一種應(yīng)用。電子郵件把郵件發(fā)送到 ISP 的郵件服務(wù)器,并放在其中的收信人郵箱中,收信人可隨時(shí)上網(wǎng)到 ISP 的郵件服務(wù)器進(jìn)行讀取。電子郵件不僅使用方便,而且還具有傳遞迅速和費(fèi)用低廉的優(yōu)點(diǎn)?,F(xiàn)

2、在電子郵件不僅可傳送文字信息,而且還可附上聲音和圖像。本系統(tǒng)分析中給出了電子郵件服務(wù)器和電子郵件客戶(hù)端的簡(jiǎn)介,同時(shí)給出了本次試驗(yàn)中客戶(hù)端的主要功能和總體框圖。郵件服務(wù)器按照提供的服務(wù)類(lèi)型,可以分為發(fā)送郵件服務(wù)器(簡(jiǎn)稱(chēng)發(fā)送服務(wù)器)和接收郵件服務(wù)器(簡(jiǎn)稱(chēng)接收服務(wù)器)。發(fā)送郵件服務(wù)器使用郵件發(fā)送協(xié)議,現(xiàn)在常用的是SMTP,所以通常發(fā)送郵件服務(wù)器也稱(chēng)為SMTP服務(wù)器;接收郵件服務(wù)器使用接收郵件協(xié)議,常用的有POP3協(xié)議和IMAP協(xié)議,所以通常接收郵件服務(wù)器也稱(chēng)為POP3服務(wù)器或IMAP服務(wù)器。SMTP(Simple Mail Transfer Protocol),即簡(jiǎn)單郵件傳輸協(xié)議,是Internet

3、傳送E-mail的基本協(xié)議,也是TCP/IP協(xié)議組的成員。SMTP協(xié)議解決郵件系統(tǒng)如何通過(guò)一條鏈路,把郵件從一臺(tái)機(jī)器傳送到另一臺(tái)機(jī)器上的問(wèn)題。SMTP協(xié)議的特點(diǎn)是具有良好的可伸縮性,這也是它成功的關(guān)鍵。它既適用于廣域網(wǎng),也適用于局域網(wǎng)。SMTP協(xié)議由于非常簡(jiǎn)單,使得它得到了廣泛的運(yùn)用,在Internet上能夠發(fā)送郵件的服務(wù)器幾乎都支持SMTP協(xié)議。POP3(Post Office Protocol 3),即郵局協(xié)議第3版,是 Internet接收郵件的基本協(xié)議,也是TCP/IP協(xié)議組的成員。RFC1939描述了POP3協(xié)議,網(wǎng)址為“/rfc/rfc1939.

4、txt”。POP3既允許接收服務(wù)器向郵件用戶(hù)發(fā)送郵件,也可以接收來(lái)自SMTP服務(wù)器的郵件。郵件客戶(hù)端軟件會(huì)與POP3服務(wù)器交互,下載由POP3服務(wù)器接收到的郵件?;赑OP3協(xié)議的郵件系統(tǒng)能提供快速、經(jīng)濟(jì)和方便的郵件接收服務(wù),深受用戶(hù)的青睞。IMAP(Internet Message Access Protocol),即互聯(lián)網(wǎng)消息訪問(wèn)協(xié)議,是一種功能比POP3更強(qiáng)大的新的接收郵件協(xié)議。目前最新的IMAP協(xié)議版本為IMAP4,RFC2060描述了IMAP4,網(wǎng)址為“/rfc/rfc2060.txt”。IMAP4與POP3協(xié)議一樣提供了方便的下載郵件服務(wù),允許用

5、戶(hù)在脫機(jī)狀態(tài)下閱讀已經(jīng)下載到本地硬盤(pán)的郵件。但I(xiàn)MAP4的功能遠(yuǎn)遠(yuǎn)不只這些,它還具有以下功能: 摘要瀏覽郵件的功能。選擇性下載附件的功能。鼓勵(lì)用戶(hù)把郵件一直存儲(chǔ)在郵件服務(wù)器上。允許用戶(hù)把遠(yuǎn)程郵件服務(wù)器上的郵箱作為信息存儲(chǔ)工具。MIME(Multipurpose Internet Mail Extensions,多用途Internet郵件擴(kuò)充標(biāo)準(zhǔn))不是郵件傳輸協(xié)議,而是對(duì)郵件格式所作的規(guī)范。RFC2045、RFC2046和RFC2047對(duì)MIME作了描述。MIME是對(duì)RFC822的擴(kuò)充,RFC822規(guī)定了內(nèi)容只包括采用ASCII編碼的純文本的郵件的格式,而MIME允許在郵件中包含附件。整個(gè)電子郵

6、件系統(tǒng)的工作過(guò)程及一些涉及到的協(xié)議如下圖所示:電子郵件系統(tǒng)包含:電子郵件服務(wù)器端和電子郵件客戶(hù)端。SUN公司制定了JavaMail API,它封裝了按照各種郵件通信協(xié)議,如IMAP、POP3和SMTP,與郵件服務(wù)器通信的細(xì)節(jié),為Java應(yīng)用程序提供了收發(fā)電子郵件的公共接口,參見(jiàn)下圖:JavaMail API主要位于javax.mail包和ernet中,下圖為其中主要類(lèi)的類(lèi)框圖。1. javax.mail.Session類(lèi):表示郵件會(huì)話,是JavaMail API的最高層入口類(lèi)。2javax.mail.Store類(lèi):表示接收郵件服務(wù)器上的注冊(cè)用戶(hù)的存儲(chǔ)空間,通過(guò)Sto

7、re類(lèi)的getFolder()方法,可以訪問(wèn)用戶(hù)的特定郵件夾。 3. javax.mail.Folder類(lèi):代表郵件夾。4. javax.mail.Message類(lèi):代表電子郵件。5. javax.mail.Address類(lèi):代表郵件地址。6. javax.mail.Transport類(lèi):根據(jù)指定的郵件發(fā)送協(xié)議(通常是 SMTP),通過(guò)指定的郵件發(fā)送服務(wù)器來(lái)發(fā)送郵件。電子郵件服務(wù)器的最簡(jiǎn)模型如下圖:電子郵件服務(wù)器的結(jié)構(gòu)一般如下圖所示:電子郵件服務(wù)器還能在本機(jī)和客戶(hù)端進(jìn)行連接使用(即主機(jī)上的SMTP服務(wù)器還可能與其他SMTP服務(wù)器會(huì)話以發(fā)送郵件)如下圖:按照MIME規(guī)范,電子郵件包括郵件頭和正文

8、兩部分。郵件頭中包括日期、發(fā)送者地址、接收者地址和主題等信息。正文部分可以包括普通文本內(nèi)容,還可以包括一個(gè)或多個(gè)附件。javax.mail.Message抽象類(lèi)表示郵件,它的具體子類(lèi)為javax.mail.MimeMessage類(lèi),它提供了讀取和設(shè)置郵件中各個(gè)部分的getXXX()和setXXX()方法:setSubject(String subject)方法設(shè)置郵件的主題。setHeader(String name, String value)方法設(shè)置郵件頭部的某一項(xiàng)。setContent(Object o, String type)方法設(shè)置郵件的正文。javax.mail.Address抽

9、象類(lèi)表示郵件地址,它的最常用的子類(lèi)是javax.mail.InternetAddress類(lèi)。InternetAddress類(lèi)表示Internet網(wǎng)上通用的郵件地址,形式為,或者“Admin”。電子郵件客戶(hù)端是安裝在個(gè)人電腦上面的一種軟件,用于和電子郵件服務(wù)器端的連接?;旧纤械目蛻?hù)端一般都有以下四個(gè)基本功能: a.通過(guò)POP3收取用戶(hù)各種郵箱的郵件。由于考慮到POPular服務(wù)器地址的不同,但又可以接收不同郵箱地址的郵件,所以增加了這個(gè)功能。 b.在線閱讀郵件,這個(gè)功能是電子郵件系統(tǒng)必備的功能。 c.接收保存郵件,用戶(hù)可以再閱讀郵件之后,將其保存起來(lái),在需要

10、的時(shí)候再次閱讀。 d.在線處理郵件,如果收到一些垃圾郵件或者不是很重要的郵件,那么用戶(hù)可以將它們放到垃圾箱或者然后在去垃圾箱中將它徹底刪除,這是最好的辦法。這個(gè)時(shí)候就要引入在線處理郵件功能,這個(gè)功能能夠刪除郵件。 e.發(fā)送附件。有時(shí)候郵件太長(zhǎng),或者是表格、Word文檔,一正文方式發(fā)送不太方便,這樣可以引用一個(gè)附件功能。及那個(gè)這些表格或Word文檔以附件的形式上傳,讓后發(fā)送。在擴(kuò)充一下,提供可以發(fā)送多個(gè)郵件的功能。(本功能為擴(kuò)展功能,本系統(tǒng)并未實(shí)現(xiàn))。 f.接收附件,相對(duì)于發(fā)送附件而言,接收附件的功能必不可少。不然不能閱讀郵件的內(nèi)容。同樣,應(yīng)該擴(kuò)充可以接受多個(gè)附件的功能。 g.SMTP驗(yàn)證,當(dāng)前

11、大部分的SMTP服務(wù)器,在用戶(hù)發(fā)送郵件的時(shí)候,都需要進(jìn)行用戶(hù)名和密碼的驗(yàn)證。 h.郵件文件夾管理,該功能提供了用戶(hù)可以再除了了有收件箱等必須得文件夾時(shí),可以根據(jù)自己的需要?jiǎng)?chuàng)建新的文件夾用于更好大的管理自己收到的郵件,還可以重命名和刪除用戶(hù)自己創(chuàng)建的文件夾。 i.回復(fù)郵件,該功能是電子郵件系統(tǒng)必備的功能 下面列出了本系統(tǒng)的總體功能:總之,由上面的電子郵件服務(wù)器和客戶(hù)端的分析可知該電子郵件系統(tǒng)收發(fā)郵件的整個(gè)過(guò)程和圖示如下:(1) 發(fā)信人調(diào)用用戶(hù)代理來(lái)編輯要發(fā)送的郵件。用戶(hù)代理用 SMTP 把郵件傳送給發(fā)送端郵件服務(wù)器。(2) 發(fā)送端郵件服務(wù)器將郵件放入郵件緩存隊(duì)列中,等待發(fā)送。(3) 運(yùn)行在發(fā)送端

12、郵件服務(wù)器的 SMTP 客戶(hù)進(jìn)程,發(fā)現(xiàn)在郵件緩存中有待發(fā)送的郵件,就向運(yùn)行在接收端郵件服務(wù)器的 SMTP 服務(wù)器進(jìn)程發(fā)起 TCP 連接的建立。(4) TCP 連接建立后,SMTP 客戶(hù)進(jìn)程開(kāi)始向遠(yuǎn)程的 SMTP 服務(wù)器進(jìn)程發(fā)送郵件。當(dāng)所有的待發(fā)送郵件發(fā)完了,SMTP 就關(guān)閉所建立的 TCP 連接。(5) 運(yùn)行在接收端郵件服務(wù)器中的 SMTP 服務(wù)器進(jìn)程收到郵件后,將郵件放入收信人的用戶(hù)郵箱中,等待收信人在方便時(shí)進(jìn)行讀取。收信人在打算收信時(shí),調(diào)用用戶(hù)代理,使用 POP3(或 IMAP)協(xié)議將自己的郵件從接收端郵件服務(wù)器的用戶(hù)郵箱中的取回(如果郵箱中有來(lái)信的話)。4、 系統(tǒng)設(shè)計(jì)本系統(tǒng)基于JavaM

13、ial API采用B/S設(shè)計(jì)結(jié)構(gòu)。使用Apache Tomcat做為WEB服務(wù)器和JSP Servlet的容器。JDK中并不包含JavaMail API。為了開(kāi)發(fā)JavaMail應(yīng)用程序,需要從SUN公司的網(wǎng)站下載JavaMail API及其實(shí)現(xiàn)的類(lèi)庫(kù),該類(lèi)庫(kù)由兩個(gè)JAR文件組成: mail.jar和activation.jar。JavaMail應(yīng)用程序在初始化過(guò)程中需要執(zhí)行如下步驟。步驟(1)設(shè)置JavaMail屬性: Properties props = new Properties();props.put(tocol, smtp);props.put(

14、tocol, imap);props.put(mail.smtp.class, com.sun.mail.smtp.SMTPTransport);props.put(mail.imap.class, com.sun.mail.imap.IMAPStore);props.put(mail.smtp.host, hostname); 以上代碼設(shè)置了如下JavaMail屬性:tocol:指定郵件發(fā)送協(xié)議。tocol:指定郵件接收協(xié)議。mail.smtp.class:指定支持SMTP協(xié)議的Transport具體

15、類(lèi),允許由第三方提供。mail.imap.class:指定支持IMAP協(xié)議的Store具體類(lèi),允許由第三方提供。mail.smtp.host:指定采用SMTP協(xié)議的郵件發(fā)送服務(wù)器的IP地址或主機(jī)名步驟(2)調(diào)用javax.mail.Session類(lèi)的靜態(tài)方法Session.getDefaultInstance()獲得Session實(shí)例,該方法根據(jù)已經(jīng)配置的JavaMail屬性來(lái)創(chuàng)建Session實(shí)例:Session mailsession = Session.getDefaultInstance(props);步驟(3)調(diào)用Session的getStore(String protocol)方法

16、來(lái)獲得Store對(duì)象,參數(shù)protocol指定接收郵件協(xié)議:Store store = mailsession.getStore(imap);步驟(1)把mail.imap.class屬性設(shè)為com.sun.mail.imap.IMAPStore,因此以上getStore()方法返回com.sun.mail.imap.IMAPStore類(lèi)的實(shí)例。步驟(4)調(diào)用Store對(duì)象的connect()方法連接到接收郵件服務(wù)器。調(diào)用connect()方法時(shí),應(yīng)該指定接收郵件服務(wù)器的主機(jī)名或IP地址、用戶(hù)名和口令。 store.connect(hostname,username, password);獲得

17、了Store對(duì)象后,就可以通過(guò)它來(lái)訪問(wèn)郵件服務(wù)器上的特定郵件用戶(hù)了。通常會(huì)對(duì)郵件用戶(hù)執(zhí)行以下操作。操作(1)創(chuàng)建并發(fā)送郵件:/創(chuàng)建郵件msg = new MimeMessage(mailsession);InternetAddress toAddrs =InternetAddress.parse(, false);/設(shè)置郵件接收者 msg.setRecipients(Message.RecipientType.TO, toAddrs);/設(shè)置郵件的主題msg.setSubject(hello);/設(shè)置郵件的發(fā)送者msg.setFrom(new Internet

18、Address();/設(shè)置郵件的正文msg.setText(How are you);/發(fā)送郵件Transport.send(msg);Transport的靜態(tài)方法send(Message)負(fù)責(zé)發(fā)送郵件服務(wù)器,郵件發(fā)送協(xié)議由tocol屬性指定,郵件發(fā)送服務(wù)器由mail.smtp.host屬性指定。操作(2)打開(kāi)inbox郵件夾收取郵件:/獲得名為“inbox”的郵件夾Folder folder=store.getFolder(inbox);/打開(kāi)郵件夾folder.open(Folder.READ_ONLY);/獲得郵件夾中

19、的郵件數(shù)目System.out.println(You have +folder.getMessageCount()+ messages in inbox.);/獲得郵件夾中的未讀郵件數(shù)目System.out.println(You have +folder.getUnreadMessageCount()+ unread messages in inbox.);在IMAP協(xié)議中,inbox郵件夾是郵件用戶(hù)的保留郵件夾,用戶(hù)不允許刪除該郵件夾,郵件服務(wù)器把所有接收到的新郵件都存在該郵件夾中。操作(3)從郵件夾中讀取郵件:/從郵件夾中讀取第一封郵件Message msg=folder.getMes

20、sage(1);System.out.println(-the first message in inbox-);/獲得郵件的發(fā)送者、主題和正文System.out.println(From:+msg.getFrom()0);System.out.println(Subject:+msg.getSubject();System.out.println(Text:+msg.getText();系統(tǒng)設(shè)計(jì)中,給出了本次試驗(yàn)的UML建模和系統(tǒng)各個(gè)模塊的劃分。一、UML建模1. 本系統(tǒng)的用例圖:圖中User是本系統(tǒng)的總用戶(hù),Sender和Receiver分別為發(fā)送郵件者和接收郵件者是從User中泛化出來(lái)

21、的。Upload accessory表示為上傳附件用例;Sending mail表示為發(fā)送郵件用例;Longin表示為登錄用例;Receiving mail表示為接收郵件用例;Saving mail表示為保存郵件用例;Saving accessory表示為保存附件用例;Folder表示為管理郵件文件夾用例;Create new folder表示為創(chuàng)建新的郵件文件夾用例;Rename folder表示為重命名創(chuàng)建的郵件文件夾用例;Delete folder表示為刪除創(chuàng)建的郵件文件夾;Deleting mail表示為刪除用戶(hù)收到的郵件用例。2. 本系統(tǒng)的時(shí)序圖和對(duì)應(yīng)的協(xié)作圖:(1) 用戶(hù)發(fā)送郵件的

22、時(shí)序圖:從上圖中可以看出,首先用戶(hù)得登錄系統(tǒng),在登錄系統(tǒng)時(shí)還可以選擇登入服務(wù)器。用戶(hù)正常登錄系統(tǒng)后,系統(tǒng)會(huì)將用戶(hù)的ID保存在session變量中,并傳遞給發(fā)送和回復(fù)郵件模塊。用戶(hù)打開(kāi)發(fā)送郵件界面就可以發(fā)送郵件了。界面提示輸入相關(guān)郵件信息,按提示輸入收件人郵件地址、主題和內(nèi)容等信息后,單擊“發(fā)送”按鈕就可以發(fā)送了。有時(shí)候需要發(fā)送附件,單擊“添加附件”命令選擇需要添加的文件就可以了。最后提示發(fā)送成功。(2) 用戶(hù)接收郵件的時(shí)序圖:從上圖中可以看出,用戶(hù)首先還是先登錄郵件系統(tǒng),然后系統(tǒng)將所有提交用戶(hù)的ID保存到session變量中,并傳遞給接收郵件模板。該界面列出了所有的郵件,用戶(hù)可以打開(kāi)某個(gè)郵件閱

23、讀。有時(shí)候郵件是以附件的形式發(fā)送的,這樣用戶(hù)在接收郵件是就需要先下載附件,然后保存。(3) 用戶(hù)發(fā)送郵件的協(xié)作圖:這是與上面用戶(hù)發(fā)送郵件的時(shí)序圖對(duì)應(yīng)的協(xié)作圖。(4) 用戶(hù)接收郵件的協(xié)作圖:這是與上面用戶(hù)接收郵件的時(shí)序圖對(duì)應(yīng)的協(xié)作圖。3. 本系統(tǒng)的總體分析模型(類(lèi)圖):該類(lèi)圖中包含了兩個(gè)類(lèi):PMessage和MailUserData。其中PMessage類(lèi)對(duì)Message類(lèi)的重新封裝,提供更方便的讀取郵件信息的方法。例如,在Message類(lèi)中讀取郵件地址的方法,如getTo()方法返回Address類(lèi)型,如果要把它顯示到網(wǎng)頁(yè)上,必須把Address數(shù)組轉(zhuǎn)化為對(duì)應(yīng)的字符串。PMessage的構(gòu)造方

24、法PMessage對(duì)Message數(shù)據(jù)重新封裝。JSP網(wǎng)頁(yè)調(diào)用PMessage的getTo方法可以直接獲得字符串類(lèi)型的地址。MailUserData類(lèi)用來(lái)存放用戶(hù)的相關(guān)信息,還有對(duì)郵件文件夾操作的一些方法的定義,還有郵件管理的一些操作的定義,例如:發(fā)送郵件,刪除郵件等。4. 本系統(tǒng)的活動(dòng)圖: a.用戶(hù)接收郵件的活動(dòng)圖,在接收郵件是可以分兩種方式,一種是文本形式,另一種是附件形式。接收郵件后,用戶(hù)可以并列做3件事,即保存郵件、刪除郵件和將郵件放入垃圾箱。至此,用戶(hù)接收郵件的活動(dòng)完成。b.用戶(hù)發(fā)送郵件的活動(dòng)圖,在發(fā)送郵件的活動(dòng)中,還是一樣,用戶(hù)首先必須登錄郵件系統(tǒng),這樣,以后的操作才可以進(jìn)行。發(fā)送

25、的主要活動(dòng)就是發(fā)送郵件一個(gè),它以?xún)煞N形式發(fā)送的。c.用戶(hù)管理郵件文件夾的活動(dòng)圖,用戶(hù)可以根據(jù)自己的需要新建郵件文件夾、重新命名創(chuàng)建的文件夾和刪除創(chuàng)建的文件夾。5. 本系統(tǒng)的組件圖:二、系統(tǒng)模塊的劃分按照本系統(tǒng)的總體功能劃分,可以將這個(gè)電子郵件系統(tǒng)分成5大模塊,首先是登錄模塊,作為驗(yàn)證需要;其次是接收郵件和附件模塊,該模塊負(fù)責(zé)郵件的接收,有的是以附件形式接收的,再次是發(fā)送和回復(fù)模塊,該模塊負(fù)責(zé)該對(duì)方發(fā)送郵件,有的還是以附件形式發(fā)送的;接著是郵件處理模塊,該模塊負(fù)責(zé)郵件的閱讀、保存和刪除等操作;然后是郵件文件夾的管理,該操作負(fù)責(zé)郵件文件夾的新建、重命名和刪除等操作。下面累出了本系統(tǒng)的模塊體系,如圖

26、:1 登錄模塊登錄模塊主要有l(wèi)ogin.jsp完成,其中包括下圖中的幾部分。(1) 選擇登錄服務(wù)器,本系統(tǒng)采用了MerakMailSErvler公司提供的Mail服務(wù)器使用版本。(2) 選擇指定郵件地址和密碼。在本系統(tǒng)中有所提供的Mail服務(wù)器創(chuàng)建了2個(gè)賬戶(hù)進(jìn)行登錄。必須選用正確的郵件地址和密碼才可以登錄,不然會(huì)報(bào)錯(cuò)。登錄模塊的圖示:2.接收郵件和附件模塊接收郵件和附件模塊主要由showmessage.jsp文件完成,包括下圖中的幾個(gè)部分。(1) 接收郵件。一個(gè)郵件系統(tǒng)最基本的功能就是能夠接受對(duì)方發(fā)送的郵件。(2) 保存附件。如果對(duì)方是以附件的形式發(fā)送郵件給用戶(hù),那么用戶(hù)在接收郵件時(shí),必須先下

27、載郵件,將其保存到本地機(jī)之后,才能閱讀。接收郵件和附件模塊的圖示:3.發(fā)送和回復(fù)郵件模塊 發(fā)送和回復(fù)郵件模塊主要由compose.jsp文件完成,包括圖中的幾個(gè)部分。(1) 編寫(xiě)新郵件。該部分也是電子郵件系統(tǒng)中最基本的功能。(2) 上傳附件。在編寫(xiě)郵件時(shí),郵件內(nèi)容可以以附件的形式發(fā)送,這樣就需要先將附件上傳到服務(wù)器,然后在發(fā)送給對(duì)方。 發(fā)送和回復(fù)郵件模塊的圖示:4.郵件處理模塊郵件處理模塊主要由listonefoldr.jsp文件完成,包括圖中的幾個(gè)部分。(1) 顯示郵件列表。在登錄后的首頁(yè)中就以分頁(yè)顯示的形式列出了所有的郵件,便于管理。(2) 刪除選中郵件。在選中刪除的郵件后,可以單擊該命令

28、刪除郵件。(3) 顯示錯(cuò)誤信息。在出現(xiàn)一些登錄錯(cuò)誤,刪除錯(cuò)誤,下載錯(cuò)誤是,將顯示不同的錯(cuò)誤信息提示用戶(hù)。郵件處理模塊的圖示:5.郵件文件夾管理模塊郵件文件夾管理模塊主要是由listallfolders.jsp文件完成,包括圖中的幾個(gè)部分。(1) 創(chuàng)建新的郵件文件夾。用戶(hù)可以根據(jù)自己的需要?jiǎng)?chuàng)建新的郵件文件夾,便于管理用戶(hù)的郵件。(2) 重命名郵件文件夾。用戶(hù)可以重新命名自己創(chuàng)建的郵件文件夾。(3) 刪除郵件文件夾。用戶(hù)可以刪除自己創(chuàng)建的郵件文件夾。郵件文件夾管理模塊的圖示:5、 系統(tǒng)實(shí)現(xiàn)1 服務(wù)器的安裝和配置1.在做本次系統(tǒng)之前,必須配置JSP的服務(wù)器和電子郵件的服務(wù)器。(1)JSP的服務(wù)器,主

29、要使用的是Tomcat,同時(shí)在安裝Tomcat服務(wù)器之前,必需已經(jīng)安裝了SUN公司的JDK,在安裝Tomcat的時(shí)候主要是注意電腦環(huán)境變量的更改。安裝完成后,只要在瀏覽器中輸入http:/localhost:8080/看是否能打開(kāi)Tomcat的網(wǎng)頁(yè),如果能,則表示安裝成功,8080端口是Tomcat的默認(rèn)端口,如果電腦上有服務(wù)已經(jīng)把端口占用了,可以把占用該端口的服務(wù)關(guān)掉,如果該服務(wù)關(guān)不掉或者比較重要,可以再Tomcat的安裝目錄中找到server.xml文件,將其中port=8080改成沒(méi)有被占用的端口號(hào)。(2)電子郵件服務(wù)器的配置:在本系統(tǒng)中我們采用了MerakMailServler公司的M

30、ail服務(wù)器,安裝完成后,在配置中輸入本次實(shí)驗(yàn)所需要的域名和用戶(hù)等信息。然后保存,配置完成。2 客戶(hù)端的實(shí)現(xiàn)給出本系統(tǒng)中包含的兩個(gè)類(lèi):由于代碼比較多,所以這里只給出了核心代碼。首先要加入一個(gè)中文字符串處理函數(shù)用于是郵件能發(fā)送中文:public String codeToString(String str)/處理中文字符串的函數(shù) String s=str; try byte tempB=s.getBytes(ISO-8859-1); s=new String(tempB); return s; catch(Exception e) return s; 1. PMessage類(lèi)重新封裝了Messa

31、ge類(lèi)。(1) 重新封裝Message類(lèi)獲得郵件的時(shí)間、主題、大小、內(nèi)容還有地址等; public PMessage(Message msg)throws Exception if(msg!=null) SimpleDateFormat df = new SimpleDateFormat(yy.MM.dd at HH:mm:ss ); trydate=df.format(msg.getSentDate()!=null) ? msg.getSentDate() : msg.getReceivedDate(); catch(Exception e)date=new Date().toString(

32、); subject=msg.getSubject(); size=msg.getSize(); Object content=; try content=msg.getContent(); catch(Exception e) if(msg.isMimeType(text/plain) & content!=null) text=(String)content; from=assembleAddress(msg.getFrom(); to=assembleAddress(msg.getRecipients(Message.RecipientType.TO); cc=assembleAddre

33、ss(msg.getRecipients(Message.RecipientType.CC); bcc=assembleAddress(msg.getRecipients(Message.RecipientType.BCC); (2)構(gòu)造函數(shù)PMessage(String to,String cc,String bcc,String subj,String text); public PMessage(String to,String cc,String bcc,String subj,String text) to.replace(;,); cc.replace(;,); bcc.repla

34、ce(;,); this.to=to; this.cc=cc; this.bcc=bcc; this.subject=subj; this.text=text; (3)將Address數(shù)組轉(zhuǎn)化為對(duì)應(yīng)的字符串,用于在頁(yè)面上顯示; private String assembleAddress(Address addr) if(addr=null)return ; String addrString=; boolean tf = true; for (int i = 0; i addr.length; i+) addrString=addrString+(tf) ? : , ) + getDispl

35、ayAddress(addri); tf = false; return addrString; (4)返回一個(gè)適合msg頭的字符串。 private String getDisplayAddress(Address a) String pers = null; String addr = null; if (a instanceof InternetAddress & (pers = (InternetAddress)a).getPersonal() != null) addr = pers + +<+(InternetAddress)a).getAddress()+> else

36、 addr = a.toString(); return addr; ;2.MailUserData類(lèi) (1)刪除用戶(hù)自己創(chuàng)建的郵件夾,但不允許刪除Web應(yīng)用指定的系統(tǒng)郵件夾; public void doDeleteFolder(String foldername )throws Exception /cant delete reserved folder if(foldername.equalsIgnoreCase(inbox)| foldername.equalsIgnoreCase(trash)| foldername.equalsIgnoreCase(draft)| folderna

37、me.equalsIgnoreCase(sendbox) throw new Exception(Cannt delete reserved folder); Folder folder=store.getFolder(foldername); if(!folder.exists()throw new Exception(This folder does not exists); if(folder.isOpen()folder.close(true); folder.delete(true); (2)修改用戶(hù)自己創(chuàng)建的郵件夾的名字,但不允許修改Web應(yīng)用指定的系統(tǒng)郵件夾得名字; public

38、 void doRenameFolder(String fromname,String toname)throws Exception if(toname=null | toname.equals() throw new Exception(You do not input new folder name when renaming folder); /cant rename reserved folder if(fromname.equalsIgnoreCase(inbox)| fromname.equalsIgnoreCase(trash)| fromname.equalsIgnoreCa

39、se(draft)| fromname.equalsIgnoreCase(sendbox)| toname.equalsIgnoreCase(inbox)| toname.equalsIgnoreCase(trash)| toname.equalsIgnoreCase(draft)| toname.equalsIgnoreCase(sendbox) throw new Exception(Cannt rename reserved folder); Folder folderFrom=store.getFolder(fromname); Folder folderTo=store.getFol

40、der(toname); if(!folderFrom.exists()throw new Exception(This folder does not exists); if(folderFrom.isOpen()folderFrom.close(true); folderFrom.renameTo(folderTo); (3) 創(chuàng)建用戶(hù)自己的郵件夾; public void doCreateFolder(String foldername)throws Exception if(foldername=null | foldername.equals() throw new Exceptio

41、n(You do not input new folder name when creating folder); Folder folder=store.getFolder(foldername); if(folder.exists()throw new Exception(This folder already exists); folder.create(Folder.HOLDS_MESSAGES); (4) 把郵件添加到參數(shù)指定的郵件夾中; public void doAppendMessage(Message msg, Folder f)throws Exception Messag

42、e m=new Message1; m0=msg; f.appendMessages(m); (5) 根據(jù)參數(shù)指定的郵件信息,如標(biāo)題,收發(fā)地址和郵件內(nèi)容,來(lái)構(gòu)建Message對(duì)象; public Message doAssembleMessage(String to,String cc,String bcc,String subj,String text)throws Exception Message msg = new MimeMessage(session); InternetAddress toAddrs = null, ccAddrs = null, bccAddrs=null; i

43、f (to != null) toAddrs = InternetAddress.parse(to, false); msg.setRecipients(Message.RecipientType.TO, toAddrs); else throw new MessagingException(No To address specified); if (cc != null) ccAddrs = InternetAddress.parse(cc, false); msg.setRecipients(Message.RecipientType.CC, ccAddrs); if (bcc != nu

44、ll) bccAddrs = InternetAddress.parse(bcc, false); msg.setRecipients(Message.RecipientType.BCC, bccAddrs); if (subj != null) msg.setSubject(subj); msg.setFrom(new InternetAddress(urlName.getUsername() + + urlName.getHost(); if (text != null) msg.setText(text); return msg; (6) 如果該郵件在Trash郵件夾中,就永久刪除該郵件

45、,否則把這封郵件移到Trash郵件夾中; public void doDeleteMessage(int arrayOpt,Folder f)throws Exception for(int i=0;iarrayOpt.length;i+) if(arrayOpti=0)continue; Message msg=f.getMessage(i+1); if(!f.getName().equals(Trash) Message m=new Message1; m0=msg; Folder Trash=store.getFolder(Trash); f.copyMessages(m,Trash); msg.setFlag(Flags.Flag.DELETED, true); else msg.setFlag(Flags.Flag.DELETED, true); f.expunge(); (7) 從用戶(hù)當(dāng)前郵件夾中,把用戶(hù)當(dāng)前訪問(wèn)的郵件移到參數(shù)指定的郵件中; public void doMoveMessage(String toFolderName)throws Exception Folder folderFrom=cur

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論