2012-03-04 38 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 
    } 
}