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

下載本文檔

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

文檔簡(jiǎn)介

1、武漢長(zhǎng)江工商學(xué)院-工學(xué)院項(xiàng)目名稱: 簡(jiǎn)單郵件發(fā)送客戶端 程序設(shè)計(jì) 學(xué)生姓名: 學(xué) 號(hào): 班 級(jí): 指導(dǎo)老師: 2012年6月12日目 錄1.設(shè)計(jì)概述12.電子郵件發(fā)送協(xié)議與技術(shù)12.1 SMTP協(xié)議簡(jiǎn)介及通訊模型12.2 Java Mail API介紹23.郵件發(fā)送客戶端程序總體設(shè)計(jì)33.1系統(tǒng)模塊結(jié)構(gòu)33.2類的功能設(shè)計(jì)33.2.1系統(tǒng)托盤類33.2.2 賬號(hào)設(shè)置類43.2.3 郵件發(fā)送類44.功能模塊的實(shí)現(xiàn)54.1 程序主界面的設(shè)計(jì)54.2賬號(hào)設(shè)置功能實(shí)現(xiàn)64.3郵件發(fā)送功能實(shí)現(xiàn)84.4附件發(fā)送實(shí)現(xiàn)104.5系統(tǒng)托盤實(shí)現(xiàn)105.程序測(cè)試115.1 發(fā)送郵件程序賬號(hào)設(shè)置測(cè)試125.2發(fā)送電子

2、郵件程序測(cè)試125.3電子郵件程序系統(tǒng)托盤測(cè)試14設(shè)計(jì)小結(jié)15參考文獻(xiàn)16附錄1:SystemTrayTest類17附錄2:MainSender類19附錄3:LoginDialog類281.設(shè)計(jì)概述電子郵件(electronic mail,簡(jiǎn)稱E-mail,標(biāo)志:,也被大家昵稱為“伊妹兒”)又稱電子信箱、電子郵政,它是種用電子手段提供信息交換的通信方式。是Internet應(yīng)用最廣的服務(wù):通過(guò)網(wǎng)絡(luò)的電子郵件系統(tǒng),用戶可以用非常低廉的價(jià)格(不管發(fā)送到哪里,都只需負(fù)擔(dān)電話費(fèi)和網(wǎng)費(fèi)即可),以非??焖俚姆绞剑◣酌腌娭畠?nèi)可以發(fā)送到世界上任何你指定的目的地),與世界上任何一個(gè)角落的網(wǎng)絡(luò)用戶聯(lián)系,這些電子郵件

3、可以是文字、圖像、聲音等各種方式。同時(shí),用戶可以得到大量免費(fèi)的新聞、專題郵件,并實(shí)現(xiàn)輕松的信息搜索。電子郵件的處理有兩大部分組成:電子郵件在Internet上發(fā)送和接收的原理可以很形象地用我們?nèi)粘I钪朽]寄包裹來(lái)形容:當(dāng)我們要寄一個(gè)包裹時(shí),我們首先要找到任何一個(gè)有這項(xiàng)業(yè)務(wù)的郵局,在填寫(xiě)完收件人姓名、地址等等之后包裹就寄出而到了收件人所在地的郵局,那么對(duì)方取包裹的時(shí)候就必須去這個(gè)郵局才能取出。同樣的,當(dāng)我們發(fā)送電子郵件時(shí),這封郵件是由郵件發(fā)送服務(wù)器(任何一個(gè)都可以)發(fā)出,并根據(jù)收信人的地址判斷對(duì)方的郵件接收服務(wù)器而將這封信發(fā)送到該服務(wù)器上,收信人要收取郵件也只能訪問(wèn)這個(gè)服務(wù)器才能完成。本系統(tǒng)使用

4、Eclipse作為開(kāi)發(fā)工具,開(kāi)發(fā)一個(gè)電子郵件發(fā)送端應(yīng)用程序。系統(tǒng)實(shí)現(xiàn)的功能主要有帳號(hào)設(shè)置,發(fā)送及添加附件,托盤程序等。本例發(fā)送程序采取了與發(fā)送郵件服務(wù)器連接實(shí)現(xiàn)電子郵件的發(fā)送。用戶在“收件人郵箱”所對(duì)應(yīng)的對(duì)話框中輸入收件人的Email地址,并在賬號(hào)設(shè)置窗口所對(duì)的對(duì)話框中輸入發(fā)信人的Email地址,設(shè)置好賬號(hào)后,進(jìn)入主對(duì)話框編輯信件的正文(本程序還可以發(fā)送附件,直接選擇路徑,就可以發(fā)送附件),然后單擊“發(fā)送”按鈕,便可完成電子郵件的發(fā)送。電子郵件發(fā)送成功,程序?qū)棾鲆粋€(gè)“發(fā)送成功”的消息對(duì)話框;若電子郵件發(fā)送失敗,程序?qū)⒔o出失敗的相關(guān)信息。2.電子郵件發(fā)送協(xié)議與技術(shù)2.1 SMTP協(xié)議簡(jiǎn)介及通訊

5、模型(SMTP:Simple Mail Transfer Protocol)即簡(jiǎn)單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來(lái)控制信件的中轉(zhuǎn)方式。它能夠在傳送中接力傳送郵件,傳送服務(wù)提供了進(jìn)程間通信環(huán)境(IPCE),此環(huán)境可以包括一個(gè)網(wǎng)絡(luò),幾個(gè)網(wǎng)絡(luò)或一個(gè)網(wǎng)絡(luò)的子網(wǎng)。理解到傳送系統(tǒng)(或IPCE)不是一對(duì)一的是很重要的。進(jìn)程可能直接和其它進(jìn)程通過(guò)已知的IPCE通信。郵件是一個(gè)應(yīng)用程序或進(jìn)程間通信。郵件可以通過(guò)連接在不同IPCE上的進(jìn)程跨網(wǎng)絡(luò)進(jìn)行郵件傳送。更特別的是,郵件可以通過(guò)不同網(wǎng)絡(luò)上的主機(jī)接力式傳送。SMTP協(xié)議屬于TCPIP協(xié)議族,它幫助每臺(tái)計(jì)算機(jī)在發(fā)送或中轉(zhuǎn)信件時(shí)找到

6、下一個(gè)目的地。通過(guò)SMTP協(xié)議所指定的服務(wù)器,我們就可以把Email寄到收信人的服務(wù)器上了,整個(gè)過(guò)程只要幾分鐘。SMTP服務(wù)器則是遵循SMTP協(xié)議的發(fā)送郵件服務(wù)器,用來(lái)發(fā)送或中轉(zhuǎn)你發(fā)出的電子郵件。SMTP 是一種提供可靠且有效電子郵件傳輸?shù)膮f(xié)議。SMTP是建模在 FTP 文件傳輸服務(wù)上的一種郵件服務(wù),主要用于傳輸系統(tǒng)之間的郵件信息并提供來(lái)信有關(guān)的通知。SMTP 獨(dú)立于特定的傳輸子系統(tǒng),而且僅要求一條可以保證傳送數(shù)據(jù)單元順序的通道且只需要可靠有序的數(shù)據(jù)流信道支持。SMTP 重要特性之一是其能跨越網(wǎng)絡(luò)傳輸郵件,即“ SMTP郵件中繼”。通常,一個(gè)網(wǎng)絡(luò)可以由公用互聯(lián)網(wǎng)上 TCP 可相互訪問(wèn)的主機(jī)、防

7、火墻分隔的 TCP/IP 網(wǎng)絡(luò)上 TCP 可相互訪問(wèn)的主機(jī),及其它 LAN/WAN 中的主機(jī)利用非 TCP 傳輸層協(xié)議組成。使用 SMTP ,可實(shí)現(xiàn)相同網(wǎng)絡(luò)上處理機(jī)之間的郵件傳輸,也可通過(guò)中繼器或網(wǎng)關(guān)實(shí)現(xiàn)某處理機(jī)與其它網(wǎng)絡(luò)之間的郵件傳輸。在這種方式下,郵件的發(fā)送可能經(jīng)過(guò)從發(fā)送端到接收端路徑上的大量中間中繼器或網(wǎng)關(guān)主機(jī)。域名服務(wù)系統(tǒng)(DNS)的郵件交換服務(wù)器可以用來(lái)識(shí)別出傳輸郵件的下一跳 IP 地址。SMTP在傳輸文件過(guò)程中使用25號(hào)端口??纱笾掠孟旅娴膱D2-1來(lái)表示。用戶發(fā)送SMTP文件系統(tǒng)接收SMTP文件系統(tǒng)SMTP命令郵件內(nèi)容 應(yīng)答 圖2-1 SMTP通信模型2.2 Java Mail A

8、PI介紹一般情況下,在eclipse中,電子郵件程序的編寫(xiě)是主要是利用Java jdk1.7擴(kuò)展包JavaMailAPI等及相關(guān)的SMTP等通信協(xié)議來(lái)實(shí)現(xiàn)的。隨著現(xiàn)代軟件業(yè)的發(fā)展,java提供了方便、簡(jiǎn)易、與服務(wù)器無(wú)關(guān)且穩(wěn)固的電子郵件處理組件,使我們可以在程序開(kāi)發(fā)語(yǔ)言中調(diào)用這些組件,利用很簡(jiǎn)單的語(yǔ)言實(shí)現(xiàn)功能強(qiáng)大的程序。JavaMail便是一個(gè)很好的電子郵件程序開(kāi)發(fā)擴(kuò)展組件。JavaMail API是讀取、撰寫(xiě)、發(fā)送電子信息的可選包。我們可用它來(lái)建立如Eudora、Foxmail、MS Outlook Express一般的郵件用戶代理程序(Mail User Agent,簡(jiǎn)稱MUA)。而不是像s

9、endmail或者其它的郵件傳輸代理(Mail Transfer Agent,簡(jiǎn)稱MTA)程序那樣可以傳送、遞送、轉(zhuǎn)發(fā)郵件。從另外一個(gè)角度來(lái)看,我們這些電子郵件用戶日常用MUA程序來(lái)讀寫(xiě)郵件,而MUA依賴著MTA處理郵件的遞送。JavaMail核心類:Session、Message、Address、Authenticator、Transport、Store、Folder。Session類:定義了基本的郵件會(huì)話。就像Http會(huì)話那樣,我們進(jìn)行收發(fā)郵件的工作都是基于這個(gè)會(huì)話的。Session對(duì)象利用了java.util.Properties對(duì)象獲得了郵件服務(wù)器、用戶名、密碼信息和整個(gè)應(yīng)用程序都要使

10、用到的共享信息。Message類:當(dāng)我們建立了Session對(duì)象后,便可以被發(fā)送的構(gòu)造信息體了。在這里SUN提供了Message類型來(lái)幫助開(kāi)發(fā)者完成這項(xiàng)工作。由于Message是一個(gè)抽象類,大多數(shù)情況下,我們使用ernet.MimeMessage這個(gè)子類,該類是使用MIME類型、MIME信息頭的郵箱信息。信息頭只能使用US-ASCII字符,而非ASCII字符將通過(guò)編碼轉(zhuǎn)換為ASCII的方式使用。Address類:到這里,我們已經(jīng)建立了Session和Message,下面將介紹如何使用郵件地址類:Address。像Message一樣,Address類也是一個(gè)抽象類,所

11、以我們將使用ernet.InternetAddress這個(gè)子類。Authenticator類:像類那樣,JavaMail API通過(guò)使用授權(quán)者類(Authenticator)以用戶名、密碼的方式訪問(wèn)那些受到保護(hù)的資源,在這里“資源”就是指郵件服務(wù)器。在javax.mail包中可以找到這個(gè)JavaMail的授權(quán)者類(Authenticator)。Transport類:在發(fā)送信息時(shí),Transport類將被用到。這個(gè)類實(shí)現(xiàn)了發(fā)送信息的協(xié)議(通稱為SMTP),此類是一個(gè)抽象類,我們可以使用這個(gè)類的靜態(tài)方法send()來(lái)發(fā)送消息:Transport.send(message

12、);Store和Folder類:接收郵件和發(fā)送郵件很類似都要用到Session。但是在獲得Session后,我們需要從Session中獲取特定類型的Store,然后連接到Store,這里的Store代表了存儲(chǔ)郵件的郵件服務(wù)器。在連接Store的過(guò)程中,極有可能需要用到用戶名、密碼或者Authenticator。3.郵件發(fā)送客戶端程序總體設(shè)計(jì)3.1系統(tǒng)模塊結(jié)構(gòu)電子郵件客戶端主要由以下三個(gè)模塊構(gòu)成:發(fā)送郵件模塊、系統(tǒng)托盤模塊、賬號(hào)設(shè)置模塊。其功能模塊如圖3-1所示:電子郵件發(fā)送端程序發(fā)送郵件賬號(hào)設(shè)置系統(tǒng)托盤 圖3-1 電子郵件功能模塊圖1)發(fā)送郵件模塊:發(fā)送郵件,并可以添加附件。2)賬號(hào)設(shè)置模塊:

13、對(duì)發(fā)送方電子郵件賬號(hào)進(jìn)行設(shè)置。 3)系統(tǒng)托盤模塊:在任務(wù)欄可以使程序有托盤功能。 3.2類的功能設(shè)計(jì) 3.2.1系統(tǒng)托盤類Class SystemTrayTest/該類為系統(tǒng)托盤類,為了實(shí)現(xiàn)郵件程序的托盤功能。PopupMenu popup = new PopupMenu(); /系統(tǒng)托盤菜單數(shù)組。 MenuItem mItem = new MenuItem(賬號(hào)設(shè)置),new MenuItem(退出程序) ; /點(diǎn)擊鼠標(biāo)郵件的菜單數(shù)組SystemTray tray;表示桌面的系統(tǒng)托盤對(duì)象。TrayIcon trayIcon; / TrayIcon 對(duì)象表示可以添加到系統(tǒng)托盤的托盤圖標(biāo)。Tra

14、yIcon 可以包含工具提示(文本)、圖像、彈出菜單和一組與之關(guān)聯(lián)的偵聽(tīng)器。 MailSender inst; /表示創(chuàng)建一個(gè)郵件發(fā)送類。public SystemTrayTest() /該方法表示一個(gè)托盤類的構(gòu)造。public void actionPerformed(ActionEvent e) /該方法表示鼠標(biāo)觸發(fā)事件,其中的參數(shù)為監(jiān)視器變量。3.2.2 賬號(hào)設(shè)置類Class LoginDialog/該類為賬號(hào)設(shè)置類,主要實(shí)現(xiàn)了郵件系統(tǒng)的賬號(hào)功能。public static MailSender ms; /表示創(chuàng)建一個(gè)郵件發(fā)送類。private JLabel pwdLabel; /表示創(chuàng)

15、建用戶密碼的短文本字符串的顯示區(qū)。private JTextField userJT; /表示創(chuàng)建用戶賬號(hào)的輸入?yún)^(qū)。private JButton logoutJB; /表示創(chuàng)建一個(gè)按鈕。private JPasswordField pwdJP; /表示創(chuàng)建一個(gè)密碼輸入?yún)^(qū)。private JLabel userLabel; /表示創(chuàng)建用戶賬號(hào)的短文本字符串的顯示區(qū)。public LoginDialog(MailSender frame) /該方法表示賬號(hào)設(shè)置類的一個(gè)構(gòu)造private void initGUI() /該方法表示一個(gè)圖形界面的初始化。private void logonJBMou

16、seEntered(MouseEvent evt)/該方法以及接后的幾個(gè)類似的方法都表示鼠標(biāo)觸發(fā)事件。3.2.3 郵件發(fā)送類Class MailSender/該類為郵件發(fā)送類,主要是實(shí)現(xiàn)了郵件發(fā)送等功能。public LoginDialog dlg; / 登錄對(duì)話框private static String attachPath; / 附件路徑private static String mailAddr; / 發(fā)件人郵箱地址private static String mailPwd; / 發(fā)件人郵箱密碼public boolean loginCheck; / 是否已登錄private JLab

17、el fromLabel; / 顯示發(fā)件人private JButton loginJB;private JLabel attachLabel;private JLabel stateLabel;/ 郵件狀態(tài)private boolean hasAttach;/ 是否有附件private JButton attachJB;/ 添加附件private JTextField recieverJT;/ 前面的郵箱地址private JTextField smtpJT;/ 后面的郵箱地址private JTextField tittleJT;/ 主題private JTextArea textJTA;

18、/ 內(nèi)容private JSeparator jSeparator1;/ 分割線private void initGUI() /圖形界面的初始化方法class PasswordAuthenticator extends Authenticator/密碼輸入方法private void sendJBActionPerformed(ActionEvent evt)/郵件發(fā)送的詳細(xì)方法private String smtpAddressConfirm(String smtpAddr)/SMTP郵件地址確認(rèn)方法private void attachJBActionPerformed(ActionEve

19、nt evt)/添加附件的方法4.功能模塊的實(shí)現(xiàn)4.1 程序主界面的設(shè)計(jì)本次設(shè)計(jì)中,主要用到對(duì)話框Java圖形界面。Java圖形界面是實(shí)現(xiàn)應(yīng)用程序人機(jī)交互的重要組成部分。它不但可以實(shí)現(xiàn)數(shù)據(jù)流的輸入和輸出,而且也可以移動(dòng)和關(guān)閉對(duì)話框。a.創(chuàng)建類MailSender.首先,創(chuàng)建MailSender類,此類繼承javax.swing.JFrame類。b.創(chuàng)建initGUI方法首先,設(shè)置窗口關(guān)閉方法,調(diào)用setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)方法。然后設(shè)置布局。對(duì)各個(gè)圖形組件進(jìn)行創(chuàng)建。主界面的實(shí)現(xiàn)如圖4-1,創(chuàng)建一個(gè)圖形界面

20、,有輸入框,輸入監(jiān)視器,還有各個(gè)按鈕等。方便用戶可以使用系統(tǒng)。圖4-1 圖形界面的創(chuàng)建與實(shí)現(xiàn)圖4.2賬號(hào)設(shè)置功能實(shí)現(xiàn)在賬號(hào)設(shè)置時(shí)新建一個(gè)類,此類包含了GUI,鼠標(biāo)觸發(fā)事件,以及賬號(hào)名,密碼與郵件服務(wù)器的驗(yàn)證。在用戶輸入賬號(hào)時(shí)會(huì)進(jìn)行賬號(hào)名檢測(cè),查看輸入的賬號(hào)格式是否有誤,若有誤,則返回重新輸入。賬號(hào)設(shè)置流程圖如圖4-2,賬號(hào)設(shè)置會(huì)在輸入賬號(hào)時(shí)檢驗(yàn)合法性,然后等待主界面調(diào)用并提取賬號(hào)。輸入郵箱賬號(hào)(程序會(huì)檢測(cè)賬號(hào)合法性)以及密碼,然后點(diǎn)擊“確定”按鈕點(diǎn)擊“賬號(hào)設(shè)置”按鈕程序提取賬號(hào),發(fā)送時(shí)與郵件服務(wù)器驗(yàn)證等待發(fā)送圖4-2 賬號(hào)設(shè)置流程圖部分此類代碼如下:private void initGUI()

21、 try this.setTitle(賬號(hào)設(shè)置);getContentPane().setLayout(null);this.setBounds(450, 250, 300, 200);private String smtpAddressConfirm(String smtpAddr) if (smtpAddr.contains(.com) if (smtpAddr.contains(163) smtpAddr = ; else if (smtpAddr.contains(qq) smtpAddr = ; else return not include; else return not inc

22、lude;return smtpAddr;4.3郵件發(fā)送功能實(shí)現(xiàn)郵件發(fā)送流程圖如圖4-3,發(fā)送郵件時(shí)會(huì)對(duì)郵件以及賬號(hào)進(jìn)行處理和驗(yàn)證。獲取收件人地址(驗(yàn)證地址合法性)發(fā)往SMTP服務(wù)器進(jìn)行驗(yàn)證返回失敗信息驗(yàn)證失敗驗(yàn)證成功獲取發(fā)件人賬號(hào)和密碼傳入服務(wù)器發(fā)送郵件輸出對(duì)話框:發(fā)送成功返回失敗信息發(fā)送失敗發(fā)送成功圖4-3 郵件發(fā)送流程圖1)獲取收件人賬號(hào),并設(shè)置SMTP郵件服務(wù)器(程序會(huì)檢測(cè)輸入賬號(hào)合法性)。 關(guān)鍵代碼: String to = recieverJT.getText().trim() + + smtpJT.getText().trim();/ 獲得收件人地址System.out.prin

23、tln(to);String subject = tittleJT.getText();String body = textJTA.getText();Properties props = System.getProperties();/ 設(shè)置SMTP郵件服務(wù)器:String smtpAddr = smtpAddressConfirm(smtpJT.getText();if (not include = smtpAddr) JOptionPane.showMessageDialog(null, 無(wú)法解析郵箱地址!);jLabel1.setIcon(resources.error);System

24、.out.println(smtpAddr);props.put(mail.smtp.host, smtpAddr);props.setProperty(mail.smtp.port, 25);/ SMTP服務(wù)器需要驗(yàn)證:props.put(tocol, smtp);props.put(mail.smtp.starttls.enable, true);props.put(mail.smtp.auth, true);2)獲取賬號(hào)設(shè)置界面中用戶輸入的賬號(hào)和密碼傳入服務(wù)器,然后創(chuàng)建一封新郵件。關(guān)鍵代碼:/ 傳入用戶名和口令:Session session = Se

25、ssion.getDefaultInstance(props,new PasswordAuthenticator(mailAddr, mailPwd);session.setDebug(true);/ 創(chuàng)建新郵件:Message msg = new MimeMessage(session);msg.setFrom(new InternetAddress(mailAddr);msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false);msg.setSubject(subject);msg.setText

26、(body);msg.setSentDate(new Date();3)郵件發(fā)送以及發(fā)送失敗的詳細(xì)信息和原因。關(guān)鍵代碼:MimeBodyPart mbp1 = new MimeBodyPart();mbp1.attachFile(sss);Multipart multi = new MimeMultipart();FileDataSource fds = new FileDataSource(attachPath);mbp1.setDataHandler(new DataHandler(fds);mbp1.setFileName(attachLabel.getText();multi.addB

27、odyPart(mbp1);msg.setContent(multi);msg.saveChanges();Transport.send(msg);System.out.println(mail sended!);stateLabel.setText(發(fā)送成功!);sendJB.setIcon(resources.ok);setIconImage(resources.mail_sended.getImage(); catch (Exception ex) JOptionPane.showMessageDialog(null, 發(fā)送郵件失敗!);System.err.println(郵件發(fā)送失敗

28、的原因是: + ex.getMessage();System.err.println(具體的錯(cuò)誤原因);ex.printStackTrace(System.err);4.4附件發(fā)送實(shí)現(xiàn)添加附件流程圖如圖4-4,當(dāng)用戶點(diǎn)擊“添加附加”按鈕時(shí),會(huì)彈出圖形界面,方便用戶選擇附件路徑,附件與郵件一起發(fā)送。用戶點(diǎn)擊“添加附件”按鈕彈出界面,用戶選擇附件路徑有無(wú)多個(gè)附件?有無(wú)等待與郵件一起發(fā)送圖4-4 添加附件流程圖 新建一個(gè)JFileChoose對(duì)象chooser,然后調(diào)用對(duì)象的方法。關(guān)鍵代碼:chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);c

29、hooser.setDialogTitle(打開(kāi)文件夾);chooser.setCurrentDirectory(new File(E:/flie/my coding tip);chooser.setMultiSelectionEnabled(true);/ 支持多個(gè)附件int returnVal = chooser.showOpenDialog(this);if (returnVal = JFileChooser.APPROVE_OPTION) attachPath = chooser.getSelectedFile().getAbsolutePath();attachLabel.setIc

30、on(resources.attach);attachLabel.setText(chooser.getSelectedFile().getName();this.setIconImage(resources.mail_attachment.getImage();this.hasAttach = true; / 有附件4.5系統(tǒng)托盤實(shí)現(xiàn)系統(tǒng)托盤流程圖如圖4-5,功能為當(dāng)用戶點(diǎn)擊close鍵時(shí),本系統(tǒng)最小化到托盤,然后當(dāng)用戶雙擊托盤圖標(biāo)時(shí)又出現(xiàn)主界面。用戶點(diǎn)擊關(guān)閉按鈕時(shí)本系統(tǒng)最小到系統(tǒng)托盤鼠標(biāo)點(diǎn)擊雙擊點(diǎn)擊右鍵選擇賬號(hào)設(shè)置主界面出現(xiàn)點(diǎn)擊右鍵選擇退出程序退出程序賬號(hào)設(shè)置界面出現(xiàn)圖4-5 系統(tǒng)托盤流程

31、圖 在本程序中添加了系統(tǒng)托盤功能,使用了jdk1.6中新增加的類Systemtray和TrayIcon類創(chuàng)建系統(tǒng)托盤,并在托盤上增加了鼠標(biāo)郵件菜單。關(guān)鍵代碼: trayIcon.addActionListener(this);trayIcon.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) if (e.getSource() = trayIcon& e.getButton() = MouseEvent.BUTTON1) if (flag) setState(1);flag = false; e

32、lse setState(0);flag = true;setVisible(true);5.程序測(cè)試現(xiàn)在,以發(fā)送如下的一封帶附件的郵件來(lái)進(jìn)行功能測(cè)試。收件人:hubeigongpeng發(fā)件人:hubeiwangchangyou郵件主題:測(cè)試郵件,收到勿回郵件內(nèi)容:測(cè)試郵件,收到勿回附件:測(cè)試文件.doc5.1 發(fā)送郵件程序賬號(hào)設(shè)置測(cè)試測(cè)試開(kāi)始,在賬號(hào)輸入框中輸入賬號(hào)hubeiwangchangyou,在密碼框中輸入密碼,然后點(diǎn)擊確認(rèn)按鈕。如圖5-1所示,為輸入賬號(hào)和密碼圖5-1發(fā)送郵件程序賬號(hào)設(shè)置測(cè)試5.2發(fā)送電子郵件程序測(cè)試 在上一步已經(jīng)測(cè)試了賬號(hào)輸入,然后再收件人地址輸入框中輸入“hub

33、eigongpeng”,在郵件服務(wù)器輸入框中輸入“”。接下來(lái)在主題輸入框中輸入“測(cè)試郵件,收到勿回”,正文中輸入“測(cè)試郵件,收到勿回!”,然后添加附件“測(cè)試文件.doc”(如圖5-2),最后點(diǎn)擊發(fā)送,當(dāng)郵件發(fā)送成功會(huì)在發(fā)送旁邊返回“發(fā)送成功”的信息。如圖5-2為添加附件的界面。圖5-2發(fā)送電子郵件程序添加附件如圖5-3為測(cè)試郵件發(fā)送成功。圖5-3發(fā)送電子郵件程序主界面5.3電子郵件程序系統(tǒng)托盤測(cè)試 測(cè)試最后進(jìn)入系統(tǒng)托盤測(cè)試,點(diǎn)擊主界面的“”按鈕,然后會(huì)看到主界面在桌面上消失,在桌面左下角的任務(wù)欄里,可以找到一個(gè)類似地球的圖標(biāo)(如圖5-3),當(dāng)鼠標(biāo)移上去時(shí)會(huì)有字體顯示“CY電郵”,然后點(diǎn)擊鼠標(biāo)郵

34、件,出現(xiàn)小菜單(如圖5-4),選擇“主界面”會(huì)彈出主界面,并有提示(如圖5-5),選擇“退出程序”,程序會(huì)退出。如圖5-4所示:系統(tǒng)托盤的實(shí)現(xiàn)圖5-4電子郵件程序(cy電郵)系統(tǒng)托盤如圖5-5所示:系統(tǒng)托盤右鍵菜單圖5-5電子郵件程序系統(tǒng)托盤右鍵菜單如圖5-6所示:彈出主界面提示圖5-6電子郵件程序系統(tǒng)托盤主界面彈出提示設(shè)計(jì)小結(jié)在課程設(shè)計(jì)即將完成之際,我想向曾經(jīng)給我?guī)椭年悵蠋熀鸵黄鹩懻摰耐瑢W(xué)表示衷心的感謝。本次設(shè)計(jì)過(guò)程中遇到了很多程序上的問(wèn)題,在老師不厭其煩地指導(dǎo)和自己不斷地思考中才得以解決,然后是不停地通宵研究,編譯,拿出了刻苦的精神后,問(wèn)題也就迎刃而解了。在這兩個(gè)星期的努力中,我終于設(shè)

35、計(jì)出一個(gè)電子郵件發(fā)送系統(tǒng)并調(diào)試通過(guò),最后整理出設(shè)計(jì)報(bào)告。通過(guò)編寫(xiě)電子郵件的發(fā)送程序,我知道了java除了本來(lái)的許多包,還有需要特殊作用的擴(kuò)展包,如本系統(tǒng)用到的javamail包等,目前系統(tǒng)還不夠完整,還存在著很多的不足和不完善的地方。不過(guò)我相信隨著以后學(xué)的專業(yè)知識(shí)越來(lái)越多,我會(huì)完善這個(gè)系統(tǒng)的。在完成過(guò)程中我在托盤程序時(shí)出現(xiàn)了鼠標(biāo)點(diǎn)擊的錯(cuò)誤,在老師的幫助下我找到了錯(cuò)誤并解決了,在發(fā)送郵件時(shí)出現(xiàn)無(wú)法登陸郵件服務(wù)器錯(cuò)誤,問(wèn)了老師才知道是因?yàn)槲野l(fā)的是QQ郵箱,而本身QQ郵箱的SMTP服務(wù)器沒(méi)打開(kāi),所以我該用163郵箱發(fā)送。最后,衷心感謝在百忙之中抽出時(shí)間審閱本課程報(bào)告的陳濤老師。 參考文獻(xiàn)1謝希仁.計(jì)

36、算機(jī)網(wǎng)絡(luò).第五版M.北京:電子工業(yè)出版社,2008.12耿祥義,張躍平.Java大學(xué)實(shí)用教程.第二版M.北京:電子工業(yè)出版社,2005.53美Rogers Cadenhead. Java編程入門經(jīng)典.梅興文譯.第4版M.北京:人民郵電出版社,20074王勇,代桂平.計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)M.北京:清華大學(xué)出版社,2009.65耿祥義,張躍平.Java大學(xué)實(shí)用教程學(xué)習(xí)指導(dǎo).第二版M.北京:電子工業(yè)出版社,2005.5附錄1:SystemTrayTest類功能:該類是實(shí)現(xiàn)主界面系統(tǒng)托盤功能的類。import java.awt.AWTException;import java.awt.Image;imp

37、ort java.awt.Menu;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.Toolkit;import java.awt.TrayIcon;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.

38、event.WindowAdapter;import javax.swing.JFrame;public class SystemTrayTest extends JFrame implements ActionListener private static final long serialVersionUID = 5381564219860736835L;PopupMenu popup = new PopupMenu();MenuItem mItem = new MenuItem(賬號(hào)設(shè)置),new MenuItem(退出程序) ;SystemTray tray;TrayIcon tray

39、Icon;Image image1;Image image;boolean flag = true;MailSender inst;/public LoginDialog dlg;public SystemTrayTest() for (int i = 0; i mItem.length; i+) mItemi.addActionListener(this);popup.add(mItem0);popup.add(mItem1);if (SystemTray.isSupported() tray = SystemTray.getSystemTray();image = Toolkit.getD

40、efaultToolkit().getImage(imag/e_mail.png);image1 = Toolkit.getDefaultToolkit().getImage(imag/e_mail.png);trayIcon = new TrayIcon(image1, CY電郵, popup);trayIcon.setImageAutoSize(true);try tray.add(trayIcon); catch (AWTException e) e.printStackTrace();trayIcon.addActionListener(this);trayIcon.addMouseL

41、istener(new MouseAdapter() public void mouseClicked(MouseEvent e) if (e.getSource() = trayIcon& e.getButton() = MouseEvent.BUTTON1) if (flag) setState(1);flag = false; else setState(0);flag = true;setVisible(true););elseSystem.out.println(您的系統(tǒng)不支持托盤程序。);inst = new MailSender();inst.setLocationRelativ

42、eTo(null);inst.setBounds(400, 200, 420, 400);inst.setVisible(true);public void actionPerformed(ActionEvent e) if (e.getSource() = mItem0) trayIcon.setImage(image1);inst.setVisible(true);trayIcon.displayMessage(主界面, 已經(jīng)入主界面, TrayIcon.MessageType.WARNING); elseSystem.exit(0);public static void main(Str

43、ing args) new SystemTrayTest();附錄2:MainSender類功能:該類是為主界面類,里面包含郵件發(fā)送等主要功能import java.awt.BorderLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOption

44、Pane;import javax.swing.JSeparator;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.WindowConstants;import javax.swing.SwingUtilities;import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activat

45、ion.FileDataSource;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import ernet.InternetAddress;import javax.mail.in

46、ternet.MimeBodyPart;import ernet.MimeMessage;import ernet.MimeMultipart;import javax.swing.BorderFactory;import javax.swing.JFileChooser;import java.io.*;public class MailSender extends javax.swing.JFrame / Set Look & Feeltry javax.swing.UIManager.setLookAndFeel(com.sun.j

47、ava.swing.plaf.nimbus.NimbusLookAndFeel); catch (Exception e) e.printStackTrace();public LoginDialog dlg; / 登錄對(duì)話框public static Font fontOne;private static String attachPath;/ 附件路徑private static String mailAddr;/ 發(fā)件人郵箱地址private static String mailPwd;/ 發(fā)件人郵箱密碼public boolean loginCheck;/ 是否已登錄static Re

48、sources resources = new Resources();private JLabel fromLabel;/ 顯示發(fā)件人private JLabel jLabel2;private JButton loginJB;private JLabel attachLabel;private JLabel stateLabel;/ 郵件狀態(tài)private boolean hasAttach;/ 是否有附件private JButton attachJB;/ 添加附件private JLabel recieverLabel;private JLabel tittleLabel;privat

49、e JTextField recieverJT;/ 前面的郵箱地址private JTextField smtpJT;/ 后面的郵箱地址private JTextField tittleJT;/ 主題private JTextArea textJTA;/ 內(nèi)容private JButton sendJB;private JSeparator jSeparator1;/ 分割線private JLabel jLabel1;/* * Auto-generated main method to display this JFrame */public static void main(String

50、args) SwingUtilities.invokeLater(new Runnable() public void run() MailSender inst = new MailSender();inst.setLocationRelativeTo(null);inst.setBounds(400, 200, 420, 400);inst.setVisible(true););public MailSender() super();setBounds(0, 0, 400, 400); / 設(shè)置窗口位置和大小fontOne = new Font(null, Font.BOLD, 15);loginCheck = false;/ 未登錄/dlg = ne

溫馨提示

  • 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)論