好好工作,好好生活
這里,我用pop3連126.com的郵箱取到郵件,解析郵件附件。我的工作是取到jpg或gif圖片并保存。
說明:這是我的在工作中寫的代碼,是可用的。但是有部分代碼被截取出來,比如有些參數(shù)我覺得沒有必要,就刪除了,沒有測試。可能會有bug,但是肯定是小bug。
注1:使用的協(xié)議是pop3,因?yàn)檫@里不需要發(fā)送郵件,只度讀取郵件,pop3協(xié)議比較簡單方便
注2:這個函數(shù)沒有一次處理所有的郵件,因?yàn)闆]有這個必要。如果需要一次處理所有郵件的話,將for循環(huán)的那部分刪除就可以了
注3:message的類型可以是text/plain,text/html或者是multipart/*等類型的。但是只有multipart/*才是有附件的郵件。當(dāng)然,有的郵件系統(tǒng)是將郵件內(nèi)容作為附件來傳遞的。
注4:解析郵件的過程中可能會出現(xiàn)異常,比如我碰到的一個很奇怪的異常就是,當(dāng)part不為null的時(shí)候,part.getFileName()拋出為空的異常。如果不捕獲這個異常,會出問題,究竟是什么問題,我在注6里講解。現(xiàn)在,捕獲這個異常。這個郵件是有問題的,如果不刪除,下次出來還是會拋異常,于是我們給他置一個刪除標(biāo)志。
注5:將已處理的郵件置刪除標(biāo)志。很奇怪,置刪除標(biāo)志的郵件不是被放在了垃圾箱里,而是被徹底刪除了,所以用的時(shí)候要小心。但是如果繼續(xù)留在收件箱,下次又會被處理一次
注6:當(dāng)前面的郵件解析操作正常結(jié)束的時(shí)候,folder.close(true)會執(zhí)行。這個時(shí)候,才會將剛剛置了刪除標(biāo)志的郵件刪除。前面說過異常如果沒有被捕獲會出問題。這個問題就是,前面的郵件已經(jīng)處理了,并且置上了刪除標(biāo)志,但是碰到問題郵件的時(shí)候拋出異常,沒有被及時(shí)捕獲,于是folder.close(true)不會被執(zhí)行,那些該刪除的郵件就沒有刪除。那么當(dāng)你再調(diào)用這個connectMail的時(shí)候就會重復(fù)的處理郵件。我是在servlet里寫的定時(shí)器來調(diào)用這個函數(shù)的,當(dāng)時(shí)出問題,于是有的郵件被重復(fù)解析了200多次,這是很可怕的數(shù)字。
注1:part.getContentType()說明取不到這個message的類型,直接返回,不需處理
注2:根據(jù)我的需求,我只需處理圖片類型,也就是說,只要這3種類型的message,其他的都可以忽略
注3:email是遵循一些編碼方式的,大部分用的是base64,但是java mail提供解碼的工具,這就是MimeUtility.decodeText(s)
注4:再對文件類型做一次判斷(其實(shí)我覺得是不需要的,但是嚴(yán)整完整一點(diǎn)還是好些)
注5:有的操作系統(tǒng)對InputStram這樣的對象有限制,限制同時(shí)打開的InputStream個數(shù),例如linux中就有這樣的限制。所以在打開了一個InputStream最好關(guān)閉。當(dāng)然,如果不關(guān)閉,java的自動回收功能也回回收這個InputStream
Powered by: BlogJava Copyright © hopeshared