2008-12-14 105 views
4

有沒有人對我如何清理傳入郵件的主體有任何建議?我想刪除免責聲明,圖片以及可能也會出現的任何以前的電子郵件文本,這樣我只剩下正文文本內容。我的猜測是不可能以任何可靠的方式實現,但是有沒有人嘗試過?有沒有適合這種事情的圖書館?是否有可能以編程方式「清理」電子郵件?

回答

4

在電子郵件中,有一些商定的標記意味着你想要剝離的東西。您可以使用regular expressions查找這些行。我懷疑你不能真的很好「消毒」您的電子郵件,但你可以找一些事情:

  1. 線開始「>」(大於然後空格更大),標誌着報價
  2. 本着「 - - 「(然後兩個連字符的空格,然後換行)標誌着一個簽名的開始,看到Signature block on Wikipedia
  3. 多部分消息,邊界與開始 -,除此之外,你需要做一些搜索從不需要的部分郵件正文部分分開(如base64圖像)

至於實際的C#實現,我會爲您或其他SOers留下。

0

如果您創建自己的應用程序,我會查看正則表達式,找到文本並將其替換。爲了使應用程序有點不錯,我會創建一個叫做電子郵件的類,並且在該類中我有一個名爲RAW的屬性和一個名爲Stripped的屬性。

只是一些提示,你會收集其餘的時候,你看着正則表達式!

3

一些明顯的事情來看待:

  1. 如果郵件是什麼,但純粹的純文本,該消息將是多部分MIME。任何類型爲「image/*」的部分(image/jpeg等)都可能被刪除。在所有可能的情況下,任何類型不是「text/*」的部分都可以使用。
  2. 一個HTML消息可能會有一個類型爲「multipart/alternative」(我認爲)的部分,並且將包含2個部分,一個爲「text/plain」和一個爲「text/html」。這兩部分應該大致相同,因此您可以刪除HTML部分。如果唯一存在的部分是HTML位,則可能必須執行HTML以純文本轉換。
  3. 引用文本的通常格式是在文本前面加上「>」字符。您應該能夠刪除這些行,除非行開始「>從」,在這種情況下已插入「>」以防止郵件閱讀器認爲「發件人」是新郵件的開始。
  4. 簽名應該以「 - \ r \ n」開頭,儘管後面的空間很可能會丟失。
2

OSBF-Lua的第3版有一個郵件解析庫,它將處理MIME並將郵件拆分爲其MIME部分等等。我目前有一堆Lua腳本,它們會像 那樣忽略大多數非文本附件,比較喜歡純文本到HTML,等等。 (爲了保留引號,我也將長行換成80個字符。)

就刪除先前引用的郵件而言,上述建議都很好(您必須訂閱一些不合適的郵件列表)。

可靠地刪除免責聲明可能會很難。我的第一步是簡單地維護一個免責聲明庫,這個免責聲明將從每封郵件的末尾刪除;我會編寫一個腳本,使我能夠輕鬆地添加到庫中。對於更復雜的東西,我會嘗試一些機器學習。

自2007年2月以來,我一直致力於垃圾郵件過濾,並且我發現任何與電子郵件有關的事情都是一團糟。一個好的經驗法則是,無論你想要做什麼都比你想象的要困難得多:-(

1

鑑於你的問題「是否有可能以編程方式'清潔'電子郵件?」,我會回答「否,不可靠」

你所面臨的危險是不是一個真正的技術,而是一個社會學的一個

這是很容易被發現,並過濾掉,郵件的某些方面 - 。像圖像過濾out簽名和免責聲明同樣可以實現(儘管更多的是挑戰)

真正的問題是開發人員的成本它錯了。

如果您的過濾器碰巧刪除了一條關鍵信息,會發生什麼情況?你可以追溯到找到缺失的部分,或者是你的過濾desytructive?更糟糕的是,你會注意到這件作品丟失了嗎?

我在幾年前看到過一個經典的喜劇素描來說明這一點。兩個人一起在一輛車上工作。一位在做這項工作,另一位坐在附近閱讀服務手冊的指示 - 很明顯,沒有人知道他在做什麼,但他們正在盡力而爲。

手冊傢伙,朗讀:「撤消大膽的油底殼的中心......」 [轉頁]

工具的傢伙:「好吧,這出去了。」

手動人:「......在任何情況下」。

+0

這個想法出現在我身上,沒有我的過程沒有破壞性,電子郵件以原始格式保存,但我需要以其他方式使用所提供信息的元素,但是您所提出的觀點恰恰是正在嘮叨我。 – flesh 2008-12-15 10:37:06

相關問題