郵件系統(tǒng)設計_第1頁
郵件系統(tǒng)設計_第2頁
郵件系統(tǒng)設計_第3頁
郵件系統(tǒng)設計_第4頁
郵件系統(tǒng)設計_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

成員負責模塊李進(組長)郵件服務器管理模塊、郵件管理之郵件發(fā)送模塊,其他模塊有參與馬昌修改用戶信息模塊,其他模塊有參與高寧郵件管理模塊(重要)何驥越登錄模塊王賀注冊模塊網絡郵件系統(tǒng)電子郵件作為Internet最為廣泛的應用之一,在人們的工作和生活中扮演著重要的角色,應用的普及使電子郵件技術有了飛速的發(fā)展。網絡電子郵件系統(tǒng)在當今的互聯(lián)網上比比皆是,不管是windows上的普及,還linux上的穩(wěn)定可靠和低廉;不管是分布式系統(tǒng),還是基于P2P,都離不開郵件系統(tǒng)的基本原理。

郵件傳輸原理在Internet上將一段文本信息從一臺計算機傳送到另一臺計算機上,可通過兩種協(xié)議來完成,即SMTP(SimpleMailTransferProtocol,簡單郵件傳輸協(xié)議)和POP3(PostOfficeProtocol,郵局協(xié)議3)。SMTP是Internet協(xié)議集中的郵件標準。在Internet上能夠接收電子郵件的服務器都有SMTP。電子郵件在發(fā)送前,發(fā)件方的SMTP服務器與接收方的SMTP服務器聯(lián)系,確認接收方準備好了,則開始郵件傳遞;若沒有準備好,發(fā)送服務器便會等待,并在一段時間后繼續(xù)與接收方郵件服務器聯(lián)系。這種方式在Internet上稱為“存儲——轉發(fā)”方式。POP3可允許E-mail客戶向某一SMTP服務器發(fā)送電子郵件,另外,也可以接收來自SMTP服務器的電子郵件。換句話說,電子郵件在客戶PC機與服務提供商之間的傳遞是通過P0P3來完成的,而電子郵件在Internet上的傳遞則是通過SMTP來實現(xiàn)。如圖所示:

發(fā)送主機服務器B發(fā)送主機服務器B服務器A客戶SMTP

POPInternet1.電子郵件的發(fā)送和接收

電子郵件在Internet上發(fā)送和接收的原理可以很形象地用我們日常生活中郵寄包裹來形容:當我們要寄一個包裹的時候,我們首先要找到任何一個有這項業(yè)務的郵局,在填寫完收件人姓名、地址等等之后包裹就寄出而到了收件人所在地的郵局,那么對方取包裹的時候就必須去這個郵局才能取出。同樣的,當我們發(fā)送電子郵件的時候,這封郵件是由郵件發(fā)送服務器(任何一個都可以)發(fā)出,并根據(jù)收信人的地址判斷對方的郵件接收服務器而將這封信發(fā)送到該服務器上,收信人要收取郵件也只能訪問這個服務器才能夠完成。

2.電子郵件地址的構成電子郵件地址的格式是“USER@SERVER.COM”,由三部分組成。第一部分“USER”代表用戶信箱的帳號,對于同一個郵件接收服務器來說,這個帳號必須是唯一的;第二部分“@”是分隔符;第三部分“SERVER.COM”是用戶信箱的郵件接收服務器域名,用以標志其所在的位置。

3.電子郵件的工作原理電子郵件與普通郵件有類似的地方,發(fā)信者注明收件人的姓名與地址(即郵件地址),發(fā)送方服務器把郵件傳到收件方服務器,收件方服務器再把郵件發(fā)到收件人的郵箱中。

更進一步的解釋涉及到以下幾個概念:MUA--MailUserAgent,郵件用戶代理,幫助用戶讀寫郵件;MTA--MailTransportAgent,郵件傳輸代理,負責把郵件由一個服務器傳到另一個服務器或郵件投遞代理;MDA--MailDeliveryAgent,郵件投遞代理,把郵件放到用戶的郵箱里。整個郵件傳輸過程如下:目前使用的SMTP協(xié)議是存儲轉發(fā)協(xié)議,意味著它允許郵件通過一系列的服務器發(fā)送到最終目的地。服務器在一個隊列中存儲到達的郵件,等待發(fā)送到下一個目的地。下一個目的地可以是本地用戶,或者是另一個郵件服務器。如果下游的服務器暫時不可用,MTA就暫時在隊列中保存信件,并在以后嘗試發(fā)送。

關于郵件系統(tǒng)的其他一些技術,我們暫且不考慮。如下所示:郵件服務器提供了郵件系統(tǒng)的基本結構,包括郵件傳輸、郵件分發(fā)、郵件存儲等功能,以確保郵件能夠發(fā)送到Internet網絡中的任意地方。目前郵件服務器有兩種不同的應用群體:ISP提供商和企事業(yè)單位。

Web郵件技術,使郵件用戶可以在任何地方使用瀏覽器登錄郵件服務器收發(fā)郵件,而不用配置郵件客戶端程序。

多域郵件服務是一臺物理服務器為多個獨立注冊Internet域名的企業(yè)或單位提供電子郵件的服務,在邏輯上,這些企業(yè)和單位擁有自己獨立的郵件服務器(企業(yè)郵局),也可以稱為虛擬郵件服務器技術。對于ISP提供商和企業(yè)集團公司來說,多域郵件服務器的支持能力是選擇郵件服務器的一個重要考慮因素。它可以方便地擴展其橫向郵件服務能力。

使用Linux作為郵件服務器,可以與Sendmail、MySQL等開源軟件共同使用,在滿足用戶需求的基礎上降低了系統(tǒng)價格。

郵件服務器的安全防護,包括數(shù)據(jù)身份認證、傳輸加密、垃圾郵件過濾、郵件病毒過濾、安全審計等的多項安全技術。

身份認證主要指SMTP發(fā)信認證,此項功能對于郵件服務器是一個可選功能,主要目的是防止黑客利用自己的服務器攻擊其他郵件服務器。完善SMTP身份認證不僅可以制止黑客的惡劣行為,同時可以保證自己的郵件服務器的各種資源可以充分地應用到日常的郵件處理過程中,不會造成服務器的系統(tǒng)崩潰和資源浪費。

無論是POP3協(xié)議還是SMTP協(xié)議,由于其在設計之初的缺陷,全部使用明碼進行消息的傳遞,因此很容易造成信息的泄漏??梢酝ㄟ^兩種方式提高系統(tǒng)的安全性:鏈路加密和端對端加密。鏈路加密是使用加密工具(軟硬件工具)對傳輸?shù)木€路進行數(shù)據(jù)加密,需要網絡設施的支持。

端對端加密是郵件客戶端到郵件客戶端的加密,是郵件服務器應當提供的功能,目前較為流行的方式是使用SSL/TLS進行傳輸加密。垃圾郵件大多是一些帶有商業(yè)性質的廣告等宣傳品。據(jù)估計,僅僅商業(yè)性垃圾郵件一項,每封垃圾郵件所抵消的生產力成本就在1美元左右。單是下載垃圾郵件所花費的上網費與電話費,每年就要花掉全球網民94億美元。此外,許多病毒以及身份證和信用卡盜用案例也與垃圾郵件有關。因此,需要郵件服務器具有垃圾郵件處理的功能,抵御大部分垃圾郵件的攻擊。黑客攻擊和病毒本來是兩個相對獨立的技術體系,但是隨著網絡的不斷發(fā)展,網絡工具與病毒越來越趨于融合,比如尼姆達病毒既是病毒,也是網絡攻擊的一種方式,而應用廣泛的電子郵件,也成了病毒傳播的主要方式之一。目前,大多數(shù)郵件服務器都具有了基本的病毒防護的能力。

目前的郵件服務器,僅中文就有若干字符集,如GB-2312、Big5等等,雖然我們可以統(tǒng)一標準,但是,在實際的過程中,我們不可能統(tǒng)一所有的郵件客戶端,因此我們只能要求郵件服務器支持多語言的環(huán)境。

由于目前許多郵件服務器處于電信托管等方式(服務器托管、服務器租用),不可能經常進行本地操作,因此目前郵件服務器均提供了遠程郵件監(jiān)控的功能。可以通過Web方式,監(jiān)控郵件服務器的工作狀態(tài),包括在線用戶數(shù)、郵件處理數(shù)量和速度、存儲空間使用率等,并且可以隨時對出現(xiàn)的發(fā)信高峰和網絡攻擊進行遠程處理。

電子郵件系統(tǒng)應該具備無限的擴展能力,Internet網絡的一個特性是變化無常,需要應對隨時而來的應用尖峰。因此,需要電子郵件系統(tǒng)具有無限的可擴展能力,這個能力主要體現(xiàn)在郵件的處理能力和郵件的存儲能力上。為了能夠使郵件的處理能力可以無限擴展,就需要引入集群和負載均衡技術,使應用平臺可以在需要的時候無限擴充,滿足長期或臨時的業(yè)務需要。對于2000萬以上的郵件用戶來說,每天發(fā)送的郵件量至少在幾千萬封,為了便于郵件存儲,需要高性能的郵件存儲解決方案,最為理想的應該是SAN技術在郵件服務器領域的應用。

常見郵件協(xié)議:SMTP(SimpleMailTransferProtocol):SMTP主要負責底層的郵件系統(tǒng)如何將郵件從一臺機器傳至另外一臺機器。

POP(PostOfficeProtocol):目前的版本為POP3,POP3是把郵件從電子郵箱中傳輸?shù)奖镜赜嬎銠C的協(xié)議。

IMAP(InternetMessageAccessProtocol):目前的版本為IMAP4,是POP3的一種替代協(xié)議,提供了郵件檢索和郵件處理的新功能,這樣用戶可以完全不必下載郵件正文就可以看到郵件的標題摘要,從郵件客戶端軟件就可以對服務器上的郵件和文件夾目錄等進行操作。IMAP協(xié)議增強了電子郵件的靈活性,同時也減少了垃圾郵件對本地系統(tǒng)的直接危害,同時相對節(jié)省了用戶察看電子郵件的時間。除此之外,IMAP協(xié)議可以記憶用戶在脫機狀態(tài)下對郵件的操作(例如移動郵件,刪除郵件等)在下一次打開網絡連接的時候會自動執(zhí)行。

本系統(tǒng)主要從簡單的郵件客戶端來探討一個郵件系統(tǒng)。利用JavaMail來實現(xiàn)。

以下是關于JavaMail的一些基本知識:JavaMail,顧名思義,提供給開發(fā)者處理電子郵件相關的編程接口。它是Sun發(fā)布的用來處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。我們可以基于JavaMail開發(fā)出類似于MicrosoftOutlook的應用程序。雖然JavaMail是Sun的API之一,但它目前還沒有被加在標準的java開發(fā)工具包中(JavaDevelopmentKit),這就意味著你在使用前必須另外下載JavaMail文件。除此以外,你還需要有Sun的JavaBeansActivationFramework(JAF)。JavaBeansActivationFramework的運行很復雜,在這里簡單的說就是JavaMail的運行必須得依賴于它的支持。在Windows2000下使用需要指定這些文件的路徑,在其它的操作系統(tǒng)上也類似。JavaMail是可選包,因此如果需要使用的話你需要首先從下載。目前最新版本是JavaMail1.4,使用JavaMail的時候需要JavabeanActivationFramework的支持,因此你也需要下載JAF。安裝JavaMail只是需要把他們加入到CLASSPATH中去,如果你不想修改CLASSPATH的話,可以直接把他們的jar包直接copy到JAVA_HOME/lib/ext下。這樣JavaMail就安裝好了。JavaMail包中用于處理電子郵件的核心類是:Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定義了一個基本的郵件會話,它需要從Properties中讀取類似于郵件服務器,用戶名和密碼等信息。Javax.mail.Session:Session類定義了一個基本郵件會話(session),是JavaMailAPI最高層入口類。所有其它類都是經由這個session才得以生效。Session對象用Java.util.Properties對象獲取信息,如郵件服務器、用戶名、密碼及整個應用程序中共享的其它信息。

Javax.mail.Message:一旦獲得Session對象,就可以繼續(xù)創(chuàng)建要發(fā)送的消息。這由Message類來完成。因為Message是個抽象類,必需用一個子類,多數(shù)情況下為Jernet.MimeMessage。MimeMessage是個能理解MIME類型和頭的電子郵件消息,正如不同RFC中所定義的。雖然在某些頭部域非ASCII字符也能被譯碼,但Message頭只能被限制為用US-ASCII字符。

Javax.mail.Address:一旦您創(chuàng)建了Session和Message,并將內容填入消息后,就可以用Address確定信件地址了。和Message一樣,Address也是個抽象類。您用的是Jernet.InternetAddress類。

Javax.mail.Authenticator:與J類一樣,JavaMailAPI也可以利用Authenticator通過用戶名和密碼訪問受保護的資源。對于JavaMailAPI來說,這些資源就是郵件服務器。JavaMailAuthenticator在Javax.mail包中,而且它和J中同名的類Authenticator不同。兩者并不共享同一個Authenticator,因為JavaMailAPI用于Java1.1,它沒有J類別。

要使用Authenticator,先創(chuàng)建一個抽象類的子類,并從getPasswordAuthentication()方法中返回PasswordAuthentication實例。創(chuàng)建完成后,您必需向session注冊Authenticator。然后,在需要認證的時候,就會通知Authenticator。您可以彈出窗口,也可以從配置文件中(雖然沒有加密是不安全的)讀取用戶名和密碼,將它們作為PasswordAuthentication對象返回給調用程序。

Javax.mail.Transport:消息發(fā)送的最后一部分是使用Transport類。這個類用協(xié)議指定的語言發(fā)送消息(通常是SMTP)。它是抽象類,它的工作方式與Session有些類似。僅調用靜態(tài)send()方法,就能使用類的缺省版本:Transport.send(message);或者,讀者也可以從針對自己的協(xié)議的會話中獲得一個特定的實例,傳遞用戶名和密碼(如果不必要就不傳),發(fā)送消息,然后關閉連接。

Javax.mail.Store:Store類實現(xiàn)特定郵件協(xié)議上的讀、寫、監(jiān)視、查找等操作。通過Javax.mail.Store類可以訪問Javax.mail.Folder類。

Javax.mail.Folder:Folder類用于分級組織郵件,并提供照Javax.mail.Message格式訪問email的能力。

具體用法大家可以查看JavaMailAPI。簡單示例:packagefss.base;

importjava.util.*;importjavax.mail.*;ernet.*;importjava.util.Date;importjavax.activation.*;importjava.io.*;publicclassMail{//把本程序所用變量進行定義。具體在main中對它們賦植。privateMimeMessagemimeMsg;//MIME郵件對象privateSessionsession;//郵件會話對象privatePropertiesprops;//系統(tǒng)屬性privatebooleanneedAuth=false;//smtp是否需要認證privateStringusername="";//smtp認證用戶名和密碼privateStringpassword="";privateMultipartmp;//Multipart對象,郵件內容,標題,附件等內容均添加到其中后再生成//MimeMessage對象publicMail(Stringsmtp){setSmtpHost(smtp);createMimeMessage();}

publicvoidsetSmtpHost(StringhostName){System.out.println("設置系統(tǒng)屬性:mail.smtp.host="+hostName);if(props==null)props=System.getProperties();//獲得系統(tǒng)屬性對象props.put("mail.smtp.host",hostName);//設置SMTP主機}

publicbooleancreateMimeMessage(){try{System.out.println("準備獲取郵件會話對象!");session=Session.getDefaultInstance(props,null);//獲得郵件會話對象}catch(Exceptione){System.err.println("獲取郵件會話對象時發(fā)生錯誤!"+e);returnfalse;}System.out.println("準備創(chuàng)建MIME郵件對象!");try{mimeMsg=newMimeMessage(session);//創(chuàng)建MIME郵件對象mp=newMimeMultipart();//mp一個multipart對象//Multipartisacontainerthatholdsmultiplebodyparts.returntrue;}catch(Exceptione){System.err.println("創(chuàng)建MIME郵件對象失敗!"+e);returnfalse;}}

publicvoidsetNeedAuth(booleanneed){System.out.println("設置smtp身份認證:mail.smtp.auth="+need);if(props==null)props=System.getProperties();if(need){props.put("mail.smtp.auth","true");}else{props.put("mail.smtp.auth","false");}}

publicvoidsetNamePass(Stringname,Stringpass){System.out.println("程序得到用戶名與密碼");username=name;password=pass;}

publicbooleansetSubject(StringmailSubject){System.out.println("設置郵件主題!");try{mimeMsg.setSubject(mailSubject);returntrue;}catch(Exceptione){System.err.println("設置郵件主題發(fā)生錯誤!");returnfalse;}}

publicbooleansetBody(StringmailBody){try{System.out.println("設置郵件體格式");BodyPartbp=newMimeBodyPart();bp.setContent("<metahttp-equiv=Content-Typecontent=text/html;charset=gb2312>"+mailBody,"text/html;charset=GB2312");mp.addBodyPart(bp);returntrue;}catch(Exceptione){System.err.println("設置郵件正文時發(fā)生錯誤!"+e);returnfalse;}}

publicbooleanaddFileAffix(Stringfilename){System.out.println("增加郵件附件:"+filename);try{BodyPartbp=newMimeBodyPart();FileDataSourcefileds=newFileDataSource(filename);bp.setDataHandler(newDataHandler(fileds));bp.setFileName(fileds.getName());mp.addBodyPart(bp);returntrue;}catch(Exceptione){System.err.println("增加郵件附件:"+filename+"發(fā)生錯誤!"+e);returnfalse;}}

publicbooleansetFrom(Stringfrom){System.out.println("設置發(fā)信人!");try{mimeMsg.setFrom(newInternetAddress(from));//設置發(fā)信人returntrue;}catch(Exceptione){returnfalse;}}

publicbooleansetTo(Stringto){System.out.println("設置收信人");if(to==null)returnfalse;try{mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));returntrue;}catch(Exceptione){returnfalse;}}

publicbooleansetCopyTo(Stringcopyto){System.out.println("發(fā)送附件到");if(copyto==null)returnfalse;try{mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));returntrue;}catch(Exceptione){returnfalse;}}

publicbooleansendout(){try{mimeMsg.setContent(mp);mimeMsg.saveChanges();System.out.println("正在發(fā)送郵件....");SessionmailSession=Session.getInstance(props,null);Transporttransport=mailSession.getTransport("smtp");//???transport.connect((String)props.get("mail.smtp.host"),username,password);transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));//transport.send(mimeMsg);System.out.println("發(fā)送郵件成功!");transport.close();returntrue;}catch(Exceptione){System.err.println("郵件發(fā)送失敗!"+e);returnfalse;}}

publicstaticvoidmain(String[]args){Stringmailbody="用戶郵件注冊測試<fontcolor=red>歡迎光臨</font><ahref=\"\">啦ABC</a>";Mailthemail=newMail("");themail.setNeedAuth(true);if(themail.setSubject("郵件測試")==false)return;//郵件內容支持html如<fontcolor=red>歡迎光臨</font><ahref=\"\">啦ABC</a>if(themail.setBody(mailbody)==false)return;//收件人郵箱if(themail.setTo("shengshuai@126.com")==false)return;//發(fā)件人郵箱if(themail.setFrom("shengshuai@126.com")==false)return;//設置附件//if(themail.addFileAffix("#######")==false)//return;//附件在本地機子上的絕對路徑themail.setNamePass("用戶名","密碼");//用戶名與密碼if(themail.sendout()==false)return;}}

需求分析電子郵件作為Internet最為廣泛的應用之一,在人們的工作和生活中扮演著重要的角色,應用的普及使電子郵件技術有了飛速的發(fā)展。不僅在普通人的日常生活中,而且,已經成為現(xiàn)代企業(yè)內外信息交流的必備工具,據(jù)統(tǒng)計Internet上有30%的業(yè)務是與電子郵件有關的。企業(yè)擁有自己的郵件系統(tǒng),不僅能夠提升企業(yè)形象,而且更重要的是能為企業(yè)帶來實際效益。當然作為一個郵件系統(tǒng)要考慮多方面,比如穩(wěn)定性、安全性等其他一些因素,但由于某些原因,在此只實現(xiàn)最基本的客戶端功能。Java為實現(xiàn)這種功能提供了豐富的類庫,借此,在老師的指導下,我們開始了網絡郵件系統(tǒng)的開發(fā)。郵件客戶端讓用戶可以方便地管理郵件服務器上自己的郵件,方便地發(fā)送郵件。要達到這個目的,要把用戶的相關個人信息數(shù)據(jù),相關的郵件服務器信息(收發(fā)郵件的服務器的域名、擁護登陸郵件服務器的帳號等)保存到郵件客戶端所在的服務器上的文件或者數(shù)據(jù)庫里。為了提高客戶端的響應速度,需要把用戶的郵件保存下來,這樣以后就不用每次都連接到郵件服務器上去獲取郵件了。

通過上面的分析,郵件客戶端的主要功能需求分析描述如下:1.注冊新用戶由于是一個支持多用戶的應用,在使用的時候需要有一個登陸的過程,而在應用剛開始提供給使用者使用的時候,不應該規(guī)定使用者將以什么樣的帳號登陸,所以需要在登陸界面上提供一個給使用者自己注冊新用戶的功能,這樣可以創(chuàng)建應用的用戶,保存用戶的信息,為登陸做好準備。2.用戶登陸用戶登陸后,進入郵件客戶端的主界面,如果用戶設置了默認郵件服務器,則列出用戶默認郵件服務器上收件箱的所有郵件,在該列表上用戶可以選擇只顯示已讀郵件或者未讀郵件,或者刪除郵件。3.新增郵件服務器用戶第一次使用客戶端的時候,至少要添加一個郵件服務器來收發(fā)郵件。郵件服務器的信息包括:服務器名稱、登陸帳號(用戶名和密碼)、pop3(收郵件)服務器域名、smtp(發(fā)郵件)服務器域名、是否在該服務器上保留接受過的郵件。提供一個服務器列表,在列表上可以修改、刪除服務器信息。4.修改個人信息提供一個修改用戶個人信息的界面。個人信息有:用戶ID(登陸郵件客戶端的用戶名)、密碼、真實姓名、默認郵件服務器。5.接收郵件用戶登陸的時候自動從默認郵件服務器上收取新郵件,之后再在指定的間隔時間后自動接收新郵件,同時提供一個按扭,用于用戶手動接收郵件。6.發(fā)送郵件提供一個郵件發(fā)送界面,在該界面上可以讓用戶輸入郵件發(fā)送、抄送、密送地址,如果有多個,多個地址間用英文分號隔開,可以編輯上傳附件個數(shù),可以讓用戶把郵件保存為草稿,也可以直接發(fā)送郵件。7.數(shù)據(jù)修改實時生效一部分用戶數(shù)據(jù)將保存在客戶端的會話里,當用戶通過界面修改這部分數(shù)據(jù)時,要刷新會話里保存的相應數(shù)據(jù)。8.同時支持IE和Firefox能在MicrosoftInternetExplorer正常顯示和使用的網頁,不一定能在Firefox上正常顯示和使用,這是在制作網頁的時候需要注意的。

系統(tǒng)設計從模擬用戶的角度進行分析,對于一個郵件的客戶端,首先要確定其功能是什么,也就是用戶想要系統(tǒng)做什么工作。有以上需求分析可確定需要建立的模塊有:用戶注冊、用戶登錄、用戶管理、郵件服務器信息管理、郵件管理等。由此分析如下模塊圖:WEB郵件客戶端WEB郵件客戶端用戶注冊用戶登陸用戶管理郵件服務器管理郵件管理登

陸注冊新用戶修改個人信息發(fā)

件收

件刪

件查看郵件列表增加服務器信息刪除服務器信息修改服務器信息根據(jù)以上分析描述,基本確定了郵件客戶段應該要包括的模塊,下面詳細地來分析每一個模塊所要實現(xiàn)的功能。用戶注冊模塊該模塊通過點擊登錄界面的“注冊新用戶”按鈕進入,在用戶注冊界面,要求用戶輸入:登錄ID,及登錄用戶名,必填,在郵件客戶端中,該ID是唯一的登錄密碼,必填,長度為1—8位顯示名,即阿松郵件時,接收人將看到的名字,一般是真實姓名,長度為1—255個字節(jié)用戶登錄模塊該模塊的界面就是登錄界面了,該模塊是已注冊用戶進入郵件客戶端的唯一入口。在這里要求用戶輸入登錄ID和密碼,輸入完成后直接按回車鍵或點擊“登錄“按鈕來提交登錄信息。對提交來的用戶名進行校驗,如果校驗不通過,則彈出對話框提示用戶輸入的用戶名或者密碼有誤;如果校驗通過,則在會話中保存用戶的登錄ID,進入郵件客戶端的主界面,并在主界面上提供退出系統(tǒng)的入口。用戶管理模塊用戶管理模塊提供給用戶修改個人信息的功能,可修改的個人信息有:登錄密碼、顯示名和默認郵件服務器。修改這些信息后,需要更新會話中保存的數(shù)據(jù),讓修改實時生效。郵件服務器信息管理該模塊提供一個當前用戶已有的郵件服務器列表,讓用戶添加、修改、刪除郵件服務器信息,實現(xiàn)接收多個服務器上郵件的功能。添加郵件服務器時,需要用戶輸入:服務器名,必填,用戶給該服務器起的名稱,以便于識別,最大航渡為32字節(jié)登錄服務器的用戶名,必填,最大長度為255字節(jié)登錄服務器的密碼,必填,最大長度為255字節(jié)pop3服務器域名,必填,最大長度為255字節(jié)smtp服務器域名,必填,最大長度為255字節(jié)是否在郵件服務器保留郵件備份,即是否在郵件服務器上刪除已經接收下來的郵件,默認為否上述信息都可以修改,修改后需要更新會話中保存的數(shù)據(jù),讓修改實時生效。郵件管理模塊該模塊主要包括以下幾個功能:提供撰寫并發(fā)送郵件的郵件編輯頁面,在改界面上,用戶需要填寫收件人的郵件地址、郵件主題及內容,可以填寫要抄送或者密送的郵件地址,也可以上傳一個或者多個郵件附件,可以進行發(fā)送郵件或者保存郵件為草稿的操作,可以在發(fā)送郵件的同時把郵件保存為已發(fā)送郵件。提供一個收件箱列表,該列表以粗體字體顯示未讀郵件,可以讓用戶選擇只列出所有郵件、未讀郵件或者已讀郵件。在該列表上用戶可以選擇多個郵件,可以進行刪除多個郵件的操作,在列表上對于每個郵件提供查看郵件詳細內容的連接。提供查看郵件詳細內容的界面,在該界面上顯示郵件的發(fā)件人、主題、郵件的正文及附件文件名、文件大小并提供下載連接。在該界面上用戶可以進行刪除郵件,寫回復郵件或者返回收件箱郵件列表的操作。提供一個草稿郵件列表,在該列表上用戶可以選擇多個郵件,同時刪除多個郵件,對于米格郵件提供進入郵件編輯界面。UML設計(軟件工程流程)Uml設計基本遵循課堂上老師所講各圖規(guī)格,由于篇幅所致,部分圖樣顯示不理想,請多包含。用例總圖2.用例描述用例名稱:郵件系統(tǒng)注冊用例表識號:1參與者:用戶簡要說明:用戶填寫自己的基本注冊信息,提交注冊成功返回給用戶自己已填寫的信息。前置條件:用戶用瀏覽器進入本系統(tǒng),并且是未注冊用戶?;臼录鳎河脩暨M入本系統(tǒng)點擊“用戶注冊”顯示出一個文本框用戶填寫自己的郵箱地址確定后點擊“注冊”注冊成功后返回給用戶自己的郵箱地址用例終止其他事件流A1:在按“注冊”按鈕之前,用戶隨時可以按“返回”按鈕,文本框的內容不保存。返回主頁異常事件流:注冊未成功返回錯誤信息,用戶確認。返回到本系統(tǒng)主頁。后置條件:用戶的信息被保存到系統(tǒng)數(shù)據(jù)庫。注釋:無

用例名稱:修改個人信息用例標識號:2參與者:用戶簡要說明:用戶點擊“用戶管理”可以修改自己的信息,點確定后重新寫入數(shù)據(jù)庫信息前置條件:用戶已登錄本郵件管理系統(tǒng)基本事件流:用戶登錄后點擊用戶管理。根據(jù)用戶的需求填寫自己要修改的信息內容。修改確認后點擊保存。返回給用戶修改后的信息。用例終止。其他事件流A1:在按“保存”按鈕之前,用戶隨時可以按“返回”按鈕,文本框的內容不保存。返回用戶的郵箱首頁異常事件流:用戶輸入的修改信息不合法,系統(tǒng)提示其錯誤。返回用戶郵箱首頁后置條件:用戶新信息被保存到數(shù)據(jù)庫。注釋:無

用例名稱:登陸用例標識號:3參與者:用戶簡要說明:用戶登陸到他的郵箱前置條件:用戶已注冊基本事件流:用戶注冊之后,可點擊“登陸”進入登陸頁面用戶輸入登陸ID,密碼點擊登陸按鈕,進入自己的郵箱用例終止其他事件流:用戶可在此界面,進行注冊用戶取消登陸異常事件流:提示輸入錯誤,用戶確認返回到登陸頁面后置條件:用戶輸入信息正確,進入自己的郵箱注釋:無用例名稱:發(fā)送郵件用例標識號:4參與者:用戶簡要說明:用戶發(fā)送郵件給收件人前置條件:用戶已登錄基本事件流:1、單擊”寫信”按鈕2、進入發(fā)送郵件頁面3、用戶在文本框內編輯收件人,主題,內容信息4、點擊”發(fā)送”按鈕,發(fā)送郵件5、用例終止其他事件流:1、可以任意添加或刪除附件2、若發(fā)送的郵件占用空間太大,則添加不上3、收件人文本框里必須填寫正確的郵箱地址異常事件流:1、提示錯誤信息,用戶確認2、返回到發(fā)送郵件頁面后置條件:xx給xx的郵件發(fā)送成功再寫一封注釋:無用例名稱:接收郵件用例標識號:5參與者:用戶簡要說明:用戶收取郵件,并查看郵件信息前置條件:用戶登錄基本事件流:點擊”收信”按鈕進入查看郵件頁面點擊某行發(fā)送的郵件主題,則跳轉到顯示郵內容頁面件閱讀郵件內容返回用例終止其他事件流:若郵件發(fā)送的是附件,打開或下載壓縮包到服務器是異常事件流:提示錯誤信息,用戶確認返回到發(fā)送郵件頁面后置條件:無注釋:無用例名稱:刪除郵件用例標識號:6參與者:用戶簡要說明:用戶對不想要的郵件進行刪除前置條件:用戶已登錄基本事件流:頁面上有刪除按鈕點擊你想刪除的那行郵件主題然后點擊刪除會出現(xiàn)一個”你確定刪除嗎?”若點擊確定會刪除此郵件用例終止其他事件流:若點擊否則不能進行刪除異常事件流:提示錯誤信息,用戶確認2、返回到發(fā)送郵件頁面后置條件:無注釋:無用例名稱:查看郵件列表用例標識號:7參與者:用戶簡要說明:用戶查看自己有多少,那些郵件前置條件:用戶已登錄基本事件流:單擊”查看郵件”進入到郵件列表頁面所有的郵件以列表的形式列出來用例終止其他事件流:若郵件過多會分頁顯示異常事件流:提示錯誤信息,用戶確認2、返回到發(fā)送郵件頁面后置條件:無注釋:無

用例名稱:增加郵件服務器信息用例標識號:8參與者:用戶簡要說明:用于設置收發(fā)郵件的服務器前置條件:用戶已登陸基本事件流:1、用戶單擊“添加郵件服務器”,進入添加頁面2、用戶輸入服務器名稱、登錄名、密碼、pop3域名、smtp域名、是否保留郵件備份等信息。3、用戶確認無誤后,點擊“添加“按鈕4、用例終止其他事件流:用戶退出此頁面異常事件流:對服務器域名檢驗的提示對一些未填項的提示后置條件:無注釋:無

用例名稱:刪除郵件服務器信息用例標識號:9參與者:用戶簡要說明:如果某些服務器信息已無用,用戶可以對起刪除前置條件:用戶已登錄基本事件流:1、用戶單擊“刪除服務器信息“,進入刪除頁面2、用戶在服務器信息列表里選擇要刪除的服務器,并點擊“刪除“按鈕3、用戶點擊提示中的“確認“按鈕4、用例終止其他事件流:用戶退出此也面異常事件流:刪除服務器信息失敗后置條件:無注釋:無

用例名稱:修改郵件服務器信息用例標識號:10參與者:用戶簡要說明:用戶可以修改已添加的服務器信息前置條件:用戶已登錄基本事件流:1、用戶單擊“添加服務器信息“,進入添加頁面2、用戶輸入需要修改的信息3、用戶點擊提示中的“保存“按鈕4、用例終止其他事件流:用戶退出此頁面異常事件流:對一些未填項的提示后置條件:無注釋:無序列圖(由于軟件運用的不成熟,有些圖可能不是很完善,請見諒)注冊模塊

登錄模塊修改個人信息模塊郵件服務器管理模塊郵件管理之發(fā)送郵件模塊郵件管理之接收郵件模塊郵件管理之刪除郵件郵件管理之郵件列表模塊類圖由于篇幅所致,一下以此是相應的類圖。但還是有一些圖效果不佳。敬請原諒。注冊模塊登錄模塊修改用戶信息模塊郵件服務器管理模塊郵件管理之發(fā)送郵件模塊郵件管理之接收郵件模塊郵件管理之刪除郵件模塊郵件管理之郵件列表模塊三.數(shù)據(jù)庫設計數(shù)據(jù)庫用于保存系統(tǒng)需要持續(xù)使用的數(shù)據(jù)對象,通過對需求及系統(tǒng)的設計,郵件客戶端包含三個需要保存的對象實體:用戶實體、郵件實體、郵件服務器實體。下面就來分析一下這些實體:實體分析用戶實體用戶是系統(tǒng)的使用者,系統(tǒng)需要為每個用戶單獨保存在運行過程中用到的用戶信息,讓用戶感覺到只有自己一個人在使用系統(tǒng)。這些數(shù)據(jù)項可以參考ER圖,這里就不在贅述。郵件服務器實體該實體與用戶實體在持久化層是一對多的關系,表現(xiàn)在一個用戶可以設置多個郵件服務器,而用戶只能同時使用其中一個郵件服務器,該服務器就是用戶默認的郵件服務器,它通過用戶ID與用戶實體關聯(lián)。郵件實體郵件實體用于持久化郵件,在郵件客戶端中,除郵件附件外的郵件信息持久化在數(shù)據(jù)庫中,另外整封郵件將以文件的形式保存在磁盤中。每封郵件都屬于唯一的用戶及郵件服務器,郵件實體通過用戶、郵件服務器ID與用戶實體、郵件服務器關聯(lián)。ER圖分析

數(shù)據(jù)表結構

用戶表user字段名字段類型是否可以為空字段長度說明id文本否32用戶登錄名display_name文本否255用戶的真實姓名password文本否8登錄密碼default_domain文本是32默認郵件服務器郵件服務器表domain字段名字段類型是否可以為空字段長度說明id文本否32唯一標示name文本否32服務器名稱login_name文本否255服務器登錄名login_password文本否32服務器登錄密碼Pop3_server文本否255Pop3服務器Smtp_server文本否255Smtp服務器keep_copy是/否是是否保存郵件備份user_id文本否32所屬用戶ID郵件表mail字段名字段類型是否可以為空字段長度說明id文本否32唯一標示msg_id文本是64郵件消息IDsubject文本是255郵件主題from文本是255發(fā)送者郵件地址to文本是255接收者郵件地址cc文本是255抄送郵件地址bcc文本是255密送郵件地址content備注是郵件內容is_html是/否是是否html格式郵件sent_date日期/時間是郵件發(fā)送日期時間is_read是/否是郵件是否已讀is_emergent是/否是郵件是否緊急is_need_receipt是/否是郵件是否需要回復mail_type數(shù)字是4類型(收件箱、已發(fā)送、草稿郵件)save_time日期/時間是郵件保存時間user_id文本否32郵件所屬用戶IDdomain_id文本否32郵件所屬郵件服務器IDattachment備注是郵件附件原文件名列表,多個文件名之間用換漢服“\n”隔開創(chuàng)建數(shù)據(jù)庫本系統(tǒng)選用Access數(shù)據(jù)庫,下面給出建表用的SQL語句:創(chuàng)建user(用戶)表createtableuser(idvarchar(32)primarykeynotnull,display_namevarchar(255)notnull,passwordvarchar(8)notnull,default_domainvarchar(32))創(chuàng)建domain(郵件服務器)表createtabledomain(idvarchar(32)notnullprimarykey,namevarchar(32)notnull,login_namevarchar(255)notnull,login_passwordvarchar(32)notnull,pop3_servervarchar(255)notnul,smtp_servervarchar(255)notnull,keep_copyyes/nodefault0,user_idvarchar(32)notnull)創(chuàng)建mail(郵件)表Createtablemail(idvarchar(32)notnullprimarykey,msg_idvarchar(64),subjectvarchar(255),fromvarchar(255),tovarchar(255),ccvarchar(255),bccvarchar(255),contentlongchar,sent_datedatetime,is_readbit,is_emergentbit,is_need_receiptbit,mail_typeinteger,save_timedatetime,user_idvarchar(32)notnull,domain_idvarchar(32)notnull,attachmentlongchar)四.系統(tǒng)架構整個網絡郵件系統(tǒng)選用B/S結構,用JSP實現(xiàn),主要用到servlet技術,運行在Tomcat容器中。下面介紹其細節(jié)。創(chuàng)建項目先看以下目錄結構:

mail目錄是項目的根目錄。src目錄用于存放java源文件webroot目錄是該項目將要生成的Web應用部署的上下文根目錄。css目錄存放HTML層疊樣式表文件,images存放圖片文件,js存放Javascript腳本文件,jsp存放JSP腳本文件。WEB-INF目錄是JavaWeb應用必須的一個目錄,服務器部署Web應用的時候需要在該目錄下詔部署描述文件web.xml、裝在類文件等。classes目錄存放編譯項目生成的class文件,lib目錄存放相關的jar文件。(bin是MyEclipse生成的空文件)在WEB-INF目錄下web.xml文件尤為重要,其主要配置如下:

在具體配置之時,可能由于數(shù)據(jù)庫文件和attachment文件的路徑不一樣,請予以修改。另外,程序需要用到幾個工具包,包括:mail.jar,是JavaMailAPI包,提供了Java郵件相關的API;activation.jar,mail.jar依賴于該jar;commons-fileupload-1.1.1.jar,一個MultiRequest分析工具,用于上傳附件;commons-logging-1.0.2.jar,日志工具包,提供了一個統(tǒng)一輸出日志的接口;commons-pool-1.3.jar,一個Java對象池工具包,dbtools.jar依賴于該jar;log4j-1.2.8.jar,日志輸出工具包;dbtools.jar,提供一個基于JDBC的數(shù)據(jù)庫工具包,其中還包含了進行JavaWeb應用開發(fā)的一些常用工具另外,所需要的servlet.jar包不需要放到WEB-INF/lib目錄中,但這是servlet類編譯所必須的。設計系統(tǒng)架構系統(tǒng)沒有使用MVC三層架構形式,但是還是盡量少的在JSP頁面上寫Java代碼,界面顯示以外的所有java代碼都封裝在JavaBean或者Servlet里,系統(tǒng)結構如圖所示:用戶用戶界面(JSP)系統(tǒng)業(yè)務邏輯(JavaBean)數(shù)據(jù)持久化(Acess數(shù)據(jù)庫)函數(shù)調用函數(shù)調用用戶界面是系統(tǒng)功能調用的入口,JavaBean提供全部的業(yè)務功能調用,JavaBean通過JDBC與數(shù)據(jù)庫交互數(shù)據(jù)。系統(tǒng)啟動與加載在WEB-INF/web.xml中增加一個Servlet,設置該Servlet的啟動屬性load-on-starup為0。該Servlet為JspMailAppInitServlet,該類用于初始化或釋放應用的一些全局資源,在JSP容器部署應用的時候首先初始化該Servlet,在卸載應用的時候最后銷毀該Servlet。在init()方法里加入初始化日志工具、數(shù)據(jù)庫連接池等資源的代碼。在destroy()方法加入銷毀數(shù)據(jù)庫連接池、日志工具等資源的代碼。在系統(tǒng)啟動時會自動調用下面的函數(shù):

正如以上分析,Tool類的initApp()方法,設置系統(tǒng)日志級別為INFO,并讀取web.xml中配置單郵件附件保存的路徑,并調用函數(shù)initConnectionPool()進行數(shù)據(jù)庫連接的初始化。根據(jù)web.xml中配置的數(shù)據(jù)庫連接的參數(shù),建立與該數(shù)據(jù)庫的連接池。這樣在數(shù)據(jù)庫操作時就可以直接使用該數(shù)據(jù)庫連接了。

主要類開發(fā)通過系統(tǒng)分析,郵件客戶端包括三個模塊,由于功能不是很復雜,因此,每個模塊可以用一個JavaBean類來實現(xiàn)。下面列出需要設計的類:UserManager,實現(xiàn)用戶管理所有的功能;該類提供了對用戶的各種操作函數(shù),在JSP頁面中調用該類的方法即可。成員方法如下:(1).修改用戶:修改用戶個人信息時調用,更新數(shù)據(jù)庫表中的用戶名、密碼、服務器。

(2).登錄驗證:當用戶登錄時進行驗證,輸入用戶名,查詢該用戶的密碼與給定的密碼是否相同。(3).判斷用戶是否存:在用戶進行注冊或修改用戶名時,用戶名是唯一的,需要判斷用戶名是否存在。

(4).添加用戶:當新用戶注冊時調用該函數(shù),根據(jù)用戶輸入的用戶名、密碼、服務器選擇增加一個新用戶。

(5).取得用戶信息:當修改個人信息時,調用該函數(shù)取得該用戶的信息顯示在修改的表單中。DomainManager,實現(xiàn)郵件服務器管理的所有功能;該類提供了對服務器設置的各種操作函數(shù),在JSP頁面中調用該類的方法即可。成員方法如下:(1).添加服務器設置:調用該函數(shù)增加一個新的服務器配置,包括該服務器配置的郵件地、用戶名、密碼、POP3地址、SMTP地址。每一個用戶都與該表的數(shù)據(jù)相關聯(lián),使用這里的配置進行郵件的收取和發(fā)送。

(2).修改服務器設置:修改已有的服務器配置項,包括該品味izhid用戶名、密碼、POP3地址、SMTP地址。

(3).取得一個服務器配置:在修改服務器配置時,調用該函數(shù)取得當前修改的數(shù)據(jù)記錄的值,顯示在修改表單中。

(4).取得所用的服務器配置列表:在用戶修改個人信息時,需要從所有的服務器配置中選擇一個來作為發(fā)送和接收郵件的配置選項。這里查詢服務器配置表中當前用戶添加的所有配置列表。

MailManager,實現(xiàn)郵件管理的所有功能;該類提供了對郵件的各種操作函數(shù),在JSP頁面中調用該類的方法即可。成員方法有以下三類:保存郵件(1).保存郵件到數(shù)據(jù)庫:該函數(shù)在發(fā)送新郵件時使用,用來將一個郵件包尋到數(shù)據(jù)庫中。Mail對象表示的是新建郵件時輸入的郵件數(shù)據(jù)對象,該對象表示一封待發(fā)郵件。Message表示一封實際發(fā)送的郵件對象,isReceive表示當期保存的是發(fā)送出去的郵件,還是從服務器接收到的郵件。

上面的代碼中,首先組織郵件對象Mail的數(shù)據(jù)內容,然后組合一個SQL語句。如果郵件不存在,則使用Insert語句,如果存在則使用Update語句。最后執(zhí)行該SQL語句。并根據(jù)isReceive的值,判斷此時是否應該將該郵件保存到本地。(2).保存郵件到附件目錄:該函數(shù)在接收郵件到本地時使用,它將遠程郵件服務器上的郵件保存到本地的郵件目錄attachments中。該函數(shù)首先會在本地建立一個eml的郵件文件,目錄為web.xml中配置的郵件附件目錄。然后建立輸出流對象,將該郵件對象Message保存到該文件中。(3).檢查郵件是否存在:在新建郵件時調用了該函數(shù),用以檢查數(shù)據(jù)庫中是否已經存在了該郵件。它查詢郵件數(shù)據(jù)表,關鍵字郵件ID。

(4).刪除郵件:根據(jù)郵件ID刪除數(shù)據(jù)庫中的一條記錄,并刪除郵件目錄中對應的郵件文件。

閱讀郵件(1).閱讀郵件:該函數(shù)在讀取郵件時調用,根據(jù)郵件的ID從郵件數(shù)據(jù)表中讀取郵件的內容,并返回Mail郵件對象。(2).獲取郵件列表:根據(jù)郵件的類型type取得郵件列表。在郵件數(shù)據(jù)表中,類型0表示接收的郵件,1表示發(fā)送的郵件,2表達式草稿郵件。這里查詢郵件數(shù)據(jù)表中對應類型的郵件,查詢時制定郵件所屬的服務器配置ID、用戶ID。并按照時間倒序排列。

(3).獲取收件箱、發(fā)件箱、草稿箱郵件列表,調用上面的函數(shù),分別傳遞參數(shù)為0、1、2即可。

(4).讀取郵件附件:根據(jù)郵件的ID和附件的名稱,返回附件讀取的輸入流對象。它首先建立于郵件目錄中該郵件文件的鏈接,然后調用MimeMsgParser類返回與該郵件中附件的鏈接。發(fā)送郵件(1).發(fā)送郵件:該函數(shù)用于將本地編寫的郵件發(fā)送給接收人,使用該用戶的發(fā)送郵件服務器配置進行發(fā)送。首先根據(jù)該用戶的配置參數(shù),設置郵件發(fā)送的SMTP地址、是否驗證、驗證的用戶名,然后調用Transport的發(fā)送函數(shù)發(fā)送該郵件。

(2).發(fā)送郵件:該函數(shù)與上面的函數(shù)不同的是,它是將當前用戶編寫的郵件對象Mail轉換為發(fā)送郵件的對象Message,調用上面的函數(shù)將該郵件對象發(fā)送出去。并設置數(shù)據(jù)庫中該偶就的類型為已發(fā)送郵件狀態(tài)。

MailReciver,從郵件服務器上接收新郵件保存到數(shù)據(jù)庫,并把郵件元件存成*.eml文件;該類提供了接收郵件和保存郵件到數(shù)據(jù)庫的函數(shù)。(1).接收郵件。

(2).保存郵件到數(shù)據(jù)庫。

MimeMsgParser,調用JavaMailAPI分析郵件,獲取郵件包含的信息;該類提供了對郵件對象的各種操作函數(shù),在JSP頁面中調用該類的方法即可。成員方法如下:(1)獲取發(fā)件人的地址和姓名。

(2).獲得郵件的收件人、抄送和密送的地址和姓名。

(3).獲取郵件正文,把得到的郵件內容保存到一個StringBufer對象中,解析郵件。主要是根據(jù)MimeType類型的不同執(zhí)行不同的操作,一步一步地解析。

(4).判斷此郵件是否需要回執(zhí),如果需要回執(zhí)返回true,否則返回false。

(5).判斷此郵件是否已讀,如果未讀返回false,反之返回true。(6).判斷此郵件是否包含附件。

(7).保存附件:根據(jù)附件的類型,將附件內容保存到附件目錄中。Tool,靜態(tài)功能函數(shù)的集合;該類提供一些實現(xiàn)相對獨立功能的共有靜態(tài)函數(shù),方便在JSP頁面、Servlet里調用。不如實現(xiàn)初始化應用、用戶登錄等功能的方法。(1).用戶登錄:驗證用戶登錄,并在session中保存用戶信息。

ComposeMailServlet,保存、發(fā)送新郵件的Servlet,具有處理多附件郵件的能力;(1).處理多附件郵件:此函數(shù)可以處理帶多個附件的郵件。

(2).處理郵件附件:此函數(shù)主要是對郵件附件的出來,如:附件名、存儲等。

DownloadAttachmentServlet,下載郵件附件的Servlet;此類主要用于下載郵件附件。

JspMailAppInitServlet,初始化系統(tǒng)應用的Servlet,在JSP容器裝在系統(tǒng)應用的時候裝在并調用該Servlet的init方法,在JSP容器卸載系統(tǒng)應用的時候調用該Servlet的destroy方法;

User,Domain,Mail三個類是分別相應于user,domain,mail三個表的值的對象;這三個類主要是對相應表的描述,包括其屬性和setter/getter方法,在這里就不在贅述了。五.用戶界面開發(fā)。在郵件客戶端應用中,由于所有功能實現(xiàn)都在JavaBean里完成,所以JSP頁面只是功能調用的入口,負責數(shù)據(jù)的收集及顯示數(shù)據(jù),相對比較簡單。其關鍵是要正確地進行相關功能方法的調用及處理方法返回的結果。包括以下JSP頁面:(1).用戶注冊頁面register.jsp,調用UserManager的addUser方法注冊用戶。

該頁面中填寫登錄用戶ID、姓名、密碼即可進行注冊。其代碼如下:

(2).登錄與退出login.jsp,登錄時掉哦那個Tool類的loginUser靜態(tài)方法驗證用戶的登錄信息,并通過返回值判斷是否登錄成功。根據(jù)loginUser的返回值,給出不同的提示信息。當?shù)卿浵到y(tǒng)后,單擊右上角的“退出”時,刪除該用戶的Session登錄信息,跳轉到登錄頁面。

(3).修改個人信息modify_user_info.jsp,調用UserManager的modifyUser來保存修改后的用戶信息。

該頁面的主要代碼如下:

(4).添加郵件服務器add_server_setting.jsp,該頁面調用DomainManager類的addDomain方法保存服務器配置數(shù)據(jù)。

該頁面的主要代碼如下:(5).修改或刪除服務器設置modify_server_setting.jsp,該頁面調用DomainManager的modifyDomain來保存修改后的配置數(shù)據(jù)。

該頁面的主要代碼是:

(6).收取郵件頁面receive_mail.jsp,它使用了接收郵件類MailReceiver的receiveMail來接收默認郵件服務器上的收件箱的郵件。

首先,根據(jù)用戶的D omain配置,設置接收郵件的POP3地址、用戶名和密碼,然后打開收件箱的文件夾,取得郵件列表。調用saveMail2DB()函數(shù)將郵件保存到本地。其次,saveMail2DB方法負責將服務器地址中的某一封郵件保存到本地的數(shù)據(jù)庫,并將郵件文件下載到本地。它根據(jù)郵件對象Message來創(chuàng)建本地郵件的對象Mail,最后調用MailManager的saveMail方法來執(zhí)行保存。(具體代碼請參看主要類設計步驟)(7).收件箱list_mail.jsp,

溫馨提示

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

評論

0/150

提交評論