版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
用Java做郵件服務(wù)器【摘要】Java是一種跨平臺,適合于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言。具體來說,它具有如下特性:簡單性、面向?qū)ο?、分布式、解釋型、可靠、安全、平臺無關(guān)、可移植、高性能、多線程、動態(tài)性等。Java始于網(wǎng)絡(luò),服務(wù)于網(wǎng)絡(luò),用Java做的網(wǎng)絡(luò)程序,隨處可見,這里我就不多做介紹了,下面給大家介紹一種用Java實現(xiàn)的GUI界面的郵件收發(fā)系統(tǒng)。本文是一篇入門級教程,主要講了1)利用Eclipse這個優(yōu)秀的JavaIDE中創(chuàng)建應(yīng)用程序界面;2〕利用J2EE的API構(gòu)建自己的郵件收發(fā)系統(tǒng)。要求您對JavaMail和JavaBeans和GUI的一些相關(guān)知識。所用到的工具包括Eclipse〔是一個JAVAIDE〕、j2ee.jar〔里面包含了所用的關(guān)于mail的API〕、jigloo312.zip〔提供一個用戶可定制GUI的JAVAAPI可到://cloudgarden/jigloo/index.html下載〕【簡介】在介紹本文之前,需要先簡介一下郵件服務(wù)的一些基本概念,以期更好的理解本文。在一個目前常用的郵件系統(tǒng)中,收發(fā)郵件功能的實現(xiàn)是通過不同的協(xié)議實現(xiàn)的,收郵件一般采用POP〔PostOfficeProtocol〕協(xié)議,即郵局協(xié)議,目前所用的版本是3,所以人們通常稱之為POP3,。該協(xié)議定義了接收郵件的機制,并規(guī)定每個用戶只能有一個郵箱的支持。占用端口一般為25;發(fā)郵件一般采用SMTP〔SimpleMailTransferProtocol〕協(xié)議,即簡單郵件傳輸協(xié)議,它定義了發(fā)送電子郵件的機制,通過它程序?qū)⒑湍墓净蛞蛱鼐W(wǎng)服務(wù)供給商的〔InternetServiceProvider's,ISP's〕SMTP服務(wù)器通信。SMTP服務(wù)器可將消息中轉(zhuǎn)至接收方SMTP服務(wù)器,以便最終讓用戶經(jīng)由POP或IMAP獲得。占用端口一般為110;通過程序?qū)崿F(xiàn)這兩個協(xié)議,我們就可以構(gòu)建自己企業(yè)的郵件收發(fā)系統(tǒng)?!娟P(guān)鍵字】JavaMailJ2EEGUIEclipsePOPSMTP還在為沒有一個統(tǒng)一,兼容于任何平臺的郵件收發(fā)系統(tǒng)而著急嗎?不用急,這篇文章可以給您敲開一扇開發(fā)適合自己企業(yè)業(yè)務(wù)環(huán)境的郵件收發(fā)系統(tǒng)的大門!一,開發(fā)準(zhǔn)備從下載Eclipse,我所用的版本為,大家可以下3.0.2或更高;從://cloudgarden/jigloo/index.html下載jigloo312.zip壓縮包,將解壓后的plugins和features兩個文件夾的內(nèi)容分別拷貝到eclipse包含的plusins和features文件夾里。在本地新建一個文件夾〔如:d:\java\develop〕做為java開發(fā)的工作區(qū),然后,在桌面新建一個eclipse.exe的快捷方式,右鍵點擊“屬性”,在“目標(biāo)”欄里輸入D:\eclipse\eclipse.exe-vm"G:\Java\jdk\bin\javaw.exe"-data"d:\java\develop",以后你在eclipse創(chuàng)建的程序都在d:\java\develop這個目錄下了。如果還有其他項目的開發(fā),可以在重新創(chuàng)建一個文件夾和eclipse.exe的快捷方式,重新指定工作區(qū),相當(dāng)于又做了一個全新的Eclipse環(huán)境。二,環(huán)境搭建A.1從桌面打開新建的eclipse快捷方式,新建一個java項目:輸入項目名:javamail,然后Next->Finish。2,右鍵點擊新建的“javamail”項目,選擇“Properties”,選擇“JavaBuildPath”,在“Library”里選擇“AddExternalJARs”,將準(zhǔn)備的j2ee.jar文件添加到里面,如圖:好了,所有準(zhǔn)備工作都做好了,下面開始開發(fā)。三,開始開發(fā)A,發(fā)送郵件A.1在javamail項目里新建一個Package名為“”,然后新建一個“Swingmainapplication”:“Next”->輸入類名:SendMailGUI->“Finish”。A.2利用可拖拽的可視化面板繪制一個發(fā)送郵件的GUI界面〔界面功夫這里就不壘述了,后面有關(guān)界面的制作也都不作詳細(xì)說明了,本文重點不在與此。有關(guān)GUI的知識請參見相關(guān)資料?!常篈.3郵件能夠發(fā)送成功,關(guān)鍵在于這個“發(fā)送”按鈕的動作的編寫。A.5放著,備用。首先我們要做一個bean,取名為Mail,用來存儲郵件的所有信息,之所以這樣做,是為了將郵件的信息都封裝到一個java類里,更容易管理,思路更明確,同時也是為了讓讀者比較容易明白這個功能應(yīng)該怎樣實現(xiàn)。在這個mailbean里我們設(shè)置了smtpServer、userName、password、from、to、subject、fileName、body以及popServer、popUser、popPassword幾個變量,分別用來存儲SMTP服務(wù)器地址、郵件的用戶名、密碼、從何而來要到哪去、郵件標(biāo)題、附件的名字、正文以及POP服務(wù)器的地址、用戶和其密碼。在Eclipse里完成這個bean很簡單:新建一個java類,定義上述變量〔StringsmtpServer,userName,password…〕,然后選中這些變量,擊右鍵->Source->GenerateGettersandSetters…,Eclipse會自動生成這些變量的get/set方法。保存這個類,入正題,編寫send的功能代碼。A.6逐步講解MailSender.java:i.定義SMTP服務(wù)器上的相關(guān)信息:StringsmtpServer=sendMail.getSmtpServer();Stringto=sendMail.getTo();Stringfrom=sendMail.getFrom();Stringsubject=sendMail.getSubject();Stringbody=sendMail.getBody();StringfileName=fileName=sendMail.getFileName();ii,定義一個Properties對象,并填充它:Propertiesprops=System.getProperties();props.setProperty("mail.smtp.host",smtpServer);props.setProperty("mail.smtp.port","25");props.put("mail.smtp.auth","true");props.setProperty("mail.smtp.user",username);iii,創(chuàng)建一個Authenticator的子類CheckAuthenticator,并向Session中注冊:CheckAuthenticatorauth=newCheckAuthenticator();Sessionsession=Session.getDefaultInstance(props,auth);iv,創(chuàng)建一個Message:Messagemsg=newMimeMessage(session);iiv,創(chuàng)建郵件正題,里面的if(!fileName.equals(""))是做了一個是否包含附件的判斷,如果沒有,就只把正文做為Message的內(nèi)容發(fā)送出去;如果有,就把附件和正文內(nèi)容一并發(fā)送:try{BodyPartbp=newMimeBodyPart();Multipartmp=newMimeMultipart();bp.setText(body);//增加正文內(nèi)容到bodypartmp.addBodyPart(bp);if(!fileName.equals("")){bp=newMimeBodyPart();FileDataSourcefileSource=newFileDataSource(fileName);bp.setDataHandler(newDataHandler(fileSource));bp.setFileName(fileSource.getName());mp.addBodyPart(bp);}msg.setContent(mp);}catch(Exceptione){System.err.println("增加郵件附件:"+fileName+"發(fā)生錯誤!"+e);}vii,發(fā)送Transport.send(msg);具體源代碼〔MailSender.java〕如下:/**Createdon2005-5-19**TODOTochangethetemplateforthisgeneratedfilegoto*Window-Preferences-Java-CodeStyle-CodeTemplates*/packagecom.leeyoung.jmail.send;importjava.security.Security;importjava.util.Date;importjava.util.Properties;importjava.util.StringTokenizer;importjavax.activation.DataHandler;importjavax.activation.FileDataSource;importjavax.mail.BodyPart;importjavax.mail.Message;importjavax.mail.Multipart;importjavax.mail.Session;importjavax.mail.Transport;importernet.InternetAddress;importernet.MimeBodyPart;importernet.MimeMessage;importernet.MimeMultipart;importcom.leeyoung.jmail.bean.Mail;/***@authorCYY**TODOTochangethetemplateforthisgeneratedtypecommentgotoWindow-*Preferences-Java-CodeStyle-CodeTemplates*/publicclassMailSender{/***@paramsmtpServer*@paramto*@paramfrom*@paramsubject*@parambody*/publicvoidsend(MailsendMail){StringsmtpServer=sendMail.getSmtpServer();Stringto=sendMail.getTo();Stringfrom=sendMail.getFrom();Stringsubject=sendMail.getSubject();Stringbody=sendMail.getBody();StringfileName=fileName=sendMail.getFileName();try{Security.addProvider(newernal.ssl.Provider());//--GetaPropertiesobject--Propertiesprops=System.getProperties();props.setProperty("mail.smtp.host",smtpServer);props.setProperty("mail.smtp.port","25");props.put("mail.smtp.auth","true");StringTokenizerst=newStringTokenizer(from,"@");Stringusername=st.nextToken();props.setProperty("mail.smtp.user",username);CheckAuthenticatorauth=newCheckAuthenticator();Sessionsession=Session.getDefaultInstance(props,auth);//--Createanewmessage--Messagemsg=newMimeMessage(session);//--SettheFROMandTOfields--msg.setFrom(newInternetAddress(from));msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to,false));msg.setSubject(subject);//下面不設(shè)郵件正文msg.setText(body),msg.setSentDate(newDate());//Judgethemailincludeaaffix,ifhave,sendit;ifnone,sendthemailbodyonly;System.out.println("開始增加郵件附件:"+fileName);try{BodyPartbp=newMimeBodyPart();Multipartmp=newMimeMultipart();bp.setText(body);//增加正文內(nèi)容到bodypartmp.addBodyPart(bp);if(!fileName.equals("")){bp=newMimeBodyPart();FileDataSourcefileSource=newFileDataSource(fileName);bp.setDataHandler(newDataHandler(fileSource));bp.setFileName(fileSource.getName());mp.addBodyPart(bp);}msg.setContent(mp);}catch(Exceptione){System.err.println("增加郵件附件:"+fileName+"發(fā)生錯誤!"+e);}//--sendthemessage--Transport.send(msg);System.out.println("MessagesendOK.");}catch(Exceptionex){ex.printStackTrace();}}}A.7為了實現(xiàn)郵件的權(quán)限認(rèn)證,我們需要做一個身份驗證的模塊CheckAuthenticator,這個類從Authenticator〔抽象類〕繼承而來,要使用Authenticator,先創(chuàng)建該抽象類的子類,并從getPasswordAuthentication〔〕方法中返回PasswordAuthentication實例。創(chuàng)建完成后,必需向session注冊該Authenticator。這樣,在需要認(rèn)證的時候,就會通知Authenticator。您可以通過JOptionPane來彈出窗口,這里使用Input對話框得到密碼,具體應(yīng)用中可以使用JPasswordField來實現(xiàn)〔這個不是本文重點,關(guān)于Swing的內(nèi)容請參看相關(guān)資料〕。/**Createdon2005-5-18**TODOTochangethetemplateforthisgeneratedfilegoto*Window-Preferences-Java-CodeStyle-CodeTemplates*/packagecom.leeyoung.jmail.send;importjava.util.Properties;importjavax.mail.Authenticator;importjavax.mail.PasswordAuthentication;importjavax.mail.Session;importjavax.swing.JOptionPane;/***@authorCYY**TODOTochangethetemplateforthisgeneratedtypecommentgoto*Window-Preferences-Java-CodeStyle-CodeTemplates*/publicclassCheckAuthenticatorextendsAuthenticator{publicPasswordAuthenticationgetPasswordAuthentication(){StringuserName,password;Propertiesprops=System.getProperties();Sessionsession=Session.getInstance(props);userName=session.getProperty("mail.smtp.user");password=JOptionPane.showInputDialog("Enteryourpassword:");returnnewPasswordAuthentication(userName,password);}}A.8回到SendMailGUI.java中,給send這個按鈕添加動作實現(xiàn)代碼:privatevoidsendActionPerformed(ActionEventevt){/*addbychaoyang***Purpose:Thisisafuncationmodel.*/System.out.println("開始發(fā)送郵件......");MailsendMail=newMail();try{smtpServer_value=smtpAddress.getText();to_value=receiverField.getText();from_value=senderField.getText();subject_value=subjectField.getText();affixFileName_value=affixField.getText();body_value=bodyArea.getText();if(smtpServer_value!=null&&to_value!=null&&from_value!=null&&subject_value!=null&&body_value!=null){System.out.println(smtpServer_value+to_value+from_value+subject_value+body_value);sendMail.setSmtpServer(smtpServer_value);sendMail.setTo(to_value);sendMail.setFrom(from_value);sendMail.setSubject(subject_value);jLabel.setText("從"+from_value+"發(fā)往"+to_value+"注意輸入密碼...");if(affixFileName_value!=null){sendMail.setFileName(affixFileName_value);}sendMail.setBody(body_value);MailSendermailSender=newMailSender();mailSender.send(sendMail);jLabel.setText("發(fā)送成功!");}}catch(Exceptione){e.printStackTrace();}}A.9至此,這個GUI界面的郵件發(fā)送器完整做完了,它可以象在網(wǎng)易郵箱上發(fā)送郵件一樣發(fā)送帶附件的郵件。B,接收郵件“”,然后新建一個“Swingmainapplication”:“Next”->輸入類名:ReceiveMailGUI->“Finish”。B.2同法炮制,利用可拖拽的可視化面板繪制一個接收郵件的GUI界面:B.3對按鈕“接收”編寫動作實現(xiàn)代碼:privatevoidreceiveButtonActionPerformed(ActionEventevt){//reveiceyourmail:MailreceiveMail=newMail();//此處依然用到前面所做的MailBeantry{StringTokenizerst=newStringTokenizer(mailAddressField.getText(),"@");StringpopUser=st.nextToken();StringpopServer="pop."+st.nextToken();popserver.setText("用戶"+popUser+",您所使用的郵件接收服務(wù)器是:"+popServer);StringpopPassword=String.valueOf(passwordField.getPassword());if(popPassword==null){JOptionPane.showMessageDialog(null,"您沒有輸入密碼!");}if(popServer!=null&&popUser!=null&&popPassword!=null){receiveMail.setPopServer(popServer);receiveMail.setPopUser(popUser);receiveMail.setPopPassword(popPassword);//這里用到了一個receive方法,其參數(shù)是一個Mail對象,后面會給定義receive(receiveMail);}}catch(Exceptione){e.printStackTrace();}}B.4“接收”動作實現(xiàn)方法receiveButtonActionPerformed中用到的receive〔MailreceiveMail〕方法內(nèi)容如下://receivemailFunction/***@parampopServer*@parampopUser*@parampopPassword*/publicvoidreceive(MailreceiveMail){StringpopServer=receiveMail.getPopServer();StringpopUser=receiveMail.getPopUser();StringpopPassword=receiveMail.getPopPassword();Storestore=null;Folderfolder=null;try{Propertiesprops=System.getProperties();Sessionsession=Session.getDefaultInstance(props,null);store=session.getStore("pop3");store.connect(popServer,popUser,popPassword);folder=store.getDefaultFolder();if(folder==null)thrownewException("Nodefaultfolder");folder=folder.getFolder("INBOX");if(folder==null)thrownewException("NoPOP3INBOX");folder.open(Folder.READ_ONLY);Message[]msgs=folder.getMessages();for(intmsgNum=0;msgNum<msgs.length;msgNum++){printMessage(popServer,msgs[msgNum]);}}catch(Exceptionex){ex.printStackTrace();}finally{try{if(folder!=null)folder.close(false);if(store!=null)store.close();}catch(Exceptionex2){ex2.printStackTrace();}}}B.5receive方法中調(diào)用的printMessage僅僅是為了將一些郵件信息反映到GUI界面上,這里就不再詳解了,代碼如下://print/***@parammessage*/publicvoidprintMessage(StringpopServer,Messagemessage){//TODOAuto-generatedmethodstubtry{Stringfrom=((InternetAddress)message.getFrom()[0]).getPersonal();if(from==null)from=((InternetAddress)message.getFrom()[0]).getAddress();statusLable.setText("成功從"+popServer+"接收到郵件!");mailFrom.setText(from+"<"+String.valueOf(message.getFrom()[0])+">");Stringsubject=message.getSubject();this.subject.setText(subject);PartmessagePart=message;Objectcontent=messagePart.getContent();if(contentinstanceofMultipart){messagePart=((Multipart)content).getBodyPart(0);}StringcontentType=messagePart.getContentType();if(contentType.startsWith("text/plain")||contentType.startsWith("text/html")){this.contentType.setText("文本");InputStreamis=messagePart.getInputStream();BufferedReaderreader=newBufferedReader(newInputStreamReader(is));StringthisLine=reader.readLine();StringBufferlineBuffer=newStringBuffer();while(thisLine!=null){System.out.println(thisLine);lin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度星海征途項目桉樹種植與農(nóng)業(yè)科技創(chuàng)新合同3篇
- 二零二五賓館股權(quán)轉(zhuǎn)讓與安全風(fēng)險評估合同3篇
- 二零二五版光伏發(fā)電工程承攬合同模板-施工與運營維護3篇
- 西交利物浦大學(xué)《材料表面處理實驗》2023-2024學(xué)年第一學(xué)期期末試卷
- 西安理工大學(xué)高科學(xué)院《遙感概論理論》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年高校畢業(yè)生就業(yè)服務(wù)區(qū)域合作與資源共享協(xié)議3篇
- 2024版軟件許可及服務(wù)合同
- 二零二五年度班組施工退場工程遺留問題處理、移交及結(jié)算合同3篇
- 二零二五年度高端商業(yè)空間裝修材料供應(yīng)與施工安裝合同3篇
- 天津外國語大學(xué)《圖書情報學(xué)研究方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 15.5-博物館管理法律制度(政策與法律法規(guī)-第五版)
- 水泥廠鋼結(jié)構(gòu)安裝工程施工方案
- 2023光明小升初(語文)試卷
- 三年級上冊科學(xué)說課課件-1.5 水能溶解多少物質(zhì)|教科版
- GB/T 7588.2-2020電梯制造與安裝安全規(guī)范第2部分:電梯部件的設(shè)計原則、計算和檢驗
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- 小學(xué)道德與法治學(xué)科高級(一級)教師職稱考試試題(有答案)
- 河北省承德市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 實用性閱讀與交流任務(wù)群設(shè)計思路與教學(xué)建議
- 應(yīng)急柜檢查表
- 通風(fēng)設(shè)施標(biāo)準(zhǔn)
評論
0/150
提交評論