版權(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é)院軟件工程系 30 / 321、課題名稱(chēng)電子系統(tǒng)設(shè)計(jì)2、課題容設(shè)計(jì)一個(gè)電子系統(tǒng),包括客戶(hù)端和服務(wù)器端的設(shè)計(jì)、處理過(guò)程建模和具體功能的實(shí)現(xiàn)等。1、 系統(tǒng)分析電子()是因特網(wǎng)上使用得最多的和最受用戶(hù)歡迎的一種應(yīng)用。電子把發(fā)送到 ISP 的服務(wù)器,并放在其中的收信人中,收信人可隨時(shí)上網(wǎng)到 ISP 的服務(wù)器進(jìn)行讀取。電子不僅使用方便,而且還具有傳遞迅速和費(fèi)用低廉的優(yōu)點(diǎn)?,F(xiàn)在電子不僅可傳送文字信息,而且還可附上聲音和圖像。本系統(tǒng)分析中給出了電子服務(wù)器和電
2、子客戶(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傳送E-mail的基本協(xié)議,也是TCP/IP協(xié)議組的成員。SMTP協(xié)議解決系統(tǒng)如何通過(guò)一條鏈路,把從一臺(tái)機(jī)器傳送到另一臺(tái)機(jī)器上的問(wèn)題。
3、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.txt”。POP3既允許接收服務(wù)器向用戶(hù)發(fā)送,也可以接收來(lái)自SMTP服務(wù)器的??蛻?hù)端軟件會(huì)與POP3服務(wù)器交互,下載由POP3服務(wù)器接收到的。基于POP3協(xié)議的系統(tǒng)能提
4、供快速、經(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ù),允許用戶(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(Multi
5、purpose Internet Mail Extensions,多用途Internet擴(kuò)充標(biāo)準(zhǔn))不是傳輸協(xié)議,而是對(duì)格式所作的規(guī)。RFC2045、RFC2046和RFC2047對(duì)MIME作了描述。MIME是對(duì)RFC822的擴(kuò)充,RFC822規(guī)定了容只包括采用ASCII編碼的純文本的的格式,而MIME允許在中包含附件。整個(gè)電子系統(tǒng)的工作過(guò)程與一些涉與到的協(xié)議如下圖所示:電子系統(tǒng)包含:電子服務(wù)器端和電子客戶(hù)端。SUN公司制定了JavaMail API,它封裝了按照各種通信協(xié)議,如IMAP、POP3和SMTP,與服務(wù)器通信的細(xì)節(jié),為Java應(yīng)用程序提供了收發(fā)電子的公共接口,參見(jiàn)下圖:JavaMai
6、l 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ò)Store類(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é)議(通常是 SM
7、TP),通過(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ī),電子包括頭和正文兩部分。頭中包括日期、發(fā)送者地址、接收者地址和主題等信息。正文部分可以包括普通文本容,還可以包括一個(gè)或多個(gè)附件。javax.mail.Message抽象類(lèi)表示,它的具體子類(lèi)為javax.mail.MimeMessage類(lèi),它提供了讀取和設(shè)置中各個(gè)部分的getXXX()和setXXX()方法:setSubject(String subject)方法設(shè)置的主題。
8、setHeader(String name, String value)方法設(shè)置頭部的某一項(xiàng)。setContent(Object o, String type)方法設(shè)置的正文。javax.mail.Address抽象類(lèi)表示地址,它的最常用的子類(lèi)是javax.mail.InternetAddress類(lèi)。InternetAddress類(lèi)表示Internet網(wǎng)上通用的地址,形式為adminmydomain.,或者“Admin<adminmydomain.>”。電子客戶(hù)端是安裝在個(gè)人電腦上面的一種軟件,用于和電子服務(wù)器端的連接?;旧纤械目蛻?hù)端一般都有以下四個(gè)基本功能:· a.
9、通過(guò)POP3收取用戶(hù)各種的。由于考慮到POPular服務(wù)器地址的不同,但又可以接收不同地址的,所以增加了這個(gè)功能。 b.在線閱讀,這個(gè)功能是電子系統(tǒng)必備的功能。 · c.接收保存,用戶(hù)可以再閱讀之后,將其保存起來(lái),在需要的時(shí)候再次閱讀。 · d.在線處理,如果收到一些垃圾或者不是很重要的,那么用戶(hù)可以將它們放到垃圾箱或者然后在去垃圾箱中將它徹底刪除,這是最好的辦法。這個(gè)時(shí)候就要引入在線處理功能,這個(gè)功能能夠刪除。 · e.發(fā)送附件。有時(shí)候太長(zhǎng),或者是表格、Word文檔,一正文方式發(fā)送不太方便,這樣可以引用一個(gè)附件功能。與那個(gè)這些表格或Word文檔以附件的形式上傳,
10、讓后發(fā)送。在擴(kuò)充一下,提供可以發(fā)送多個(gè)的功能。(本功能為擴(kuò)展功能,本系統(tǒng)并未實(shí)現(xiàn))。· f.接收附件,相對(duì)于發(fā)送附件而言,接收附件的功能必不可少。不然不能閱讀的容。同樣,應(yīng)該擴(kuò)充可以接受多個(gè)附件的功能。· g.SMTP驗(yàn)證,當(dāng)前大部分的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)的總體功能:
11、183;總之,由上面的電子服務(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ā)送端服務(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ù)中,等待
12、收信人在方便時(shí)進(jìn)行讀取。收信人在打算收信時(shí),調(diào)用用戶(hù)代理,使用 POP3(或 IMAP)協(xié)議將自己的從接收端服務(wù)器的用戶(hù)中的取回(如果中有來(lái)信的話)。2、 系統(tǒng)設(shè)計(jì)本系統(tǒng)基于JavaMial API采用B/S設(shè)計(jì)結(jié)構(gòu)。使用Apache Tomcat做為WEB服務(wù)器和JSP Servlet的容器。JDK中并不包含JavaMail API。為了開(kāi)發(fā)JavaMail應(yīng)用程序,需要從SUN公司的下載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屬
13、性: Properties props = new Properties();props.put("tocol", "smtp");props.put("tocol", "imap");props.put("mail.smtp.class", ".sun.mail.smtp.SMTPTransport");props.put("mail.imap.class", ".sun.mail
14、.imap.IMAPStore");props.put("mail.smtp.host", hostname); 以上代碼設(shè)置了如下JavaMail屬性:tocol:指定發(fā)送協(xié)議。tocol:指定接收協(xié)議。mail.smtp.class:指定支持SMTP協(xié)議的Transport具體類(lèi),允許由第三方提供。mail.imap.class:指定支持IMAP協(xié)議的Store具體類(lèi),允許由第三方提供。mail.smtp.host:指定采用SMTP協(xié)議的發(fā)送服務(wù)器的IP地址或主機(jī)名步驟(2)調(diào)用javax.mai
15、l.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)方法來(lái)獲得Store對(duì)象,參數(shù)protocol指定接收協(xié)議:Store store = mailsession.getStore("imap");步驟(1)把mail.imap.class屬性設(shè)為com.sun.
16、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);獲得了Store對(duì)象后,就可以通過(guò)它來(lái)訪問(wèn)服務(wù)器上的特定用戶(hù)了。通常會(huì)對(duì)用戶(hù)執(zhí)行以下操作。操作(1)創(chuàng)建并發(fā)送:/創(chuàng)建msg = new MimeMessage(mailsession);InternetAddress
17、toAddrs =InternetAddress.parse("adminmydomain.", false);/設(shè)置接收者 msg.setRecipients(Message.RecipientType.TO, toAddrs);/設(shè)置的主題msg.setSubject("hello");/設(shè)置的發(fā)送者msg.setFrom(new InternetAddress("adminmydomain.");/設(shè)置的正文msg.setText("How are you");/發(fā)送Transport.send(msg);T
18、ransport的靜態(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);/獲得夾中的數(shù)目System.out.println("You have "+folder.getMessageCount()+" messages in in
19、box.");/獲得夾中的未讀數(shù)目System.out.println("You have "+folder.getUnreadMessageCount()+" unread messages in inbox.");在IMAP協(xié)議中,inbox夾是用戶(hù)的保留夾,用戶(hù)不允許刪除該夾,服務(wù)器把所有接收到的新都存在該夾中。操作(3)從夾中讀取:/從夾中讀取第一封Message msg=folder.getMessage(1);System.out.println("-the first message in inbox-");/
20、獲得的發(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)的。Upload accessory表示為上傳附件用例;
21、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ā)送的時(shí)序圖:從上圖中可以看出,首先用戶(hù)得登錄系統(tǒng),在登錄系統(tǒng)時(shí)還可以選擇登入服務(wù)器。用戶(hù)正常登錄
22、系統(tǒng)后,系統(tǒng)會(huì)將用戶(hù)的ID保存在session變量中,并傳遞給發(fā)送和回復(fù)模塊。用戶(hù)打開(kāi)發(fā)送界面就可以發(fā)送了。界面提示輸入相關(guān)信息,按提示輸入收件人地址、主題和容等信息后,單擊“發(fā)送”按鈕就可以發(fā)送了。有時(shí)候需要發(fā)送附件,單擊“添加附件”命令選擇需要添加的文件就可以了。最后提示發(fā)送成功。(2) 用戶(hù)接收的時(shí)序圖:從上圖中可以看出,用戶(hù)首先還是先登錄系統(tǒng),然后系統(tǒng)將所有提交用戶(hù)的ID保存到session變量中,并傳遞給接收模板。該界面列出了所有的,用戶(hù)可以打開(kāi)某個(gè)閱讀。有時(shí)候是以附件的形式發(fā)送的,這樣用戶(hù)在接收是就需要先下載附件,然后保存。(3) 用戶(hù)發(fā)送的協(xié)作圖:這是與上面用戶(hù)發(fā)送的時(shí)序圖對(duì)應(yīng)的
23、協(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)造方法PMessage對(duì)Message數(shù)據(jù)重新封裝。JSP網(wǎng)頁(yè)調(diào)用PMessage的getTo方法可以直接獲得字符串類(lèi)型的地址。MailUserData類(lèi)用來(lái)存放用戶(hù)的相
24、關(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ā)送的主要活動(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è)
25、電子系統(tǒng)分成5大模塊,首先是登錄模塊,作為驗(yàn)證需要;其次是接收和附件模塊,該模塊負(fù)責(zé)的接收,有的是以附件形式接收的,再次是發(fā)送和回復(fù)模塊,該模塊負(fù)責(zé)該對(duì)方發(fā)送,有的還是以附件形式發(fā)送的;接著是處理模塊,該模塊負(fù)責(zé)的閱讀、保存和刪除等操作;然后是文件夾的管理,該操作負(fù)責(zé)文件夾的新建、重命名和刪除等操作。下面累出了本系統(tǒng)的模塊體系,如圖: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)行登錄。必
26、須選用正確的地址和密碼才可以登錄,不然會(huì)報(bào)錯(cuò)。登錄模塊的圖示:2.接收和附件模塊接收和附件模塊主要由showmessage.jsp文件完成,包括下圖中的幾個(gè)部分。(1) 接收。一個(gè)系統(tǒng)最基本的功能就是能夠接受對(duì)方發(fā)送的。(2) 保存附件。如果對(duì)方是以附件的形式發(fā)送給用戶(hù),那么用戶(hù)在接收時(shí),必須先下載,將其保存到本地機(jī)之后,才能閱讀。接收和附件模塊的圖示:3.發(fā)送和回復(fù)模塊 發(fā)送和回復(fù)模塊主要由compose.jsp文件完成,包括圖中的幾個(gè)部分。(1) 編寫(xiě)新。該部分也是電子系統(tǒng)中最基本的功能。(2) 上傳附件。在編寫(xiě)時(shí),容可以以附件的形式發(fā)送,這樣就需要先將附件上傳到服務(wù)器,然后在發(fā)送給對(duì)方。
27、 發(fā)送和回復(fù)模塊的圖示:4.處理模塊處理模塊主要由listonefoldr.jsp文件完成,包括圖中的幾個(gè)部分。(1) 顯示列表。在登錄后的首頁(yè)中就以分頁(yè)顯示的形式列出了所有的,便于管理。(2) 刪除選中。在選中刪除的后,可以單擊該命令刪除。(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)
28、刪除文件夾。用戶(hù)可以刪除自己創(chuàng)建的文件夾。文件夾管理模塊的圖示:3、 系統(tǒng)實(shí)現(xiàn)1 服務(wù)器的安裝和配置1.在做本次系統(tǒng)之前,必須配置JSP的服務(wù)器和電子的服務(wù)器。(1)JSP的服務(wù)器,主要使用的是Tomcat,同時(shí)在安裝Tomcat服務(wù)器之前,必需已經(jīng)安裝了SUN公司的JDK,在安裝Tomcat的時(shí)候主要是注意電腦環(huán)境變量的更改。安裝完成后,只要在瀏覽器中輸入localhost:8080/看是否能打開(kāi)Tomcat的網(wǎng)頁(yè),如果能,則表示安裝成功,8080端口是Tomcat的默認(rèn)端口,如果電腦上有服務(wù)已經(jīng)把端口占用了,可以把占用該端口的服務(wù)關(guān)掉,如果該服務(wù)關(guān)不掉或者比較重要,可以再Tomcat的安裝
29、目錄中找到server.xml文件,將其中port="8080"改成沒(méi)有被占用的端口號(hào)。(2)電子服務(wù)器的配置:在本系統(tǒng)中我們采用了MerakMailServler公司的Mail服務(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(&
30、quot;ISO-8859-1"); s=new String(tempB); return s; catch(Exception e) return s; 1. PMessage類(lèi)重新封裝了Message類(lèi)。(1) 重新封裝Message類(lèi)獲得的時(shí)間、主題、大小、容還有地址等; public PMessage(Message msg)throws Exception if(msg!=null) SimpleDateFormat df = new SimpleDateFormat("yy.MM.dd 'at' HH:mm:ss "); trydat
31、e=df.format(msg.getSentDate()!=null) ? msg.getSentDate() : msg.getReceivedDate(); catch(Exception e)date=new Date().toString(); subject=msg.getSubject(); size=msg.getSize(); Object content="" try content=msg.getContent(); catch(Exception e) if(msg.isMimeType("text/plain") &&a
32、mp; content!=null) text=(String)content; from=assembleAddress(msg.getFrom(); to=assembleAddress(msg.getRecipients(Message.RecipientType.TO); cc=assembleAddress(msg.getRecipients(Message.RecipientType.CC); bcc=assembleAddress(msg.getRecipients(Message.RecipientType.BCC); (2)構(gòu)造函數(shù)PMessage(String to,Str
33、ing cc,String bcc,String subj,String text);public PMessage(String to,String cc,String bcc,String subj,String text) to.replace('',','); cc.replace('',','); bcc.replace('',','); this.to=to; this.cc=cc; this.bcc=bcc; this.subject=subj; this.text=text; (3)
34、將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) ? " " : ", ") + getDisplayAddress(addri); tf = false; re
35、turn 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()+&qu
36、ot;>" else 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 /can't delete reserved folder if(foldername.equalsIgnoreCase("inbox")| foldername.equalsIgnoreCase("trash")
37、| foldername.equalsIgnoreCase("draft")| foldername.equalsIgnoreCase("sendbox") throw new Exception("Cann't delete reserved folder"); Folder folder=store.getFolder(foldername); if(!folder.exists()throw new Exception("This folder does not exists"); if(folder
38、.isOpen()folder.close(true); folder.delete(true); (2)修改用戶(hù)自己創(chuàng)建的夾的名字,但不允許修改Web應(yīng)用指定的系統(tǒng)夾得名字; public 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"); /can
39、't rename reserved folder if(fromname.equalsIgnoreCase("inbox")| fromname.equalsIgnoreCase("trash")| fromname.equalsIgnoreCase("draft")| fromname.equalsIgnoreCase("sendbox")| toname.equalsIgnoreCase("inbox")| toname.equalsIgnoreCase("trash&q
40、uot;)| toname.equalsIgnoreCase("draft")| toname.equalsIgnoreCase("sendbox") throw new Exception("Cann't rename reserved folder"); Folder folderFrom=store.getFolder(fromname); Folder folderTo=store.getFolder(toname); if(!folderFrom.exists()throw new Exception("T
41、his 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 Exception("You do not input new folder name w
42、hen 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 Message m=new Message1; m0=m
43、sg; f.appendMessages(m); (5) 根據(jù)參數(shù)指定的信息,如標(biāo)題,收發(fā)地址和容,來(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; if (to != null) toAddrs = In
44、ternetAddress.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 != null)
45、 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夾中,就永
46、久刪除該,否則把這封移到Trash夾中; public void doDeleteMessage(int arrayOpt,Folder f)throws Exception for(int i=0;i<arrayOpt.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 doMoveM
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《俄國(guó)對(duì)人口的抑制》課件
- 《設(shè)計(jì)模式王維雄》課件
- 《認(rèn)識(shí)折線統(tǒng)計(jì)》課件
- 果樹(shù)栽培學(xué)完整課件各論蘋(píng)果
- 反比例函數(shù)的圖像與性質(zhì) 課件
- 《教師培訓(xùn)講座》課件
- 酒店簽約報(bào)告范文模板
- 課題研究報(bào)告范文格式
- XXX村黨員個(gè)人整改措施計(jì)劃范文兩篇
- 2024學(xué)年婁底市漣源部分校高三語(yǔ)文(上)12月聯(lián)考試卷附答案解析
- 液氯槽車(chē)卸車(chē)安全操作規(guī)程培訓(xùn)
- 排水管道檢測(cè)項(xiàng)目總體實(shí)施方案樣本
- 青少年的社會(huì)認(rèn)知發(fā)展與教育:理論探索
- 部隊(duì)行車(chē)安全教育
- 輕紡行業(yè)技能鑒定考試-細(xì)紗保全筆試(2018-2023年)真題摘選含答案
- 大學(xué)試題(醫(yī)學(xué))-中藥資源學(xué)筆試(2018-2023年)真題摘選含答案
- 2024年中建七局建筑裝飾工程有限公司招聘筆試參考題庫(kù)含答案解析
- 二年級(jí)【語(yǔ)文(統(tǒng)編版)】《紙船和風(fēng)箏》第二課時(shí)課件
- 2024年小學(xué)體育與健康一年級(jí)教案全冊(cè)
- 電機(jī)制造中的供應(yīng)商管理與合作模式
- 芯片散熱市場(chǎng)分析報(bào)告
評(píng)論
0/150
提交評(píng)論