




版權(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é)院工程名稱: 簡(jiǎn)單郵件發(fā)送客戶端 程序設(shè)計(jì) 學(xué)生姓名: 學(xué) 號(hào): 班 級(jí): 指導(dǎo)老師: 2021年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類(lèi)的功能設(shè)計(jì)33.2.1系統(tǒng)托盤(pán)類(lèi)33.2.2 賬號(hào)設(shè)置類(lèi)43.2.3 郵件發(fā)送類(lèi)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)托盤(pán)實(shí)現(xiàn)105.程序測(cè)試115.1 發(fā)送郵件程序賬號(hào)設(shè)置測(cè)試125.2發(fā)送電子
2、郵件程序測(cè)試125.3電子郵件程序系統(tǒng)托盤(pán)測(cè)試14設(shè)計(jì)小結(jié)15參考文獻(xiàn)16附錄1:SystemTrayTest類(lèi)17附錄2:MainSender類(lèi)19附錄3:LoginDialog類(lèi)281.設(shè)計(jì)概述電子郵件electronic mail,簡(jiǎn)稱E-mail,標(biāo)志:,也被大家昵稱為“伊妹兒又稱電子信箱、電子郵政,它是種用電子手段提供信息交換的通信方式。是Internet應(yīng)用最廣的效勞:通過(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)的新聞、專(zhuān)題郵件,并實(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ā)送效勞器任何一個(gè)都可以發(fā)出,并根據(jù)收信人的地址判斷對(duì)方的郵件接收效勞器而將這封信發(fā)送到該效勞器上,收信人要收取郵件也只能訪問(wèn)這個(gè)效勞器才能完成。本系統(tǒng)使用Eclipse作為開(kāi)
4、發(fā)工具,開(kāi)發(fā)一個(gè)電子郵件發(fā)送端應(yīng)用程序。系統(tǒng)實(shí)現(xiàn)的功能主要有帳號(hào)設(shè)置,發(fā)送及添加附件,托盤(pán)程序等。本例發(fā)送程序采取了與發(fā)送郵件效勞器連接實(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ì)話框;假設(shè)電子郵件發(fā)送失敗,程序?qū)⒔o出失敗的相關(guān)信息。2.電子郵件發(fā)送協(xié)議與技術(shù)2.1 SMTP協(xié)議簡(jiǎn)介及通訊模型 (SMTP:
5、Simple Mail Transfer Protocol)即簡(jiǎn)單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)那么,由它來(lái)控制信件的中轉(zhuǎn)方式。它能夠在傳送中接力傳送郵件,傳送效勞提供了進(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í)找到下一個(gè)目的地。通過(guò)
6、SMTP協(xié)議所指定的效勞器,我們就可以把Email寄到收信人的效勞器上了,整個(gè)過(guò)程只要幾分鐘。SMTP效勞器那么是遵循SMTP協(xié)議的發(fā)送郵件效勞器,用來(lái)發(fā)送或中轉(zhuǎn)你發(fā)出的電子郵件。SMTP 是一種提供可靠且有效電子郵件傳輸?shù)膮f(xié)議。SMTP是建模在 FTP 文件傳輸效勞上的一種郵件效勞,主要用于傳輸系統(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ī)、防火墻分隔的 TCP
7、/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ī)。域名效勞系統(tǒng)DNS的郵件交換效勞器可以用來(lái)識(shí)別出傳輸郵件的下一跳 IP 地址。SMTP在傳輸文件過(guò)程中使用25號(hào)端口。可大致用下面的圖2-1來(lái)表示。用戶發(fā)送SMTP文件系統(tǒng)接收SMTP文件系統(tǒng)SMTP命令郵件內(nèi)容 應(yīng)答 圖2-1 SMTP通信模型2.2 Java Mail API介紹一般情況下,在
8、eclipse中,電子郵件程序的編寫(xiě)是主要是利用Java jdk1.7擴(kuò)展包JavaMailAPI等及相關(guān)的SMTP等通信協(xié)議來(lái)實(shí)現(xiàn)的。隨著現(xiàn)代軟件業(yè)的開(kāi)展,java提供了方便、簡(jiǎn)易、與效勞器無(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。而不是像sendmail或者其它的郵
9、件傳輸代理Mail Transfer Agent,簡(jiǎn)稱MTA程序那樣可以傳送、遞送、轉(zhuǎn)發(fā)郵件。從另外一個(gè)角度來(lái)看,我們這些電子郵件用戶日常用MUA程序來(lái)讀寫(xiě)郵件,而MUA依賴著MTA處理郵件的遞送。JavaMail核心類(lèi):Session、Message、Address、Authenticator、Transport、Store、Folder。Session類(lèi):定義了根本的郵件會(huì)話。就像 會(huì)話那樣,我們進(jìn)行收發(fā)郵件的工作都是基于這個(gè)會(huì)話的。Session對(duì)象利用了java.util.Properties對(duì)象獲得了郵件效勞器、用戶名、密碼信息和整個(gè)應(yīng)用程序都要使用到的共享信息。Message類(lèi):當(dāng)
10、我們建立了Session對(duì)象后,便可以被發(fā)送的構(gòu)造信息體了。在這里SUN提供了Message類(lèi)型來(lái)幫助開(kāi)發(fā)者完成這項(xiàng)工作。由于Message是一個(gè)抽象類(lèi),大多數(shù)情況下,我們使用ernet.MimeMessage這個(gè)子類(lèi),該類(lèi)是使用MIME類(lèi)型、MIME信息頭的郵箱信息。信息頭只能使用US-ASCII字符,而非ASCII字符將通過(guò)編碼轉(zhuǎn)換為ASCII的方式使用。Address類(lèi):到這里,我們已經(jīng)建立了Session和Message,下面將介紹如何使用郵件地址類(lèi):Address。像Message一樣,Address類(lèi)也是一個(gè)抽象類(lèi),所以我們將使用javax.mail.i
11、nternet.InternetAddress這個(gè)子類(lèi)。Authenticator類(lèi):像類(lèi)那樣,JavaMail API通過(guò)使用授權(quán)者類(lèi)Authenticator以用戶名、密碼的方式訪問(wèn)那些受到保護(hù)的資源,在這里“資源就是指郵件效勞器。在javax.mail包中可以找到這個(gè)JavaMail的授權(quán)者類(lèi)Authenticator。Transport類(lèi):在發(fā)送信息時(shí),Transport類(lèi)將被用到。這個(gè)類(lèi)實(shí)現(xiàn)了發(fā)送信息的協(xié)議通稱為SMTP,此類(lèi)是一個(gè)抽象類(lèi),我們可以使用這個(gè)類(lèi)的靜態(tài)方法send()來(lái)發(fā)送消息:Transport.send(message);Store和Folder類(lèi):接收郵件和發(fā)送郵件
12、很類(lèi)似都要用到Session。但是在獲得Session后,我們需要從Session中獲取特定類(lèi)型的Store,然后連接到Store,這里的Store代表了存儲(chǔ)郵件的郵件效勞器。在連接Store的過(guò)程中,極有可能需要用到用戶名、密碼或者Authenticator。3.郵件發(fā)送客戶端程序總體設(shè)計(jì)3.1系統(tǒng)模塊結(jié)構(gòu)電子郵件客戶端主要由以下三個(gè)模塊構(gòu)成:發(fā)送郵件模塊、系統(tǒng)托盤(pán)模塊、賬號(hào)設(shè)置模塊。其功能模塊如圖3-1所示:電子郵件發(fā)送端程序發(fā)送郵件賬號(hào)設(shè)置系統(tǒng)托盤(pán) 1發(fā)送郵件模塊:發(fā)送郵件,并可以添加附件。2賬號(hào)設(shè)置模塊:對(duì)發(fā)送方電子郵件賬號(hào)進(jìn)行設(shè)置。 3系統(tǒng)托盤(pán)模塊:在任務(wù)欄可以使程序有托盤(pán)功能。 3
13、.2類(lèi)的功能設(shè)計(jì) 3.2.1系統(tǒng)托盤(pán)類(lèi)Class SystemTrayTest/該類(lèi)為系統(tǒng)托盤(pán)類(lèi),為了實(shí)現(xiàn)郵件程序的托盤(pán)功能。PopupMenu popup = new PopupMenu(); /系統(tǒng)托盤(pán)菜單數(shù)組。 MenuItem mItem = new MenuItem("賬號(hào)設(shè)置"),new MenuItem("退出程序") ; /點(diǎn)擊鼠標(biāo)郵件的菜單數(shù)組SystemTray tray;表示桌面的系統(tǒng)托盤(pán)對(duì)象。TrayIcon trayIcon; / TrayIcon 對(duì)象表示可以添加到系統(tǒng)托盤(pán)的托盤(pán)圖標(biāo)。TrayIcon 可以包含工具提示文本、圖
14、像、彈出菜單和一組與之關(guān)聯(lián)的偵聽(tīng)器。 MailSender inst; /表示創(chuàng)立一個(gè)郵件發(fā)送類(lèi)。public SystemTrayTest() /該方法表示一個(gè)托盤(pán)類(lèi)的構(gòu)造。public void actionPerformed(ActionEvent e) /該方法表示鼠標(biāo)觸發(fā)事件,其中的參數(shù)為監(jiān)視器變量。3.2.2 賬號(hào)設(shè)置類(lèi)Class LoginDialog/該類(lèi)為賬號(hào)設(shè)置類(lèi),主要實(shí)現(xiàn)了郵件系統(tǒng)的賬號(hào)功能。public static MailSender ms; /表示創(chuàng)立一個(gè)郵件發(fā)送類(lèi)。private JLabel pwdLabel; /表示創(chuàng)立用戶密碼的短文本字符串的顯示區(qū)。pri
15、vate 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è)置類(lèi)的一個(gè)構(gòu)造private void initGUI() /該方法表示一個(gè)圖形界面的初始化。private void logonJBMouseEntered(MouseEvent
16、 evt)/該方法以及接后的幾個(gè)類(lèi)似的方法都表示鼠標(biāo)觸發(fā)事件。3.2.3 郵件發(fā)送類(lèi)Class MailSender/該類(lèi)為郵件發(fā)送類(lèi),主要是實(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 JLabel fromLabel; / 顯示發(fā)件
17、人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;/ 內(nèi)容private JSeparat
18、or 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(ActionEvent evt)/添加附件的方法4.功能模
19、塊的實(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)立類(lèi)MailSender.首先,創(chuàng)立MailSender類(lèi),此類(lèi)繼承javax.swing.JFrame類(lèi)。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è)圖形界面,有輸入框,輸入監(jiān)視器,還有各個(gè)按鈕等。
20、方便用戶可以使用系統(tǒng)。圖4-1 圖形界面的創(chuàng)立與實(shí)現(xiàn)圖4.2賬號(hào)設(shè)置功能實(shí)現(xiàn)在賬號(hào)設(shè)置時(shí)新建一個(gè)類(lèi),此類(lèi)包含了GUI,鼠標(biāo)觸發(fā)事件,以及賬號(hào)名,密碼與郵件效勞器的驗(yàn)證。在用戶輸入賬號(hào)時(shí)會(huì)進(jìn)行賬號(hào)名檢測(cè),查看輸入的賬號(hào)格式是否有誤,假設(shè)有誤,那么返回重新輸入。賬號(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í)與郵件效勞器驗(yàn)證等待發(fā)送圖4-2 賬號(hào)設(shè)置流程圖局部此類(lèi)代碼如下:private void initGUI() try this.setTitle(&qu
21、ot;賬號(hào)設(shè)置");getContentPane().setLayout(null);this.setBounds(450, 250, 300, 200);private String smtpAddressConfirm(String smtpAddr) if (smtpAddr.contains(" ") if (smtpAddr.contains("163") smtpAddr = "smtp.163 " else if (smtpAddr.contains("qq") smtpAddr = &qu
22、ot;smtp.qq " else return "not include" else return "not include"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效勞器進(jìn)行驗(yàn)證返回失敗信息驗(yàn)證失敗驗(yàn)證成功獲取發(fā)件人賬號(hào)和密碼傳入效勞器發(fā)送郵件輸出對(duì)話框:發(fā)送成功返回失敗信息發(fā)送失敗發(fā)送成功圖4-3 郵件發(fā)送流程圖1獲取收件人賬號(hào),并設(shè)置SMTP郵件效勞器程序會(huì)檢測(cè)輸入賬號(hào)合法性。 關(guān)鍵代碼: String to = r
23、ecieverJT.getText().trim() + ""+ smtpJT.getText().trim();/ 獲得收件人地址System.out.println(to);String subject = tittleJT.getText();String body = textJTA.getText();Properties props = System.getProperties();/ 設(shè)置SMTP郵件效勞器:String smtpAddr = smtpAddressConfirm(smtpJT.getText();if ("not include&q
24、uot; = smtpAddr) JOptionPane.showMessageDialog(null, "無(wú)法解析郵箱地址!");jLabel1.setIcon(resources.error);System.out.println(smtpAddr);props.put("mail.smtp.host", smtpAddr);props.setProperty("mail.smtp.port", "25");/ SMTP效勞器需要驗(yàn)證:props.put("toco
25、l", "smtp");props.put("mail.smtp.starttls.enable", "true");props.put("mail.smtp.auth", "true");2)獲取賬號(hào)設(shè)置界面中用戶輸入的賬號(hào)和密碼傳入效勞器,然后創(chuàng)立一封新郵件。關(guān)鍵代碼:/ 傳入用戶名和口令:Session session = Session.getDefaultInstance(props,new PasswordAuthenticator(mailAddr, mailPwd);s
26、ession.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(body);msg.setSentDate(new Date();3)郵件發(fā)送以及發(fā)送失敗的詳細(xì)信息和原因。關(guān)鍵代碼:MimeBodyPart mbp1
27、 = new MimeBodyPart();mbp1.attachFile("sss");Multipart multi = new MimeMultipart();FileDataSource fds = new FileDataSource(attachPath);mbp1.setDataHandler(new DataHandler(fds);mbp1.setFileName(attachLabel.getText();multi.addBodyPart(mbp1);msg.setContent(multi);msg.saveChanges();Transport.s
28、end(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ā)送失敗的原因是:" + ex.getMes
29、sage();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);chooser.
30、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();
31、attachLabel.setIcon(resources.attach);attachLabel.setText(chooser.getSelectedFile().getName();this.setIconImage(resources.mail_attachment.getImage();this.hasAttach = true; / 有附件4.5系統(tǒng)托盤(pán)實(shí)現(xiàn)系統(tǒng)托盤(pán)流程圖如圖4-5,功能為當(dāng)用戶點(diǎn)擊close鍵時(shí),本系統(tǒng)最小化到托盤(pán),然后當(dāng)用戶雙擊托盤(pán)圖標(biāo)時(shí)又出現(xiàn)主界面。用戶點(diǎn)擊關(guān)閉按鈕時(shí)本系統(tǒng)最小到系統(tǒng)托盤(pán)鼠標(biāo)點(diǎn)擊雙擊點(diǎn)擊右鍵選擇賬號(hào)設(shè)置主界面出現(xiàn)點(diǎn)擊右鍵選擇退出程序退出程序賬號(hào)
32、設(shè)置界面出現(xiàn)圖4-5 系統(tǒng)托盤(pán)流程圖 在本程序中添加了系統(tǒng)托盤(pán)功能,使用了jdk1.6中新增加的類(lèi)Systemtray和TrayIcon類(lèi)創(chuàng)立系統(tǒng)托盤(pán),并在托盤(pán)上增加了鼠標(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) s
33、etState(1);flag = false; else setState(0);flag = true;setVisible(true);5.程序測(cè)試現(xiàn)在,以發(fā)送如下的一封帶附件的郵件來(lái)進(jìn)行功能測(cè)試。收件人:hubeigongpeng163 發(fā)件人:hubeiwangchangyou163 郵件主題:測(cè)試郵件,收到勿回郵件內(nèi)容:測(cè)試郵件,收到勿回附件:測(cè)試文件.doc5.1 發(fā)送郵件程序賬號(hào)設(shè)置測(cè)試測(cè)試開(kāi)始,在賬號(hào)輸入框中輸入賬號(hào)hubeiwangchangyou163 ,在密碼框中輸入密碼,然后點(diǎn)擊確認(rèn)按鈕。如圖5-1所示,為輸入賬號(hào)和密碼圖5-1發(fā)送郵件程序賬號(hào)設(shè)置測(cè)試5.2發(fā)送電子郵
34、件程序測(cè)試 在上一步已經(jīng)測(cè)試了賬號(hào)輸入,然后再收件人地址輸入框中輸入“hubeigongpeng,在郵件效勞器輸入框中輸入“163 。接下來(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)托盤(pán)測(cè)試 測(cè)試最后進(jìn)入系統(tǒng)托盤(pán)測(cè)試,點(diǎn)擊主界面的“按鈕,然后會(huì)看到主界面在桌面上消失,在桌面左下角的任務(wù)欄里,可以找到一個(gè)類(lèi)似地球的圖標(biāo)如圖
35、5-3,當(dāng)鼠標(biāo)移上去時(shí)會(huì)有字體顯示“CY電郵,然后點(diǎn)擊鼠標(biāo)郵件,出現(xiàn)小菜單如圖5-4,選擇“主界面會(huì)彈出主界面,并有提示如圖5-5,選擇“退出程序,程序會(huì)退出。如圖5-4所示:系統(tǒng)托盤(pán)的實(shí)現(xiàn)圖5-4電子郵件程序cy電郵系統(tǒng)托盤(pán)如圖5-5所示:系統(tǒng)托盤(pán)右鍵菜單圖5-5電子郵件程序系統(tǒng)托盤(pán)右鍵菜單如圖5-6所示:彈出主界面提示圖5-6電子郵件程序系統(tǒng)托盤(pán)主界面彈出提示設(shè)計(jì)小結(jié)在課程設(shè)計(jì)即將完成之際,我想向曾經(jīng)給我?guī)椭年悵蠋熀鸵黄鹩懻摰耐瑢W(xué)表示衷心的感謝。本次設(shè)計(jì)過(guò)程中遇到了很多程序上的問(wèn)題,在老師不厭其煩地指導(dǎo)和自己不斷地思考中才得以解決,然后是不停地通宵研究,編譯,拿出了刻苦的精神后,問(wèn)題也
36、就迎刃而解了。在這兩個(gè)星期的努力中,我終于設(shè)計(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é)的專(zhuān)業(yè)知識(shí)越來(lái)越多,我會(huì)完善這個(gè)系統(tǒng)的。在完成過(guò)程中我在托盤(pán)程序時(shí)出現(xiàn)了鼠標(biāo)點(diǎn)擊的錯(cuò)誤,在老師的幫助下我找到了錯(cuò)誤并解決了,在發(fā)送郵件時(shí)出現(xiàn)無(wú)法登陸郵件效勞器錯(cuò)誤,問(wèn)了老師才知道是因?yàn)槲野l(fā)的是QQ郵箱,而本身QQ郵箱的SMTP效勞器沒(méi)翻開(kāi),所以我該用163郵箱發(fā)送。最后,衷心感謝在百忙之中抽出時(shí)間審閱
37、本課程報(bào)告的陳濤老師。 參考文獻(xiàn)1謝希仁.計(jì)算機(jī)網(wǎng)絡(luò).第五版M.北京:電子工業(yè)出版社,2021.12耿祥義,張躍平.Java大學(xué)實(shí)用教程.第二版M.北京:電子工業(yè)出版社,2005.53美Rogers Cadenhead. Java編程入門(mén)經(jīng)典.梅興文譯.第4版M.北京:人民郵電出版社,20074王勇,代桂平.計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)M.北京:清華大學(xué)出版社,2021.65耿祥義,張躍平.Java大學(xué)實(shí)用教程學(xué)習(xí)指導(dǎo).第二版M.北京:電子工業(yè)出版社,2005.5附錄1:SystemTrayTest類(lèi)功能:該類(lèi)是實(shí)現(xiàn)主界面系統(tǒng)托盤(pán)功能的類(lèi)。import java.awt.AWTException;imp
38、ort java.awt.Image;import 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.Mouse
39、Event;import java.awt.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(&q
40、uot;退出程序") ;SystemTray tray;TrayIcon trayIcon;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() tra
41、y = SystemTray.getSystemTray();image = Toolkit.getDefaultToolkit().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 (
42、AWTException e) e.printStackTrace();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; else setState(0);flag = true;setVisi
43、ble(true););elseSystem.out.println("您的系統(tǒng)不支持托盤(pán)程序。");inst = new MailSender();inst.setLocationRelativeTo(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);trayIc
44、on.displayMessage("主界面", "已經(jīng)入主界面", TrayIcon.MessageType.WARNING); elseSystem.exit(0);public static void main(String args) new SystemTrayTest();附錄2:MainSender類(lèi)功能:該類(lèi)是為主界面類(lèi),里面包含郵件發(fā)送等主要功能import java.awt.BorderLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.a
45、wt.event.ActionListener;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JSeparator;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.WindowConstants;import j
46、avax.swing.SwingUtilities;import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Password
47、Authentication;import javax.mail.Session;import javax.mail.Transport;import ernet.InternetAddress;import ernet.MimeBodyPart;import ernet.MimeMessage;import ernet.MimeMultipart;import javax.swing.BorderFactory;import javax.swing.JFileChooser;imp
48、ort java.io.*;public class MailSender extends javax.swing.JFrame / Set Look & Feeltry javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); catch (Exception e) e.printStackTrace();public LoginDialog dlg; / 登錄對(duì)話框public static Font fontOne;private stat
49、ic String attachPath;/ 附件路徑private static String mailAddr;/ 發(fā)件人郵箱地址private static String mailPwd;/ 發(fā)件人郵箱密碼public boolean loginCheck;/ 是否已登錄static Resources resources = new Resources();private JLabel fromLabel;/ 顯示發(fā)件人private JLabel jLabel2;private JButton loginJB;private JLabel attachLabel;private JL
50、abel stateLabel;/ 郵件狀態(tài)private boolean hasAttach;/ 是否有附件private JButton attachJB;/ 添加附件private JLabel recieverLabel;private JLabel tittleLabel;private JTextField recieverJT;/ 前面的郵箱地址private JTextField smtpJT;/ 后面的郵箱地址private JTextField tittleJT;/ 主題private JTextArea textJTA;/ 內(nèi)容private JButton sendJB
51、;private JSeparator jSeparator1;/ 分割線private JLabel jLabel1;/* * Auto-generated main method to display this JFrame */public static void main(String 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 = new LoginDialog(t
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年股份質(zhì)押擔(dān)保借款合同范本
- 軌道交通線網(wǎng)云平臺(tái)系統(tǒng)用戶需求書(shū)-中心部分網(wǎng)絡(luò)安全專(zhuān)用技術(shù)要求
- 2025酒店管理承包合同模板
- 2025廢舊鋼材購(gòu)銷(xiāo)合同范本
- 2025店面轉(zhuǎn)讓合同樣本
- 2025上海市空氣凈化設(shè)備維護(hù)保養(yǎng)合同
- 2025雇傭離職人員的勞務(wù)合同
- 2025年三資企業(yè)承包經(jīng)營(yíng)合同范本
- 2025版終止房屋租賃合同范本
- 2025建筑工程分包合同(2)
- 《生物冶金》課程教學(xué)大綱
- DB22-T 5118-2022 建筑工程資料管理標(biāo)準(zhǔn)
- 工程地質(zhì)測(cè)繪ppt版(共61頁(yè))
- 水文地質(zhì)與工程地質(zhì)勘察工程地質(zhì)測(cè)繪PPT
- 崩塌易發(fā)程度數(shù)量化評(píng)分表
- 年產(chǎn)10000噸耐高溫α-淀粉酶發(fā)酵車(chē)間設(shè)計(jì)
- 蒙蒂 《 查爾達(dá)什舞曲 》 小提琴曲譜+鋼琴伴奏譜
- 機(jī)組黑啟動(dòng)方案
- 平衡計(jì)分卡及戰(zhàn)略地圖
- 《觀潮》學(xué)歷案案例
- 附件:湖北省重點(diǎn)水利水電工程施工招標(biāo)投標(biāo)評(píng)分標(biāo)準(zhǔn)-鄂水
評(píng)論
0/150
提交評(píng)論