javamail 解析 顯示正文詳細思想

2021-04-16 11:11:33 字數 1990 閱讀 4103

(個人註解,不很全面)

當我們需要做乙個收取郵件的程式時,我們該如何去顯示復合郵件的內容呢?(原問題見『專家門診』)

今天我將我得一點心得寫出來,希望後來者能夠少走彎路。

當然也希望同志多加指正。

首先,我們需要從folder中得到乙個message物件。這一步不難實現。可以參看很多例子。當我們得到這個message物件後,下一步就是去顯示他的內容了。在這部分開始前,首先需要簡要介紹一下mimetype的幾個重要型別:

text/html

texl/plain

multipart/alternative

multipart/related

前兩個不必多介紹,乙個是html格式的正文,乙個是無格式正文。如果你的message物件是這兩個mimetype的一種的話。那麼你的郵件就不是multipart的郵件。你就可以直接去顯示他們。如下:

object o = m.getcontent();

if (m.i**imetype("text/plain")||m.i**imetype("text/html"))

s為要返回的內容字串。m為message物件。

如果你的message物件是後兩種的話,就說明你的郵件是multipart的。需要做一些處理和判斷才能正常顯示內容。如果message是multipart,只要得到multipart的各個部分(part)的內容。則整個message的內容就得到了。

if (m.i**imetype("multipart/*")

}getpart 是得到part內容的方法。

那沒如何得到part得內容呢?

這裡有一點要強調,並非得到part物件後,呼叫part.getcontent()就能得到part的內容。當初我就是在這裡被卡住了。為什麼呢?原因是:

理 論上的指明內容第乙個part,既不是乙個text/plain型別,也不是乙個text/html型別。所以,第15行是永遠不成立的。後來經過研究發 現,指明內容的第乙個part又是乙個multipart型別。也就是說,這個郵件可分為多個部分,正文和等,而正文部分又可以分為多個部分,如 plain的正文和html的正文。這樣,就象乙個樹。只有到達葉子時,你才能知道它時plain還是html。因此,我們在part中遞迴呼叫本身就解 決了問題。

1 public string getpart(part part, int partnum)

2 throws messagingexception,ioexception

3 14 contenttype ct = new contenttype(sct);

15 if (ct.match("text/plain"))

16 20 else

21 29 s=s1+s2+s3;

30 return s;

31 }

下面是經過改造的getpart方法(很粗糟,未優化),使用它能夠正確顯示復合郵件。

}希望大家**。  

android用jsoup解析html詳細教程

直接上效果圖 再來看 裡面有很詳細的注釋 tv news content.settext document document jsoup.parse string html 用乙個選擇器 條件是elements elements document.select div.inner p.name a ...

python解析庫詳解 PyQuery庫詳解

通過這篇文章為大家介紹崔慶才老師對python爬蟲pyquery庫的講解,包括基本原理及其理論知識點 目錄 一 什麼是pyquery庫?二 安裝 三 pyquery庫用法詳解 一 什麼是pyquery庫?強大而靈活的網頁解析庫。如果你覺得正則寫起來太麻煩,如果你覺得beautifulsoup語法太難...

linux top顯示的各個符號引數意義詳解

original url 在top命令執行過程中一些互動命令 從使用角度來看,熟練的掌握這些命令比掌握選項還重要一些。這些命令都是單字母的,top命令列引數 b 批處理模式 batch mode 可輸出到管道 檔案。預設情況下 b會一直輸出,可以用 nn指定輸出次數。n n限制輸出次數。d n 重新...