版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
{售后服務(wù)}構(gòu)建郵件服務(wù)實現(xiàn)服務(wù)器啟動成功后,將自動在apps目錄下根據(jù)文件生成相應(yīng)的James發(fā)布文件包,我們后面討論的配置文件即存在于此發(fā)布文件包中。2.2用Telnet管理用戶用cmd進入MS-DOS,輸入telnetlocalhost4555(注:localhost是郵件4555\apps\james\SAR-INF\我們使用其默認配置)然后輸入用戶名和密碼(rootroot)出現(xiàn)如下信息說明登陸成功:刪查改等操作了。常用的用戶信息操作命令參見下表:?Currentlyimplementedmands:常用實現(xiàn)命令?helpdisplaythishelp顯示幫助信息?listusersdisplayexistingaccounts顯示現(xiàn)有賬戶?countusersdisplaythenumberofexistingaccounts顯示現(xiàn)有賬戶數(shù)量?adduser[username][password]addanewuser添加一個新用戶?verify[username]verifyifspecifieduserexist核實指定用戶是否存在?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ā)用戶的電子郵件地址到另一個電子郵件地址?showforwarding[username]showsauser’scurrentemailforwarding顯示用戶的當前郵件轉(zhuǎn)發(fā)?unsetforwarding[username]removesaforward刪除轉(zhuǎn)發(fā)?user[repositoryname]changetoanotheruserrepository改變另一個用戶庫?shutdownkillsthecurrentJVM(convenientwhenJamesisrunasadaemon)關(guān)閉當前的服務(wù)?quitcloseconnection關(guān)閉連接adduserchenfengcn881213來添加一個的郵件用戶,則其用戶名為:chenfengcn,密碼為:881213,郵箱地址為:(用戶名后的域名跟服務(wù)器配置的域名相同,在文件中配置,我們將在后面部分討論如何配置郵件服務(wù)器域名)操作。下面就讓我們使用Foxmail來測試一下我們的郵箱帳戶是否真正可以使用吧。2.3使用Foxmail測試郵箱帳戶打開Foxmail,點擊“郵箱”->“新建郵箱帳戶”電子郵件地址:密碼為:881213POP3服務(wù)器:localhostSMTP服務(wù)器:localhost其余選項均使用默認即可,新建完成后,F(xiàn)oxmail將發(fā)送一測試郵件到“收取”當收到Foxmail發(fā)送的測試郵件,就說明我們的郵件帳戶可以正常使用了。作為程序設(shè)計人員,我們當然希望能使用自己寫的程序來測試我們的郵件服務(wù)器是否搭建成功,而不是Foxmail下面就讓我們用Javamail來實現(xiàn)這一切吧。James+Javamail構(gòu)建郵件服務(wù)(二)電子郵件開發(fā)2009-11-3010:15:30閱讀21評論0字號:大中小3Javamail快速入門進行Javamail開發(fā)需要用到兩個包:和,在開始Javamail編程之前,請自己將這兩個包添加到IDE的Buildpath中或?qū)⑦@兩個包的路徑配置到環(huán)境變量中。3.1使用Javamail向James的郵箱帳戶發(fā)送郵件3.1.1業(yè)務(wù)描述本例將使用Javamail實現(xiàn)郵件的發(fā)送功能發(fā)送郵件需要配置郵件服務(wù)器屬性信息,配置郵件接收地址,使用SMTP認證獲得會話(Session),構(gòu)建郵件體(MimeMessage),發(fā)送郵件。具體編碼如下:3.1.2編碼實現(xiàn)SMTP用戶身份認證類(James在默認情況下,是需要SMTP起見,我們直接將郵件的相關(guān)信息,如:標題、內(nèi)容、發(fā)送者、接收者等信息直接寫在類中,運行main()函數(shù)即發(fā)送。當然,你同樣可以為自己的郵件Servlet將相關(guān)參數(shù)傳遞至后臺進行處理與發(fā)送。其主要代碼也就是此main()函數(shù)中的內(nèi)容,故不贅述。用戶身份認證代碼Java代碼package.1;/***用于身份認證*@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實現(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=“測試郵件主題”;StringfileAttachment=“”;//附件Stringcontent=“測試郵件內(nèi)容”;//配置服務(wù)器屬性Propertiesproper=newProperties();(“.host”,smtpServer);//smtp服務(wù)器(“.auth”,“true”);//是否smtp認證(“.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認證,獲取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)實現(xiàn)了帶附件郵件的發(fā)送功能,如果要發(fā)送fileAttachment變量中就可以了?!鞍l(fā)送成功”送功能。那么,我們應(yīng)該如何檢驗服務(wù)器是否確實收到我們發(fā)送的測試郵件呢?Javamail可以發(fā)送郵件,當然也能接收郵件啦,下面讓我們一起使用Javamail編寫郵件接收功能來檢驗吧。3.2使用Javamail接收郵件3.2.1業(yè)務(wù)描述James的chenfengcn用戶發(fā)送了一封測試郵件,我們應(yīng)該如何使用Javamail來收取這封郵件呢?為讀取郵件,必須首先設(shè)置服務(wù)器屬性(Properties),獲取一個會話(Session),然后獲取并連接郵箱所在的存儲器(Store對象),打開該用戶的郵箱(Folder),獲取所希望閱讀的消息,最后關(guān)閉目錄和連接。下面的程序?qū)崿F(xiàn)了接收郵箱中所有郵件,并將發(fā)送人和主題打印出來。3.2.2編碼實現(xiàn)Java代碼package.1;import.Properties;import.Folder;import.Message;import.MessagingException;import.NoSuchProviderException;import.Session;import.Store;/***使用Javamail實現(xiàn)郵件接收功能*@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3**/publicclassReceiveMail{publicReceiveMail(){}publicstaticvoidmain(String[]args){//初始化主機Stringhost=“l(fā)ocalhost”;Stringusername=“chenfengcn”;Stringpassword=“881213”;//配置服務(wù)器屬性Propertiesprops=newProperties();(“.host”,“l(fā)ocalhost”);//smtp服務(wù)器(“.auth”,“true”);//是否smtp認證(“.port”,“25”);//設(shè)置smtp端口(“.protocol”,“smtp”);//發(fā)郵件協(xié)議(“.protocol”,“pop3”);//收郵件協(xié)議//獲取會話Sessionsession=(props,null);//獲取Store對象,使用POP3協(xié)議,也可能使用IMAP協(xié)議try{Storestore=(“pop3”);//連接到郵件服務(wù)器(host,username,password);//獲取該用戶Folder對象,并以只讀方式打開Folderfolder=(“inbox”);(_ONLY);//檢索所有郵件,按需填充Messagemessage[]=();for(inti=0;i<;i++){//打印出每個郵件的發(fā)件人和主題.println(i+“:”+message[i].getFrom()[0]+“\t”+message[i].getSubject());}(false);();}catch(NoSuchProviderExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(MessagingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}程序運行成功后,將會把chenfengcn用戶的郵件從James服務(wù)器中取出,并將此郵箱中所有郵件的發(fā)件人、主題打印在后臺。若要打印該郵件的內(nèi)容等信息,則只要將message[i]對象中的郵件內(nèi)容等信息讀取出來就可以了。注:鑒于郵件的存儲結(jié)構(gòu)(將在第五章介紹),讀取郵件附件是一個比BodyPart對象中BodyPart對于附件的操作本人將在今后的改進版本中加以介紹。James+Javamail構(gòu)建郵件服務(wù)(三)電子郵件開發(fā)2009-11-3010:17:09閱讀30評論0字號:大中小4Mailet快速入門MailetAPI是一個用來創(chuàng)建郵件處理程序的簡單的API,它被配置在郵件服務(wù)器端執(zhí)行,分匹配器Matcher和Mailet的接口兩種,匹配器根據(jù)特定的條件匹配郵件消息,并觸發(fā)相應(yīng)的Mailet.Mailet這個詞是跟Servlet相似,功能也相似,他們的共同之處都是在服務(wù)器端觸發(fā)并執(zhí)行,只是Servlet的Matcher通常是url的pattern,跟Servlet的接口一樣,Mailet也有init()方法,service()方法和destroy()方法.即他們都有類似的生命周期.Mailet的簡單可編程接口可以用來做一些郵件處理,比如反垃圾郵件,檢查郵件病毒以及郵件博客等等,利用移動設(shè)備可發(fā)送email的功能,可以做到手機通過mail發(fā)送信息到郵件服務(wù)器交給Mailet處理,形成移動博客的模型.Mailet的運行需要mailet-2.3.jar和mailet-api-2.3.jar兩個包的支持,James本身就有這兩個包,可不作修改,但在開發(fā)的時候還是需要開發(fā)者自己將這兩個包導(dǎo)入到工程的Buildpath中或配置到系統(tǒng)環(huán)境變量中。4.1用Mailet做一個Hello的例子4.1.1業(yè)務(wù)描述我們要實現(xiàn)當外部發(fā)送給James服務(wù)器中名字含hello的郵箱時,服務(wù)器在這封郵件的主題前加入“Hello”,并在服務(wù)器后臺輸出“ReceivedapieceofEmail”。如前所述,Mailet包括匹配器Matcher和Mailet兩種接口,現(xiàn)在就讓我們用MailetAPI實現(xiàn)這兩個接口吧。4.1.2編碼實現(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ù)器端程序,是不能直接在客戶端運行的,必須要部署到服務(wù)器端方可生效。部署具體步驟如下:1、將我們編寫的Matcher和Mailet打包成jar文件;2、在\james-2.3.1\apps\james\SAR-INF目錄下新建一個lib文件夾;3、將打包好的jar文件復(fù)制到剛剛新建的lib文件夾下;4、打開配置文件,找到以下這段代碼:Xml代碼<mailetpackages><mailetpackage>..mailets</mailetpackage><mailetpackage>..</mailetpackage></mailetpackages><matcherpackages><matcherpackage>..matchers</matcherpackage><matcherpackage>..</matcherpackage></matcherpackages>前半部分是用于配置Mailet包所在位置,后半部分是用于配置MatcherMailet和Matcher所在位置配置進去就可以了。配置后的結(jié)果如下:Xml代碼<mailetpackages><mailetpackage>..sample1</mailetpackage><mailetpackage>..mailets</mailetpackage><mailetpackage>..</mailetpackage></mailetpackages><matcherpackages><matcherpackage>..sample1</matcherpackage><matcherpackage>..matchers</matcherpackage><matcherpackage>..</matcherpackage></matcherpackages>這樣就完成了包的配置。我們都知道,Mailet的工作過程是:首先由Matcher來匹配所接收到的郵件,然后提交給相應(yīng)的Mailet處理,但是哪個匹配器對應(yīng)哪個Mailet呢?我們還需要配置Mailet的對應(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測試Mailet前面我們已經(jīng)完成了Mailet的編碼和部署工作,現(xiàn)在就讓我們來測試一下我們的Mailet是否生效吧。首先,需要在James服務(wù)器上新建一個名稱含Hello的用戶。前面已介紹過新建用戶的方法了,在此就不重復(fù)敘述了。使用adduserhelloworld881213命令新建一個helloworld用戶。使用第三章所談及的“使用Javamail向James的郵箱帳戶發(fā)送郵件”來向發(fā)送一封郵件(當然,你同樣可以使用Foxmail或Outlook向此地址發(fā)送郵件),郵件發(fā)送成功后,James服務(wù)器后臺將輸出“Receiveapieceofemail”。運行效果如下圖所示:這就說明我們的Mailet已經(jīng)部署成功了.James+Javamail構(gòu)建郵件服務(wù)(四)電子郵件開發(fā)2009-11-3010:17:55閱讀53評論0字號:大中小關(guān)鍵字:jamesjavamailmailetjava郵件5Javamail郵件存儲邏輯簡介5.1Message存儲結(jié)構(gòu)示意圖Message是郵件發(fā)送的最終對象,我們一般使用他的子類對象MimeMessage,其子類對象里包含有郵件的MessageID、Subject、Flag、FromSenderContentContentMultipart對象(或其子類對象MimeMultipart),所有的郵件內(nèi)容都存在于Multipart中的。一個Multipart包含有一個或多個BodyPart對象(或其子類對象MimeBodyPartBodyPart對象用于存儲郵件的內(nèi)容,可以是文本形式,也可以是附件形式。6常用JavamailAPI簡介核心JavaMailAPI可以分為兩部分,一部分由七個類組成:Session、MessageAddressAuthenticatorTransportStore及Folder自JavamailAPI頂級包(但開發(fā)者需要使用的具體子類可能在.internet包內(nèi))??梢杂眠@些類完成大量常見的電子郵件任務(wù),包括發(fā)送消息、檢索消息刪除消息認證回復(fù)消息轉(zhuǎn)發(fā)消息管理附件處理基于HTML文MTA范疇下圖描繪了Javamail郵件收發(fā)過程。Javamail框架有一個大體了解:6.1.SessionSessionJavamailAPI最高層入口類,所有其它類都必須經(jīng)由Session對象才得以生效。Session對象管理配置選.Properties對象獲取信息,如郵件服務(wù)器、用戶名、密碼及整個應(yīng)用程序中共享的其它信息。Session類的構(gòu)造器是私有的,它不能被繼承,也不能使用new語句來getInstance和getDefaultInstance來獲取Session實例,前者創(chuàng)建一個獨立的會話,否則獲取缺省的共享會話。API明細:/javamail-1.4.1javadocsmail/6.2.Message獲得Session對象后,可以開始繼續(xù)創(chuàng)建要發(fā)送的郵件消息,這由Message類來完成,Message實現(xiàn)了Part接口,它表示一個郵件消息,包含一系列屬性(attribute)和一個消息內(nèi)容(content)消息屬性標識了消息地址DataHandler對象包裝實際數(shù)據(jù)。當郵件消息位于目錄(folder)中時,系統(tǒng)還使用一個標志位集合來描述它的狀態(tài)。Message格式。比如說,JavamailAPI提供了MimeMessage(位于.包)類,該類擴展自Message,實現(xiàn)了RFC822和MIME標準。Message的子類通常通過字節(jié)流構(gòu)建其實例,相應(yīng)的,它們也可以生成字節(jié)流來傳輸自身。API明細:/javamail-1.4.1javadocsmail/6.3.AddressAddress類表示電子郵件地址,它是一個抽象類。其子類(最經(jīng)常使用的子類是.)提供具體實現(xiàn),且通??纱谢?。在創(chuàng)建了Session和MessageAddress確定郵件消息的發(fā)送者和接收者地址。API明細:/javamail-1.4.1javadocsmail/6.4.AuthenticatorAuthenticator代表一個可以為網(wǎng)絡(luò)連接獲取認證信息的對象,它通常通過提示用戶輸入用戶名和密碼來收集認證信息,使連接可以訪問受保護的資源。對于JavamailAPI來說,這些資源就是郵件服務(wù)器。JavamailAuthenticator在包中,它和中同名的類Authenticator不同。要使用Authenticator,必須先創(chuàng)建一個它的子類實例,并且在會話對象創(chuàng)建時為會話注冊該Authenticator對象。在需要認證的時候,就會通知Authenticator。程序可以彈出窗口,也可以從配置文件中(雖然沒有加密是不安全的)讀取用戶名和密碼,并使用它們作為構(gòu)造函數(shù)參數(shù)創(chuàng)建一個PasswordAuthentication對象返回給調(diào)用程序。API明細:/javamail-1.4.1javadocsmail/6.5.Transport消息發(fā)送的最后步驟是使用Transport類。該類使用指定協(xié)議發(fā)送消息(通常是SMTP)TransportSession有些類似,可以通過靜態(tài)方法或?qū)嵗椒òl(fā)送消息Transport繼承自Service者提供了很多通用方法,如命名傳輸、連接服務(wù)器、監(jiān)聽傳輸事件等等。API明細:/javamail-1.4.1javadocsmail/6.6.StoreStoreFolder協(xié)議,以存儲和讀取消息,其子類提供具體實現(xiàn)。Store客戶程序可以通過獲取一個實現(xiàn)了數(shù)據(jù)庫訪問協(xié)議的Store對象來訪問消息存儲器,絕大多數(shù)存儲器要求用戶在訪問前提供認證信息,connect方法執(zhí)行了該認證過程。Storestore=("pop3");//指定協(xié)議(host,usename,password);//API明細:/javamail-1.4.1javadocsmail/6.7.FolderFolder是一個抽象類,用于分級組織郵件,其子類提供針對具體協(xié)議的實現(xiàn)。Folder代表的目錄可以容納消息或子目錄,存儲在目錄內(nèi)的消息被順序計數(shù)(從1開始到消息總數(shù)),該順序被稱為“郵箱順序”,通?;卩]件消息到達目錄的順序。郵件順序的變動將改變消息的序列號,這種情況僅發(fā)生在客戶程序調(diào)用Expunge方法擦除目錄內(nèi)設(shè)置了.DELETED標志位的消息時。執(zhí)行擦除操作后,目錄內(nèi)消息將重新編號??蛻舫绦蚩梢酝ㄟ^消息序列號或直接通過相應(yīng)的Message對象應(yīng)用目錄中的消息,由于消息序列號在會話中很可能改變,因此應(yīng)盡可能保存Message對象而非序列號來反復(fù)引用對象。連接到Store之后,接下來可以獲取一個文件夾(Folder)。該文件夾必須先使用open()方法打開,然后才能讀取里面的消息:Folderfolder=();//或:Folderfolder=("inbox");(_WRITE);Messagemessage[]=();open()_WRITE)inbox是POP3唯一可以使用的文件夾如果使用IMAP獲得MessagegetContent()writeTo()將內(nèi)容寫入輸出流。getContent()方法之能得到消息內(nèi)容,而writeTo()的輸出卻包含消息頭.讀完郵件之后要關(guān)閉與Folder和Store的連接:(aBoolean);();API明細:/javamail-1.4.1javadocsmail/7常用MailetAPI簡介Mailet主要包含兩個包:.mailet和.7.1.mailet此包主要用于匹配器和Mailet的編寫自定義的Mailet類需要繼承.定義的Matcher類需要繼承.或.。例子詳見第四章Mailet快速入門。API明細:javadocsapachepackage-7.2.此包主要用于郵件中的日期格式的轉(zhuǎn)換。API明細:javadocsapachedates/package-James+Javamail構(gòu)建郵件服務(wù)(五)電子郵件開發(fā)2009-11-3010:18:50閱讀33評論0字號:大中小關(guān)鍵字:jamesjavamailmailetjava郵件8Javamail的高級應(yīng)用8.1用Javamail實現(xiàn)對郵件的查找在郵件的高級應(yīng)用中,當遇到某個帳戶中的郵件數(shù)非常多的時候,而用戶往往只需要對其中的某幾封郵件進行處理倘若要把所有的郵件都取出來,再進行對應(yīng)信息的判斷提取,這無疑將大大加重郵件服務(wù)器的負擔。為了改善這種狀況,Javamail.search。這個包將通過對SearchTerm對象進行設(shè)置,而后提交給服務(wù)器,服務(wù)器端有相應(yīng)的過濾器,根據(jù)SearchTerm對象的設(shè)置將郵件過濾的結(jié)果傳回給客戶端。以提高工作效率,減輕服務(wù)器端負擔。下面就讓我們一起來做一個例子說明一下我們應(yīng)該如何使用search這個包吧。8.1.1業(yè)務(wù)描述編寫一個類,實現(xiàn)對郵件中郵件的條件搜索功能。在本例中實現(xiàn)對主題中包含“測試”,發(fā)件人是,的郵件的搜索。8.1.2編碼實現(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包實現(xiàn)對郵件的搜索功能*@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認證(".port","25");//設(shè)置smtp端口(".protocol","smtp");//發(fā)郵件協(xié)議(".protocol","pop3");//收郵件協(xié)議//創(chuàng)建會話Sessionsession=(props,null);Storestore=null;try{//連接Storestore=("pop3");("localhost",user,password);//打開FolderFolderfolder=("inbox");(_ONLY);//構(gòu)造搜索規(guī)則SearchTermsubterm=newSubjectTerm("測試");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包實現(xiàn)對郵件的搜索功能,在Search包中還存在許多功能相當完備的API有興趣可自行參考JavamailAPI。API明細:/javamail-1.4.1javadocsmailpackage-9James郵件服務(wù)器的高級應(yīng)用與配置9.1配置郵箱域名配置文件,文件位于\apps\james\SAR-INF目錄下。Java代碼<postmaster></postmaster><servernamesautodetect="true"autodetectIP="true"><!--CONFIRM?--><servername>localhost</servername></servernames>這兩項內(nèi)容,把其中的localhost改成你所要配置的域名即可。9.2將用戶信息配置為數(shù)據(jù)庫存儲方式James服務(wù)器提供了相當完善的配置方案,可選擇將用戶信息保存在文件、數(shù)據(jù)庫或其他介質(zhì)中。在默認的情況下,服務(wù)器將用戶信息以加密形式保存于\james-2.3.1\apps\james\var\users目錄下的文件中我們可以通過改變其配置信息從而改變用戶信息的保存方式。在此僅以MYSQL數(shù)據(jù)庫的配置方式為例說明。第一步:將相應(yīng)數(shù)據(jù)庫的JDBC驅(qū)動包復(fù)制到lib目錄下即我們需要把mysql-connector-java-3.1.13-的MYSQL數(shù)據(jù)庫驅(qū)動包復(fù)制到\james-2.3.1\lib目錄下第二步:新建數(shù)據(jù)庫,建立一個用于存放James用戶信息的數(shù)據(jù)庫(表不用建,由James自動創(chuàng)建),在這里,我們假設(shè)新建的數(shù)據(jù)庫為mail第三步:配置文件,文件位于\apps\james\SAR-INF目錄下。打開,找到以下內(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標簽前后的注釋標識(”<!---->”的實際情況配置好相應(yīng)的數(shù)據(jù)庫信息(包括URL、用戶名、密碼、最大連接數(shù))。然后保存,重新啟動James。James會在數(shù)據(jù)庫中自動創(chuàng)建users表用于存放郵箱的用戶信息。這樣配置以后,我們除了可以通過telnet操作用戶信息外,同樣可以通過此users表來操作用戶信息。值得注意的是,James的用戶密碼使用的是SHA單向加密算法,若需SHA的加密問題我們應(yīng)該如何來解決這個問題呢?查看James的源碼中.包中的文件,我們可以發(fā)現(xiàn),James中提供verifyPassword()和setPassword()兩個方法,verifyPassword()setPassword()密碼轉(zhuǎn)換成密文。通過仔細研究這兩個方法,可以很容易地實現(xiàn)將自己的密碼進行SHA加密了。9.3通過操作數(shù)據(jù)庫實現(xiàn)用戶信息操作在上一節(jié)我們討論了可以將James會存在SHA而真正實現(xiàn)通過操作數(shù)據(jù)庫來操作James服務(wù)器的用戶信息。9.3.1業(yè)務(wù)描述本例是基于上一節(jié)“將用戶信息配置為數(shù)據(jù)庫存儲方式”庫,即:對數(shù)據(jù)庫的信息進行增、刪、查、改等操作。本例只實現(xiàn)用戶信息的添加,關(guān)鍵在于使用James源碼包中提供的SHA加密算法實現(xiàn)用戶密碼的加密,其余功能跟一般數(shù)據(jù)庫操作無異,故不贅述。9.3.2編碼實現(xiàn)用戶添加類:Java代碼package..sample1;import.NoSuchAlgorithmException;import.Connection;import.DriverManager;import.SQLException;import..DigestUtil;/***通過操作數(shù)據(jù)庫來添加James用戶**@author(Kevin)<br>*mail:chenfengcn@<br>*qq:3*/publicclassAddUserByDB{publicstaticvoidmain(String[]args){//連接數(shù)據(jù)庫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加密//注:用戶信息的后四個屬性需要使用('SHA',0,NULL,0,null認值,若用錯,則新建用戶可能不能使用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)該如何測試此用戶是否真正創(chuàng)建成功并可使用呢?方法有很多,可以Telnet命令中的listusers使用Foxmail將此用戶添加進去,帳戶能正常接收到Foxmail發(fā)送的郵件即表明此用戶可正常使用了。1、用戶信息的后四個屬性需要使用('SHA',0,NULL,0,null)此四個默認值,若用錯,則新建用戶可能不能使用;2、在程序運行過程中,需要使用到j(luò)ames-2.3.1.jar包和相應(yīng)的數(shù)據(jù)庫驅(qū)動包,在程序運行前請確保這些包已添加到相關(guān)的位置。9.4通過Java調(diào)用Telnet實現(xiàn)用戶信息操作(未完
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度建筑圍擋施工綠色施工技術(shù)指導(dǎo)合同3篇
- 2025年度智能制造業(yè)生產(chǎn)線員工勞動合同范本4篇
- 個人汽車抵押借款合同(2024版)版B版
- 專業(yè)技師合作合同書格式一
- 2025年度美的中央空調(diào)產(chǎn)品銷售與售后無憂服務(wù)合同4篇
- 二零二五年度防雷產(chǎn)品及技術(shù)展覽會組織服務(wù)合同3篇
- 二零二五年度汽車租賃擔保合同之車輛租賃擔保協(xié)議4篇
- 個人二手房出租合同書(2024年版)版B版
- 二零二五版汽車租賃企業(yè)員工福利合同3篇
- 二零二五年度樓頂廣告牌拆除與建筑節(jié)能改造合同4篇
- 骨科手術(shù)后患者營養(yǎng)情況及營養(yǎng)不良的原因分析,骨傷科論文
- GB/T 24474.1-2020乘運質(zhì)量測量第1部分:電梯
- GB/T 12684-2006工業(yè)硼化物分析方法
- 定崗定編定員實施方案(一)
- 高血壓患者用藥的注意事項講義課件
- 特種作業(yè)安全監(jiān)護人員培訓(xùn)課件
- (完整)第15章-合成生物學(xué)ppt
- 太平洋戰(zhàn)爭課件
- 封條模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖漿
- 貨代操作流程及規(guī)范
評論
0/150
提交評論