《用Java語言實現(xiàn)簡單郵件系統(tǒng).ppt》由會員分享,可在線閱讀,更多相關(guān)《用Java語言實現(xiàn)簡單郵件系統(tǒng).ppt(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、Presentation by: Emil,用Java語言實現(xiàn)簡單郵件系統(tǒng),實訓作品原理及功能說明,Presentation by: Emil,項目目標,掌握郵件系統(tǒng)開發(fā)技術(shù),包括郵件協(xié)議, JavaMail及郵件開發(fā)環(huán)境配置,郵件收發(fā)流程及JavaMail 核心類的使用,利用 JavaMail 開發(fā)一個具體的郵件管理系統(tǒng)。,Presentation by: Emil,郵件系統(tǒng)介紹,在網(wǎng)上怎樣收發(fā)郵件? 答:在網(wǎng)絡(luò)上收發(fā)郵件各需要一個協(xié)議來完成,這一點不用于現(xiàn)實世界的郵件處理過程。 常用的郵件協(xié)議是哪些? 答:它們是pop3協(xié)議,負責收取郵件;smtp協(xié)議,負責發(fā)送郵件。二者各司其職,但是一
2、個完整的郵件系統(tǒng)必須擁有這兩種協(xié)議才能完成郵件收發(fā)工作。,Presentation by: Emil,兩種查收郵件的方式,一、在線查收 比如hotmail。此時只需要登陸服務(wù)器收發(fā)信件就可以了,用戶不必理會pop3和smtp服務(wù)器的設(shè)置,因為它們是自動在幕后工作的,點擊“發(fā)送”,smtp就在工作了。,Presentation by: Emil,兩種查收郵件的方式,二、離線查收 比如Outlook或者Foxmail。此類軟件的好處是可以把信件收到本地的硬盤上。但是在創(chuàng)建新賬號的過程中就必須按提示正確填寫你的信箱地址、密碼、pop3服務(wù)器地址、smtp服務(wù)器地址,這樣才能實現(xiàn)不登陸信箱也能收發(fā)
3、信件。,Presentation by: Emil,市場上的幾種郵件系統(tǒng)性能比較,,Presentation by: Emil,大型門戶網(wǎng)站的郵件系統(tǒng),目前大型門戶網(wǎng)站的郵件系統(tǒng)通常是由內(nèi)部人員自行開發(fā)的,需要十幾個高級技術(shù)人員專門維護,并依賴于昂貴的硬件支持。 Etang的郵件系統(tǒng)采用了價格為100萬美元的EMC存儲設(shè)備 263的郵件系統(tǒng)成本在1500萬人民幣,有30人負責維護 新浪的郵件系統(tǒng)有60臺的服務(wù)器支撐,還有十幾位工程師在專門維護該系統(tǒng) 結(jié)論:這樣的成本令眾多企業(yè)在開展郵件服務(wù)時望而生畏。,Presentation by: Emil,Exchange Server,該系統(tǒng)只能運行在
4、Windows NT上,而WinNT本身的不可靠、不穩(wěn)定決定了Exchange Server的不穩(wěn)定、不可靠。 Exchange Server具有嚴重的內(nèi)存泄漏問題,隨著系統(tǒng)運行時間的增加會越來越慢,平均至少要一周重啟一次。 Windows NT系統(tǒng)面臨著巨大的病毒感染隱患,一旦Exchange Server感染病毒,會造成Exchange Server本身的癱瘓,感染速度驚人。殺毒軟件只會“亡羊補牢”。 Exchange Server對郵件賬戶的支持是非常有限的,一般超過200個用戶是系統(tǒng)就會效率低下,提升性能只能依靠昂貴的硬件。 Exchange Server自身安全防范較弱,容易被外界利
5、用來轉(zhuǎn)發(fā)郵件,甚至冒充內(nèi)部人員發(fā)送垃圾郵件。 Exchange Server維護困難,擁有成本高,每個用戶需交納10美元許可費。,Presentation by: Emil,Lotus Notes,Lotus Notes基本上還是一套OA和工作流系統(tǒng),其郵件功能十分有限。國內(nèi)用戶反映的問題主要有: 郵件系統(tǒng)經(jīng)常不能正常收發(fā),需頻繁的重啟動服務(wù)器或清理郵件系統(tǒng)。 經(jīng)常被外界利用來轉(zhuǎn)發(fā)郵件 不能和部分郵件系統(tǒng)很好兼容,系統(tǒng)收到的263和163信箱的郵件顯示為亂碼,收不到hotmail的郵件。 OA功能豐富,但是郵件系統(tǒng)不夠可靠,效率低,超過300人時,收信速度明顯變慢 擁有成本高,每個用戶的成本是
6、21美元,比Exchange Server還貴。,Presentation by: Emil,我的JavaMail系統(tǒng),自己開發(fā)系統(tǒng)的最大好處是: 按需定制,怎么簡單怎么來! 資源開銷小,維護成本低,功能靈活,有問題不用咨詢工程師,毀掉重做就好。 擁有成本低到只有時間成本。 界面簡單,清晰明了。,Presentation by: Emil,使用郵件協(xié)議的優(yōu)點和不足,郵局協(xié)議的最大好處在于支持移動計算。由于用戶的信件是存放在POP服務(wù)器中而不是直接自動存放到用戶的計算機中的,這樣用戶就不必建立與“郵局”的永久性連接,以等待隨時可能寄來的電子郵件,這使得那些不易于直接連入局域網(wǎng)絡(luò)的臺式PC
7、或筆記本機可以通過撥號上網(wǎng)(建立臨時的TCPIP連接)的方式方便地獲得郵件服務(wù)。這也是目前分散的互聯(lián)網(wǎng)用戶獲得郵件服務(wù)的主要形式。 離線收發(fā)郵件的不足之處在于容易受到垃圾郵件的騷擾。而www郵局則較好地解決了此問題,因為服務(wù)器已經(jīng)自動攔截了相當數(shù)量的垃圾郵件。,Presentation by: Emil,怎樣用J2SE實現(xiàn)郵件系統(tǒng),Java提供了相應的程序接口 JavaMail是相應的郵件功能實現(xiàn)接口,通過此接口,應用程序可以在黑盒狀態(tài)下實現(xiàn)與郵件協(xié)議的通信,完成郵件收發(fā)。實現(xiàn)機制類似于數(shù)據(jù)庫橋接程序原理。,Presentation by: Emil,本項目中郵件收發(fā)實現(xiàn)過程,使用JavaM
8、ail接收郵件的基本系統(tǒng)流程 1、使用session建立會話 2、使用store建立連接 3、使用folder與制定文件夾建立連接 4、使用message等類處理郵件,Presentation by: Emil,本項目中郵件收發(fā)實現(xiàn)過程,使用JavaMail發(fā)送郵件的基本系統(tǒng)流程 1、使用session建立會話 2、使用transport建立通信對象 3、使用message構(gòu)建郵件 4、使用transport發(fā)送郵件,Presentation by: Emil,本系統(tǒng)組建思路,因為實際上我們的目標系統(tǒng)就是郵件服務(wù)器的客戶端,所以他的基本功能得以確定: 1、實現(xiàn)pop3郵件服務(wù)器的收取與
9、顯示 2、使用smtp郵件服務(wù)器發(fā)送郵件 3、實現(xiàn)文本郵件與多附件的發(fā)送與接受 4、實現(xiàn)郵件的刪除功能 仿照 MS Outlook Express功能實現(xiàn),Presentation by: Emil,系統(tǒng)界面管理,系統(tǒng)主界面寫郵件、收郵件、刪除郵件、服務(wù)器參數(shù)預置、郵件列表、郵件顯示窗口。 新建和發(fā)送郵件界面 服務(wù)器參數(shù)設(shè)定界面pop3和smtp服務(wù)器參數(shù)設(shè)定。 收取附件界面附件列表、保存功能。,Presentation by: Emil,重點功能的實現(xiàn)技術(shù),JavaMail API如何支持郵件系統(tǒng)開發(fā)?,Presentation by: Emil,發(fā)送郵件的類和方法,,Presentatio
10、n by: Emil,Properties,JavaMail需要Properties來創(chuàng)建一個Session對象,它將尋找字符串“mail.smtp.host”,屬性值就是發(fā)送郵件的主機。比如: Properties props = new Properties(); Props.put(“mail.smtp.host”,””);,Presentation by: Emil,Session,Session類代表JavaMail中的一個郵件Session 。每一個基于Javamail的應用程序至少有一個Session ,但是可以有任意多的Session 。 Session對象需要知道用來處理郵件
11、的smtp服務(wù)器。例程: Session sendMialSession; sendMailSession = Session.getInstance(props,null); Session類定義了基本的郵件會話。就像Http會話那樣,我們進行收發(fā)郵件的工作都是基于這個會話的。Session對象利用了java.util.Properties對象獲得了郵件服務(wù)器、用戶名、密碼信息和整個應用程序都要使用到的共享信息。,Presentation by: Emil,Transport,JavaMail使用了兩個不同的類來完成這兩個功能:Transport 和 Store。Transport是用來
12、發(fā)送信息的,而Store用來收信。使用Transport 的方法: Tranport transport; transport =sendMailSession.getTransport(“smtp”); 用JavaMail Session的對象的getTransport方法來初始化Transport。傳過去的字符串申明了對象所要使用的協(xié)議“smtp”,這極大的節(jié)省了我們的時間。 JavaMail已經(jīng)內(nèi)置了很多協(xié)議的實現(xiàn)方法。,Presentation by: Emil,Authenticator,Authenticator 像類那樣,JavaMail API通過使用授權(quán)者類(Authen
13、ticator)以用戶名、密碼的方式訪問那些受到保護的資源,在這里“資源”就是指郵件服務(wù)器。在javax.mail包中可以找到這個JavaMail的授權(quán)者類(Authenticator)。 在使用Authenticator這個抽象類時,我們必須繼承該抽象類,并且該繼承類必須具有返回PasswordAuthentication對象(用于存儲認證時要用到的用戶名、密碼)getPasswordAuthentication()方法。并且要在Session中進行注冊,使Session能夠了解在認證時該使用哪個類。,Presentation by: Emil,Message,Message對象存儲我們實際
14、發(fā)送的電子郵件信息,Message對象被作為一個MimeMessage對象來創(chuàng)建并且需要知道應當選擇哪一個JavaMail Session。 使用方法: Message newMessage = new MimeMesage(sendMailSession);,Presentation by: Emil,接收郵件的類和方法,,Presentation by: Emil,Store,建立Session對象后,就需要使用Store類建立與POP或者IMAP服務(wù)器的通信連接,例程: Store store = session.getStore(“pop3”); Store.connect(h
15、ost,username,pwd); Store是抽象類,它模擬了消息存儲器及其內(nèi)部目錄(Folder)訪問協(xié)議,以存儲和讀取消息,由其子類提供具體實現(xiàn)。客戶程序可以通過獲取一個Store對象來訪問消息存儲器,以絕大多數(shù)的存儲器要求用戶在訪問前提供認證信息,connect方法執(zhí)行了該認證過程。與Transport類似,也可以指定Store使用協(xié)議。郵件是讀取郵件所以用pop3協(xié)議來讀取。如: Store store=new Store(“pop3”); 然后認證:store.connect(host,username,pwd),Presentation by: Emil,Folder,使用F
16、older類與指定的文件夾相連,例程: Folder folder = store.getFolder(“INBOX”); foler.open(Folder.READ_ONLY); Message message=folder.getMessage(); folder.close(true);,Presentation by: Emil,對本地郵件進行處理,先來了解一下每封郵件的構(gòu)成: 郵件標題 郵件體,通常是multipart類型 正文,可能是文本,可能是網(wǎng)頁 附件,多種類型的格式 正因為郵件格式多數(shù)情況下為嵌套類型,面對單一協(xié)議的非智能處理,可行的辦法就是采用循環(huán)(遞歸)作業(yè)方式對每一部分郵件內(nèi)容進行比對索取,完成郵件解釋。,Presentation by: Emil,感謝老師的辛勤工作!,,