2012-03-04 65 views
6

我正在搞OpenPop,一個用C#編寫的用於POP3郵件獲取的庫。它似乎可以正常工作,但我並沒有完全明白如何在明確附加的文件與郵件之間做出區別,以及HTML內容郵件中的圖片等內容。這個庫將它們全部視爲「附件」。爲了我的需要,我不會考慮HTML郵件附件中的圖片。
從庫文檔:如何在html郵件中區分「真實」郵件附件和圖片?

甲MessagePart被認爲是一個附件,如果
- 它不保持文本並且不是多部分消息 或
- 它具有一個內容處理標頭那說它是一個附件

我該怎麼做或搜索,至少在理論上(因爲我不是很熟悉郵件協議)?

回答

4

您可以檢查圖像文件是否在電子郵件正文中被引用。您需要解析HTML並在CSS選擇器中查找諸如imgbackground-image屬性的標籤。如果圖像未被消息本身使用,則認爲它是「真正的」附件。

3

我是OpenPop.NET的開發者。

這只是關於電子郵件包含附件的一些背景信息。託尼小馬的答案是要走的路。

當我實現OpenPop.NET的這一部分時,我也有區分附件和非附件的問題。 MIME has a header, Content-Disposition能夠判斷某個部分是否爲附件。

例如,這裏是一個附件

Content-Disposition: attachment 

,在這裏可以對電子郵件

Content-Disposition: inline 

多好啊,這似乎的HTML部分的圖像,這個問題是很多電子郵件客戶端不會添加這些頭文件,這使OpenPop.NET等讀者很難。我們選擇不查看電子郵件的所有HTML部分以查看正在引用的圖像,因此現在由圖書館的用戶來決定。

如果您針對該問題制定了一個很好的解決方案,則可以將其添加爲該項目的示例。

+0

其實是很經常在那裏當內容處置是電子郵件空。 「Content-Disposition:attachment」發生。許多電子郵件客戶端正在使用它。但內聯,即使它是規範,它仍然失蹤。 – Marcin 2012-03-05 07:54:01

+0

@foens是的,在進一步閱讀openpop.net文檔並閱讀關於MIME的更多信息時,我意識到這可能有點棘手。無論如何,謝謝你的澄清,如果我想出了一些可用的東西,我會告訴你,我想我有一些想法。 – Less 2012-03-05 09:24:22

3

我已經做到了這種方式,它似乎工作:

foreach (OpenPop.Mime.MessagePart fileItem in elencoAtt) 
{ 
    System.Net.Mime.ContentDisposition cDisp = fileItem.ContentDisposition; 

    //Check for the attachment... 
    if (!cDisp.Inline) 
    { 
     // Attachment not in-line 
    } 
    else 
    { 
     // Attachment in-line 
    } 
}