HTML數據,我寫一個應用程序,我獲取信息並檢查它的內容:解析文本/用JavaMail
public void getInhoud(Message msg) throws IOException, Exception {
Object contt = msg.getContent();
...
if (contt instanceof String) {
handlePart((Part) msg);
}
...
}
public void handlePart(Part part)
throws MessagingException, IOException, Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
String contentType = part.getContentType();
...
if ((contentType.length() >= 9)
&& (contentType.toLowerCase().substring(
0, 9).equals("text/html"))) {
part.writeTo(out);
String stringS = out.toString();
}
...
}
我刪除了不必要的代碼。此方法適用於從Gmail,Hotmail和Outlook桌面客戶端發送的電子郵件,但以某種方式無法處理從Office 365 Web客戶端發送的電子郵件。對於其他所有客戶端,內容類型將爲「普通/文本」,但僅適用於Office 365郵件,它將爲text/html
。它將Part
的數據寫入ByteArrayOutputStream
,然後將其轉換爲String
。這工作,至少String
將包含該部分的內容。但是它包含的HTML有些錯誤。
這裏是一個例子: http://pastebin.com/5mEYCHxD(發佈到Pastebin,它非常大)。
請注意=
符號打印在幾乎每一行的末尾。這是我可以在代碼中修復的東西,還是應該放在mailclient的某個地方?
我想過循環遍歷HTML的每一行,並在檢查後刪除=
不是HTML標記的一部分。
任何幫助都非常感謝,這已經困擾了我幾個星期了。
謝謝!
這是一些非常有用的信息,謝謝!我嘗試檢索像這樣的部分的'InputStream': 'InputStream partInput = part.getInputStream(); StringWriter writer = new StringWriter(); IOUtils.copy(partInput,writer); String stringS = writer.toString();'但不知何故'InputStream'是空的,任何想法出了什麼問題? – Jef
請記住,InputStream返回**字節**,但StringWriter寫入**字符**。至少你需要告訴的是用什麼字符編碼來將字節流轉換爲字符流,你可以從該部分的Content-Type的「字符集」參數中獲得。我不知道IOUtils.copy正在做什麼,而是嘗試自己讀取流。 –