版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
{售后服務(wù)}構(gòu)建郵件服務(wù)實(shí)現(xiàn)服務(wù)器啟動(dòng)成功后,將自動(dòng)在apps目錄下根據(jù)文件生成相應(yīng)的James發(fā)布文件包,我們后面討論的配置文件即存在于此發(fā)布文件包中。2.2用Telnet管理用戶用cmd進(jìn)入MS-DOS,輸入telnetlocalhost4555(注:localhost是郵件4555\apps\james\SAR-INF\我們使用其默認(rèn)配置)然后輸入用戶名和密碼(rootroot)出現(xiàn)如下信息說(shuō)明登陸成功:刪查改等操作了。常用的用戶信息操作命令參見(jiàn)下表:?Currentlyimplementedmands:常用實(shí)現(xiàn)命令?helpdisplaythishelp顯示幫助信息?listusersdisplayexistingaccounts顯示現(xiàn)有賬戶?countusersdisplaythenumberofexistingaccounts顯示現(xiàn)有賬戶數(shù)量?adduser[username][password]addanewuser添加一個(gè)新用戶?verify[username]verifyifspecifieduserexist核實(shí)指定用戶是否存在?deluser[username]deleteexistinguser刪除存在的用戶?setpassword[username][password]setsauser’spassword設(shè)置用戶密碼?setalias[user][alias]locallyforwardsallemailfor‘user’to‘a(chǎn)lias’設(shè)置郵箱別名?showalias[username]showsauser’scurrentemailalias顯示別名?unsetalias[user]unsetsanaliasfor‘user’刪除用戶別名?setforwarding[username][emailaddress]forwardsauser’semailtoanotheremailaddress轉(zhuǎn)發(fā)用戶的電子郵件地址到另一個(gè)電子郵件地址?showforwarding[username]showsauser’scurrentemailforwarding顯示用戶的當(dāng)前郵件轉(zhuǎn)發(fā)?unsetforwarding[username]removesaforward刪除轉(zhuǎn)發(fā)?user[repositoryname]changetoanotheruserrepository改變另一個(gè)用戶庫(kù)?shutdownkillsthecurrentJVM(convenientwhenJamesisrunasadaemon)關(guān)閉當(dāng)前的服務(wù)?quitcloseconnection關(guān)閉連接adduserchenfengcn881213來(lái)添加一個(gè)的郵件用戶,則其用戶名為:chenfengcn,密碼為:881213,郵箱地址為:(用戶名后的域名跟服務(wù)器配置的域名相同,在文件中配置,我們將在后面部分討論如何配置郵件服務(wù)器域名)操作。下面就讓我們使用Foxmail來(lái)測(cè)試一下我們的郵箱帳戶是否真正可以使用吧。2.3使用Foxmail測(cè)試郵箱帳戶打開(kāi)Foxmail,點(diǎn)擊“郵箱”->“新建郵箱帳戶”電子郵件地址:密碼為:881213POP3服務(wù)器:localhostSMTP服務(wù)器:localhost其余選項(xiàng)均使用默認(rèn)即可,新建完成后,F(xiàn)oxmail將發(fā)送一測(cè)試郵件到“收取”當(dāng)收到Foxmail發(fā)送的測(cè)試郵件,就說(shuō)明我們的郵件帳戶可以正常使用了。作為程序設(shè)計(jì)人員,我們當(dāng)然希望能使用自己寫(xiě)的程序來(lái)測(cè)試我們的郵件服務(wù)器是否搭建成功,而不是Foxmail下面就讓我們用Javamail來(lái)實(shí)現(xiàn)這一切吧。James+Javamail構(gòu)建郵件服務(wù)(二)電子郵件開(kāi)發(fā)2009-11-3010:15:30閱讀21評(píng)論0字號(hào):大中小3Javamail快速入門進(jìn)行Javamail開(kāi)發(fā)需要用到兩個(gè)包:和,在開(kāi)始Javamail編程之前,請(qǐng)自己將這兩個(gè)包添加到IDE的Buildpath中或?qū)⑦@兩個(gè)包的路徑配置到環(huán)境變量中。3.1使用Javamail向James的郵箱帳戶發(fā)送郵件3.1.1業(yè)務(wù)描述本例將使用Javamail實(shí)現(xiàn)郵件的發(fā)送功能發(fā)送郵件需要配置郵件服務(wù)器屬性信息,配置郵件接收地址,使用SMTP認(rèn)證獲得會(huì)話(Session),構(gòu)建郵件體(MimeMessage),發(fā)送郵件。具體編碼如下:3.1.2編碼實(shí)現(xiàn)SMTP用戶身份認(rèn)證類(James在默認(rèn)情況下,是需要SMTP起見(jiàn),我們直接將郵件的相關(guān)信息,如:標(biāo)題、內(nèi)容、發(fā)送者、接收者等信息直接寫(xiě)在類中,運(yùn)行main()函數(shù)即發(fā)送。當(dāng)然,你同樣可以為自己的郵件Servlet將相關(guān)參數(shù)傳遞至后臺(tái)進(jìn)行處理與發(fā)送。其主要代碼也就是此main()函數(shù)中的內(nèi)容,故不贅述。用戶身份認(rèn)證代碼Java代碼package.1;/***用于身份認(rèn)證*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3*/classSmtpAuthextends.Authenticator{privateStringuser,password;/****@paramgetuser*@paramgetpassword*/publicvoidsetUserinfo(Stringgetuser,Stringgetpassword){user=getuser;password=getpassword;}protected.PasswordAuthenticationgetPasswordAuthentication(){returnnew.PasswordAuthentication(user,password);}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){=password;}publicStringgetUser(){returnuser;}publicvoidsetUser(Stringuser){=user;}}發(fā)送郵件代碼Java代碼package.1;import.Properties;import.DataHandler;import.DataSource;import.FileDataSource;import.Message;import.MessagingException;import.Session;import.Transport;import.URLName;import.;import.;import.;import.;import.;/***使用Javamail實(shí)現(xiàn)郵件發(fā)送功能*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassSendMail{publicSendMail(){//TODOAuto-generatedconstructorstub}publicstaticvoidmain(String[]args){//初始化信息Stringsender=“chenfengcn”;Stringpassword=“881213”;StringsmtpServer=“l(fā)ocalhost”;Stringrecipient=“”;Stringsubject=“測(cè)試郵件主題”;StringfileAttachment=“”;//附件Stringcontent=“測(cè)試郵件內(nèi)容”;//配置服務(wù)器屬性Propertiesproper=newProperties();(“.host”,smtpServer);//smtp服務(wù)器(“.auth”,“true”);//是否smtp認(rèn)證(“.port”,“25”);//設(shè)置smtp端口(“.protocol”,“smtp”);//發(fā)郵件協(xié)議(“.protocol”,“pop3”);//收郵件協(xié)議//配置郵件接收地址InternetAddress[]receiveAddress=newInternetAddress[1];try{receiveAddress[0]=newInternetAddress(recipient);}catch(AddressExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}//smtp認(rèn)證,獲取SessionSmtpAuthsa=newSmtpAuth();(sender,password);Sessionsession=(proper,sa);(newURLName(smtpServer),sa.getPasswordAuthentication());//構(gòu)建郵件體MimeMessagesendMess=newMimeMessage(session);MimeBodyPartmbp=newMimeBodyPart();MimeMultipartmmp=newMimeMultipart();try{//郵件文本內(nèi)容(content,“text/plain;charset=GBK”);(mbp);//附件處理if(fileAttachment!=null&&fileAttachment!=””){DataSourcesource=newFileDataSource(fileAttachment);Stringname=();mbp=newMimeBodyPart();(newDataHandler(source));(name);(mbp);}//郵件整體(subject);(mmp);//發(fā)送郵件(newInternetAddress(sender));(.TO,receiveAddress);(sendMess);.println(“發(fā)送成功”);}catch(MessagingExceptionex){();}}}值得一提的是,本程序已經(jīng)實(shí)現(xiàn)了帶附件郵件的發(fā)送功能,如果要發(fā)送fileAttachment變量中就可以了?!鞍l(fā)送成功”送功能。那么,我們應(yīng)該如何檢驗(yàn)服務(wù)器是否確實(shí)收到我們發(fā)送的測(cè)試郵件呢?Javamail可以發(fā)送郵件,當(dāng)然也能接收郵件啦,下面讓我們一起使用Javamail編寫(xiě)郵件接收功能來(lái)檢驗(yàn)吧。3.2使用Javamail接收郵件3.2.1業(yè)務(wù)描述James的chenfengcn用戶發(fā)送了一封測(cè)試郵件,我們應(yīng)該如何使用Javamail來(lái)收取這封郵件呢?為讀取郵件,必須首先設(shè)置服務(wù)器屬性(Properties),獲取一個(gè)會(huì)話(Session),然后獲取并連接郵箱所在的存儲(chǔ)器(Store對(duì)象),打開(kāi)該用戶的郵箱(Folder),獲取所希望閱讀的消息,最后關(guān)閉目錄和連接。下面的程序?qū)崿F(xiàn)了接收郵箱中所有郵件,并將發(fā)送人和主題打印出來(lái)。3.2.2編碼實(shí)現(xiàn)Java代碼package.1;import.Properties;import.Folder;import.Message;import.MessagingException;import.NoSuchProviderException;import.Session;import.Store;/***使用Javamail實(shí)現(xiàn)郵件接收功能*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassReceiveMail{publicReceiveMail(){}publicstaticvoidmain(String[]args){//初始化主機(jī)Stringhost=“l(fā)ocalhost”;Stringusername=“chenfengcn”;Stringpassword=“881213”;//配置服務(wù)器屬性Propertiesprops=newProperties();(“.host”,“l(fā)ocalhost”);//smtp服務(wù)器(“.auth”,“true”);//是否smtp認(rèn)證(“.port”,“25”);//設(shè)置smtp端口(“.protocol”,“smtp”);//發(fā)郵件協(xié)議(“.protocol”,“pop3”);//收郵件協(xié)議//獲取會(huì)話Sessionsession=(props,null);//獲取Store對(duì)象,使用POP3協(xié)議,也可能使用IMAP協(xié)議try{Storestore=(“pop3”);//連接到郵件服務(wù)器(host,username,password);//獲取該用戶Folder對(duì)象,并以只讀方式打開(kāi)Folderfolder=(“inbox”);(_ONLY);//檢索所有郵件,按需填充Messagemessage[]=();for(inti=0;i<;i++){//打印出每個(gè)郵件的發(fā)件人和主題.println(i+“:”+message[i].getFrom()[0]+“\t”+message[i].getSubject());}(false);();}catch(NoSuchProviderExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(MessagingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}程序運(yùn)行成功后,將會(huì)把chenfengcn用戶的郵件從James服務(wù)器中取出,并將此郵箱中所有郵件的發(fā)件人、主題打印在后臺(tái)。若要打印該郵件的內(nèi)容等信息,則只要將message[i]對(duì)象中的郵件內(nèi)容等信息讀取出來(lái)就可以了。注:鑒于郵件的存儲(chǔ)結(jié)構(gòu)(將在第五章介紹),讀取郵件附件是一個(gè)比BodyPart對(duì)象中BodyPart對(duì)于附件的操作本人將在今后的改進(jìn)版本中加以介紹。James+Javamail構(gòu)建郵件服務(wù)(三)電子郵件開(kāi)發(fā)2009-11-3010:17:09閱讀30評(píng)論0字號(hào):大中小4Mailet快速入門MailetAPI是一個(gè)用來(lái)創(chuàng)建郵件處理程序的簡(jiǎn)單的API,它被配置在郵件服務(wù)器端執(zhí)行,分匹配器Matcher和Mailet的接口兩種,匹配器根據(jù)特定的條件匹配郵件消息,并觸發(fā)相應(yīng)的Mailet.Mailet這個(gè)詞是跟Servlet相似,功能也相似,他們的共同之處都是在服務(wù)器端觸發(fā)并執(zhí)行,只是Servlet的Matcher通常是url的pattern,跟Servlet的接口一樣,Mailet也有init()方法,service()方法和destroy()方法.即他們都有類似的生命周期.Mailet的簡(jiǎn)單可編程接口可以用來(lái)做一些郵件處理,比如反垃圾郵件,檢查郵件病毒以及郵件博客等等,利用移動(dòng)設(shè)備可發(fā)送email的功能,可以做到手機(jī)通過(guò)mail發(fā)送信息到郵件服務(wù)器交給Mailet處理,形成移動(dòng)博客的模型.Mailet的運(yùn)行需要mailet-2.3.jar和mailet-api-2.3.jar兩個(gè)包的支持,James本身就有這兩個(gè)包,可不作修改,但在開(kāi)發(fā)的時(shí)候還是需要開(kāi)發(fā)者自己將這兩個(gè)包導(dǎo)入到工程的Buildpath中或配置到系統(tǒng)環(huán)境變量中。4.1用Mailet做一個(gè)Hello的例子4.1.1業(yè)務(wù)描述我們要實(shí)現(xiàn)當(dāng)外部發(fā)送給James服務(wù)器中名字含hello的郵箱時(shí),服務(wù)器在這封郵件的主題前加入“Hello”,并在服務(wù)器后臺(tái)輸出“ReceivedapieceofEmail”。如前所述,Mailet包括匹配器Matcher和Mailet兩種接口,現(xiàn)在就讓我們用MailetAPI實(shí)現(xiàn)這兩個(gè)接口吧。4.1.2編碼實(shí)現(xiàn)匹配器Java代碼package..sample1;import.;import.;/***Mailet匹配器*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassBizMatcherextendsGenericRecipientMatcher{publicbooleanmatchRecipient(MailAddressrecipient){//郵件地址必須包含hello的if(().indexOf("hello")!=-1){returntrue;}returnfalse;}}Java代碼package..sample1;import.IOException;import.MessagingException;import.;import.;import.;/***Mailet處理程序*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassBizMailletextendsGenericMailet{publicvoidinit()throwsMessagingException{}publicvoidservice(Mailmail)throwsMessagingException{MimeMessagemmp;mmp=(MimeMessage)();("Hello"+());.println("ReceivedapieceofEmail");}}4.1.3配置部署Mailet跟Servlet一樣,是服務(wù)器端程序,是不能直接在客戶端運(yùn)行的,必須要部署到服務(wù)器端方可生效。部署具體步驟如下:1、將我們編寫(xiě)的Matcher和Mailet打包成jar文件;2、在\james-2.3.1\apps\james\SAR-INF目錄下新建一個(gè)lib文件夾;3、將打包好的jar文件復(fù)制到剛剛新建的lib文件夾下;4、打開(kāi)配置文件,找到以下這段代碼:Xml代碼<mailetpackages><mailetpackage>..mailets</mailetpackage><mailetpackage>..</mailetpackage></mailetpackages><matcherpackages><matcherpackage>..matchers</matcherpackage><matcherpackage>..</matcherpackage></matcherpackages>前半部分是用于配置Mailet包所在位置,后半部分是用于配置MatcherMailet和Matcher所在位置配置進(jìn)去就可以了。配置后的結(jié)果如下:Xml代碼<mailetpackages><mailetpackage>..sample1</mailetpackage><mailetpackage>..mailets</mailetpackage><mailetpackage>..</mailetpackage></mailetpackages><matcherpackages><matcherpackage>..sample1</matcherpackage><matcherpackage>..matchers</matcherpackage><matcherpackage>..</matcherpackage></matcherpackages>這樣就完成了包的配置。我們都知道,Mailet的工作過(guò)程是:首先由Matcher來(lái)匹配所接收到的郵件,然后提交給相應(yīng)的Mailet處理,但是哪個(gè)匹配器對(duì)應(yīng)哪個(gè)Mailet呢?我們還需要配置Mailet的對(duì)應(yīng)關(guān)系同樣在中找到下面的代碼:Xml代碼<mailetmatch="All"class="PostmasterAlias"/>在這段代碼下面加入我們自己的Mailet:Xml代碼<mailetmatch="All"class="PostmasterAlias"/>Xml代碼<mailetmatch="BizMatcher"class="BizMaillet"/>這樣就完成了我們自定義的Mailet的配置部署工作了重啟James服務(wù)器,則此Mailet即可生效。4.1.4測(cè)試Mailet前面我們已經(jīng)完成了Mailet的編碼和部署工作,現(xiàn)在就讓我們來(lái)測(cè)試一下我們的Mailet是否生效吧。首先,需要在James服務(wù)器上新建一個(gè)名稱含Hello的用戶。前面已介紹過(guò)新建用戶的方法了,在此就不重復(fù)敘述了。使用adduserhelloworld881213命令新建一個(gè)helloworld用戶。使用第三章所談及的“使用Javamail向James的郵箱帳戶發(fā)送郵件”來(lái)向發(fā)送一封郵件(當(dāng)然,你同樣可以使用Foxmail或Outlook向此地址發(fā)送郵件),郵件發(fā)送成功后,James服務(wù)器后臺(tái)將輸出“Receiveapieceofemail”。運(yùn)行效果如下圖所示:這就說(shuō)明我們的Mailet已經(jīng)部署成功了.James+Javamail構(gòu)建郵件服務(wù)(四)電子郵件開(kāi)發(fā)2009-11-3010:17:55閱讀53評(píng)論0字號(hào):大中小關(guān)鍵字:jamesjavamailmailetjava郵件5Javamail郵件存儲(chǔ)邏輯簡(jiǎn)介5.1Message存儲(chǔ)結(jié)構(gòu)示意圖Message是郵件發(fā)送的最終對(duì)象,我們一般使用他的子類對(duì)象MimeMessage,其子類對(duì)象里包含有郵件的MessageID、Subject、Flag、FromSenderContentContentMultipart對(duì)象(或其子類對(duì)象MimeMultipart),所有的郵件內(nèi)容都存在于Multipart中的。一個(gè)Multipart包含有一個(gè)或多個(gè)BodyPart對(duì)象(或其子類對(duì)象MimeBodyPartBodyPart對(duì)象用于存儲(chǔ)郵件的內(nèi)容,可以是文本形式,也可以是附件形式。6常用JavamailAPI簡(jiǎn)介核心JavaMailAPI可以分為兩部分,一部分由七個(gè)類組成:Session、MessageAddressAuthenticatorTransportStore及Folder自JavamailAPI頂級(jí)包(但開(kāi)發(fā)者需要使用的具體子類可能在.internet包內(nèi))??梢杂眠@些類完成大量常見(jiàn)的電子郵件任務(wù),包括發(fā)送消息、檢索消息刪除消息認(rèn)證回復(fù)消息轉(zhuǎn)發(fā)消息管理附件處理基于HTML文MTA范疇下圖描繪了Javamail郵件收發(fā)過(guò)程。Javamail框架有一個(gè)大體了解:6.1.SessionSessionJavamailAPI最高層入口類,所有其它類都必須經(jīng)由Session對(duì)象才得以生效。Session對(duì)象管理配置選.Properties對(duì)象獲取信息,如郵件服務(wù)器、用戶名、密碼及整個(gè)應(yīng)用程序中共享的其它信息。Session類的構(gòu)造器是私有的,它不能被繼承,也不能使用new語(yǔ)句來(lái)getInstance和getDefaultInstance來(lái)獲取Session實(shí)例,前者創(chuàng)建一個(gè)獨(dú)立的會(huì)話,否則獲取缺省的共享會(huì)話。API明細(xì):/javamail-1.4.1javadocsmail/6.2.Message獲得Session對(duì)象后,可以開(kāi)始繼續(xù)創(chuàng)建要發(fā)送的郵件消息,這由Message類來(lái)完成,Message實(shí)現(xiàn)了Part接口,它表示一個(gè)郵件消息,包含一系列屬性(attribute)和一個(gè)消息內(nèi)容(content)消息屬性標(biāo)識(shí)了消息地址DataHandler對(duì)象包裝實(shí)際數(shù)據(jù)。當(dāng)郵件消息位于目錄(folder)中時(shí),系統(tǒng)還使用一個(gè)標(biāo)志位集合來(lái)描述它的狀態(tài)。Message格式。比如說(shuō),JavamailAPI提供了MimeMessage(位于.包)類,該類擴(kuò)展自Message,實(shí)現(xiàn)了RFC822和MIME標(biāo)準(zhǔn)。Message的子類通常通過(guò)字節(jié)流構(gòu)建其實(shí)例,相應(yīng)的,它們也可以生成字節(jié)流來(lái)傳輸自身。API明細(xì):/javamail-1.4.1javadocsmail/6.3.AddressAddress類表示電子郵件地址,它是一個(gè)抽象類。其子類(最經(jīng)常使用的子類是.)提供具體實(shí)現(xiàn),且通??纱谢T趧?chuàng)建了Session和MessageAddress確定郵件消息的發(fā)送者和接收者地址。API明細(xì):/javamail-1.4.1javadocsmail/6.4.AuthenticatorAuthenticator代表一個(gè)可以為網(wǎng)絡(luò)連接獲取認(rèn)證信息的對(duì)象,它通常通過(guò)提示用戶輸入用戶名和密碼來(lái)收集認(rèn)證信息,使連接可以訪問(wèn)受保護(hù)的資源。對(duì)于JavamailAPI來(lái)說(shuō),這些資源就是郵件服務(wù)器。JavamailAuthenticator在包中,它和中同名的類Authenticator不同。要使用Authenticator,必須先創(chuàng)建一個(gè)它的子類實(shí)例,并且在會(huì)話對(duì)象創(chuàng)建時(shí)為會(huì)話注冊(cè)該Authenticator對(duì)象。在需要認(rèn)證的時(shí)候,就會(huì)通知Authenticator。程序可以彈出窗口,也可以從配置文件中(雖然沒(méi)有加密是不安全的)讀取用戶名和密碼,并使用它們作為構(gòu)造函數(shù)參數(shù)創(chuàng)建一個(gè)PasswordAuthentication對(duì)象返回給調(diào)用程序。API明細(xì):/javamail-1.4.1javadocsmail/6.5.Transport消息發(fā)送的最后步驟是使用Transport類。該類使用指定協(xié)議發(fā)送消息(通常是SMTP)TransportSession有些類似,可以通過(guò)靜態(tài)方法或?qū)嵗椒òl(fā)送消息Transport繼承自Service者提供了很多通用方法,如命名傳輸、連接服務(wù)器、監(jiān)聽(tīng)傳輸事件等等。API明細(xì):/javamail-1.4.1javadocsmail/6.6.StoreStoreFolder協(xié)議,以存儲(chǔ)和讀取消息,其子類提供具體實(shí)現(xiàn)。Store客戶程序可以通過(guò)獲取一個(gè)實(shí)現(xiàn)了數(shù)據(jù)庫(kù)訪問(wèn)協(xié)議的Store對(duì)象來(lái)訪問(wèn)消息存儲(chǔ)器,絕大多數(shù)存儲(chǔ)器要求用戶在訪問(wèn)前提供認(rèn)證信息,connect方法執(zhí)行了該認(rèn)證過(guò)程。Storestore=("pop3");//指定協(xié)議(host,usename,password);//API明細(xì):/javamail-1.4.1javadocsmail/6.7.FolderFolder是一個(gè)抽象類,用于分級(jí)組織郵件,其子類提供針對(duì)具體協(xié)議的實(shí)現(xiàn)。Folder代表的目錄可以容納消息或子目錄,存儲(chǔ)在目錄內(nèi)的消息被順序計(jì)數(shù)(從1開(kāi)始到消息總數(shù)),該順序被稱為“郵箱順序”,通?;卩]件消息到達(dá)目錄的順序。郵件順序的變動(dòng)將改變消息的序列號(hào),這種情況僅發(fā)生在客戶程序調(diào)用Expunge方法擦除目錄內(nèi)設(shè)置了.DELETED標(biāo)志位的消息時(shí)。執(zhí)行擦除操作后,目錄內(nèi)消息將重新編號(hào)??蛻舫绦蚩梢酝ㄟ^(guò)消息序列號(hào)或直接通過(guò)相應(yīng)的Message對(duì)象應(yīng)用目錄中的消息,由于消息序列號(hào)在會(huì)話中很可能改變,因此應(yīng)盡可能保存Message對(duì)象而非序列號(hào)來(lái)反復(fù)引用對(duì)象。連接到Store之后,接下來(lái)可以獲取一個(gè)文件夾(Folder)。該文件夾必須先使用open()方法打開(kāi),然后才能讀取里面的消息:Folderfolder=();//或:Folderfolder=("inbox");(_WRITE);Messagemessage[]=();open()_WRITE)inbox是POP3唯一可以使用的文件夾如果使用IMAP獲得MessagegetContent()writeTo()將內(nèi)容寫(xiě)入輸出流。getContent()方法之能得到消息內(nèi)容,而writeTo()的輸出卻包含消息頭.讀完郵件之后要關(guān)閉與Folder和Store的連接:(aBoolean);();API明細(xì):/javamail-1.4.1javadocsmail/7常用MailetAPI簡(jiǎn)介Mailet主要包含兩個(gè)包:.mailet和.7.1.mailet此包主要用于匹配器和Mailet的編寫(xiě)自定義的Mailet類需要繼承.定義的Matcher類需要繼承.或.。例子詳見(jiàn)第四章Mailet快速入門。API明細(xì):javadocsapachepackage-7.2.此包主要用于郵件中的日期格式的轉(zhuǎn)換。API明細(xì):javadocsapachedates/package-James+Javamail構(gòu)建郵件服務(wù)(五)電子郵件開(kāi)發(fā)2009-11-3010:18:50閱讀33評(píng)論0字號(hào):大中小關(guān)鍵字:jamesjavamailmailetjava郵件8Javamail的高級(jí)應(yīng)用8.1用Javamail實(shí)現(xiàn)對(duì)郵件的查找在郵件的高級(jí)應(yīng)用中,當(dāng)遇到某個(gè)帳戶中的郵件數(shù)非常多的時(shí)候,而用戶往往只需要對(duì)其中的某幾封郵件進(jìn)行處理倘若要把所有的郵件都取出來(lái),再進(jìn)行對(duì)應(yīng)信息的判斷提取,這無(wú)疑將大大加重郵件服務(wù)器的負(fù)擔(dān)。為了改善這種狀況,Javamail.search。這個(gè)包將通過(guò)對(duì)SearchTerm對(duì)象進(jìn)行設(shè)置,而后提交給服務(wù)器,服務(wù)器端有相應(yīng)的過(guò)濾器,根據(jù)SearchTerm對(duì)象的設(shè)置將郵件過(guò)濾的結(jié)果傳回給客戶端。以提高工作效率,減輕服務(wù)器端負(fù)擔(dān)。下面就讓我們一起來(lái)做一個(gè)例子說(shuō)明一下我們應(yīng)該如何使用search這個(gè)包吧。8.1.1業(yè)務(wù)描述編寫(xiě)一個(gè)類,實(shí)現(xiàn)對(duì)郵件中郵件的條件搜索功能。在本例中實(shí)現(xiàn)對(duì)主題中包含“測(cè)試”,發(fā)件人是,的郵件的搜索。8.1.2編碼實(shí)現(xiàn)Java代碼package.1;import.ArrayList;import.Properties;import.Folder;import.Message;import.MessagingException;import.NoSuchProviderException;import.Session;import.Store;import.;import.;import.;import.;import.;/***使用Javamail的Search包實(shí)現(xiàn)對(duì)郵件的搜索功能*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassSearchMail{privatestaticArrayList<SearchTerm>list=newArrayList();publicstaticvoidmain(String[]args){//用戶信息Stringuser="helloworld";Stringpassword="881213";//配置服務(wù)器屬性Propertiesprops=newProperties();(".host","localhost");//smtp服務(wù)器(".auth","true");//是否smtp認(rèn)證(".port","25");//設(shè)置smtp端口(".protocol","smtp");//發(fā)郵件協(xié)議(".protocol","pop3");//收郵件協(xié)議//創(chuàng)建會(huì)話Sessionsession=(props,null);Storestore=null;try{//連接Storestore=("pop3");("localhost",user,password);//打開(kāi)FolderFolderfolder=("inbox");(_ONLY);//構(gòu)造搜索規(guī)則SearchTermsubterm=newSubjectTerm("測(cè)試");SearchTermfterm=newFromTerm(newInternetAddress(""));SearchTermst=newAndTerm(subterm,fterm);Message[]message=(st);//輸出搜索到的郵件的主題for(inti=0;i<;i++){.println(message[i].getSubject());}}catch(NoSuchProviderExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(MessagingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}本例只展示如何使用Javamail的Search包實(shí)現(xiàn)對(duì)郵件的搜索功能,在Search包中還存在許多功能相當(dāng)完備的API有興趣可自行參考JavamailAPI。API明細(xì):/javamail-1.4.1javadocsmailpackage-9James郵件服務(wù)器的高級(jí)應(yīng)用與配置9.1配置郵箱域名配置文件,文件位于\apps\james\SAR-INF目錄下。Java代碼<postmaster></postmaster><servernamesautodetect="true"autodetectIP="true"><!--CONFIRM?--><servername>localhost</servername></servernames>這兩項(xiàng)內(nèi)容,把其中的localhost改成你所要配置的域名即可。9.2將用戶信息配置為數(shù)據(jù)庫(kù)存儲(chǔ)方式James服務(wù)器提供了相當(dāng)完善的配置方案,可選擇將用戶信息保存在文件、數(shù)據(jù)庫(kù)或其他介質(zhì)中。在默認(rèn)的情況下,服務(wù)器將用戶信息以加密形式保存于\james-2.3.1\apps\james\var\users目錄下的文件中我們可以通過(guò)改變其配置信息從而改變用戶信息的保存方式。在此僅以MYSQL數(shù)據(jù)庫(kù)的配置方式為例說(shuō)明。第一步:將相應(yīng)數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)包復(fù)制到lib目錄下即我們需要把mysql-connector-java-3.1.13-的MYSQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)包復(fù)制到\james-2.3.1\lib目錄下第二步:新建數(shù)據(jù)庫(kù),建立一個(gè)用于存放James用戶信息的數(shù)據(jù)庫(kù)(表不用建,由James自動(dòng)創(chuàng)建),在這里,我們假設(shè)新建的數(shù)據(jù)庫(kù)為mail第三步:配置文件,文件位于\apps\james\SAR-INF目錄下。打開(kāi),找到以下內(nèi)容:Java代碼<repositoryname="LocalUsers"class="..UsersFileRepository"><destinationURL="file:/users/"/>?repository>把這部分內(nèi)容修改為:Java代碼<repositoryname="LocalUsers"class="..JamesUsersJdbcRepository"destinationURL="db:/users"><sqlFile>file:/</sqlFile></repository>第四步:找到MySQL配置位置Java代碼<!--Example,connectingtoaMySQLdatabasecalled"mail"onlocalhost--><!----><!--ThemaxvalueisthemaximumnumberofconcurrentconnectionsJameswill--><!--opentothisdatabase--><!--Ifyousee"SQLException:Givingup...noconnectionsavailable."inyour--><!--logfilesorbouncedmailyoushouldincreasethisvalue--><!--<data-sourcename="maildb"class=".."><driver>.</driver><dburl>jdbc:mysql:///mail?autoReconnect=true</dburl><user>username</user><password>password</password><max>20</max></data-source>-->首先,去掉data-source標(biāo)簽前后的注釋標(biāo)識(shí)(”<!---->”的實(shí)際情況配置好相應(yīng)的數(shù)據(jù)庫(kù)信息(包括URL、用戶名、密碼、最大連接數(shù))。然后保存,重新啟動(dòng)James。James會(huì)在數(shù)據(jù)庫(kù)中自動(dòng)創(chuàng)建users表用于存放郵箱的用戶信息。這樣配置以后,我們除了可以通過(guò)telnet操作用戶信息外,同樣可以通過(guò)此users表來(lái)操作用戶信息。值得注意的是,James的用戶密碼使用的是SHA單向加密算法,若需SHA的加密問(wèn)題我們應(yīng)該如何來(lái)解決這個(gè)問(wèn)題呢?查看James的源碼中.包中的文件,我們可以發(fā)現(xiàn),James中提供verifyPassword()和setPassword()兩個(gè)方法,verifyPassword()setPassword()密碼轉(zhuǎn)換成密文。通過(guò)仔細(xì)研究這兩個(gè)方法,可以很容易地實(shí)現(xiàn)將自己的密碼進(jìn)行SHA加密了。9.3通過(guò)操作數(shù)據(jù)庫(kù)實(shí)現(xiàn)用戶信息操作在上一節(jié)我們討論了可以將James會(huì)存在SHA而真正實(shí)現(xiàn)通過(guò)操作數(shù)據(jù)庫(kù)來(lái)操作James服務(wù)器的用戶信息。9.3.1業(yè)務(wù)描述本例是基于上一節(jié)“將用戶信息配置為數(shù)據(jù)庫(kù)存儲(chǔ)方式”庫(kù),即:對(duì)數(shù)據(jù)庫(kù)的信息進(jìn)行增、刪、查、改等操作。本例只實(shí)現(xiàn)用戶信息的添加,關(guān)鍵在于使用James源碼包中提供的SHA加密算法實(shí)現(xiàn)用戶密碼的加密,其余功能跟一般數(shù)據(jù)庫(kù)操作無(wú)異,故不贅述。9.3.2編碼實(shí)現(xiàn)用戶添加類:Java代碼package..sample1;import.NoSuchAlgorithmException;import.Connection;import.DriverManager;import.SQLException;import..DigestUtil;/***通過(guò)操作數(shù)據(jù)庫(kù)來(lái)添加James用戶**@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3*/publicclassAddUserByDB{publicstaticvoidmain(String[]args){//連接數(shù)據(jù)庫(kù)StringdriverName=".";StringdbURL="jdbc:mysql:/mail?autoReconnect=true";StringuserName="root";StringuserPwd="881213";Connectionconn=null;try{(driverName);conn=(dbURL,userName,userPwd);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}//構(gòu)造并執(zhí)行SQL("881213","SHA")SHA加密//注:用戶信息的后四個(gè)屬性需要使用('SHA',0,NULL,0,null認(rèn)值,若用錯(cuò),則新建用戶可能不能使用Stringsql="";try{sql="insertintousersvalues('hello','"+("881213","SHA")+"','SHA',0,NULL,0,null)";().executeUpdate(sql);();.println("用戶添加成功");}catch(NoSuchAlgorithmExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}hello我們應(yīng)該如何測(cè)試此用戶是否真正創(chuàng)建成功并可使用呢?方法有很多,可以Telnet命令中的listusers使用Foxmail將此用戶添加進(jìn)去,帳戶能正常接收到Foxmail發(fā)送的郵件即表明此用戶可正常使用了。1、用戶信息的后四個(gè)屬性需要使用('SHA',0,NULL,0,null)此四個(gè)默認(rèn)值,若用錯(cuò),則新建用戶可能不能使用;2、在程序運(yùn)行過(guò)程中,需要使用到j(luò)ames-2.3.1.jar包和相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)包,在程序運(yùn)行前請(qǐng)確保這些包已添加到相關(guān)的位置。9.4通過(guò)Java調(diào)用Telnet實(shí)現(xiàn)用戶信息操作(未完
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年桂林信息工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)及參考答案詳解1套
- 2026年遼寧軌道交通職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及完整答案詳解1套
- 2026年大理農(nóng)林職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)及答案詳解1套
- 銀行挖掘崗面試題及答案
- 2025年1月國(guó)開(kāi)電大行管??啤侗O(jiān)督學(xué)》期末紙質(zhì)考試試題及答案
- 2025年恒豐銀行深圳分行社會(huì)招聘5人備考題庫(kù)參考答案詳解
- 2025年西安交通大學(xué)第一附屬醫(yī)院耳鼻咽喉頭頸外科招聘派遣制助理醫(yī)生備考題庫(kù)及一套參考答案詳解
- 2025年北京城建華晟交通建設(shè)有限公司成熟人才招聘?jìng)淇碱}庫(kù)附答案詳解
- 2025年南京六合經(jīng)濟(jì)開(kāi)發(fā)區(qū)市場(chǎng)化招聘子公司相關(guān)負(fù)責(zé)人備考題庫(kù)及答案詳解1套
- 2025年貴州鹽業(yè)(集團(tuán))安順有限責(zé)任公司公開(kāi)招聘工作人員5人備考題庫(kù)參考答案詳解
- 2025年貴州省貴陽(yáng)市輔警(協(xié)警)招聘考試題庫(kù)及答案
- 農(nóng)業(yè)銀行安全保衛(wèi)題庫(kù)及答案解析
- 海南自貿(mào)港課件
- 公司安全方針目標(biāo)培訓(xùn)課件
- 醫(yī)院培訓(xùn)課件:《高血壓的診療規(guī)范》
- 北京市通州區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末語(yǔ)文試題(含答案)
- 2025年銀行意識(shí)形態(tài)分析研判會(huì)議記錄
- 廣元市利州區(qū)下田埡石材廠2023年石灰?guī)r礦擴(kuò)建項(xiàng)目環(huán)評(píng)報(bào)告
- 2025年法院聘用書(shū)記員試題(+答案)
- 網(wǎng)絡(luò)新技術(shù)與信息安全
- 2025年抗菌藥物培訓(xùn)試卷(+答案)
評(píng)論
0/150
提交評(píng)論