我在摆弄OpenPop,这是一个用C#编写的用于POP3邮件提取的库。它似乎还可以,但我不太明白如何区分邮件中明确附加的文件和HTML内容邮件中的图片等内容。这个库将它们全部视为"附件"。出于我的需要,我不会将HTML邮件中的图片视为附件
来自库文档:
如果
,MessagePart被视为附件-它不包含文本,也不是多部分消息或
-它有一个Content-Disposition头,上面写着它是一个附件
我应该做什么或搜索什么,至少在理论上是这样(因为我对邮件协议并不熟悉)?
您可以检查电子邮件正文中是否引用了图像文件。您需要解析HTML并在CSS选择器中查找img
或background-image
属性等标记。如果邮件本身没有使用该图像,则将其视为"真实"附件。
我用这种方式完成了它,它似乎起作用了:
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
}
}
我是OpenPop.NET.的开发人员
这只是关于包含附件的电子邮件的一些背景信息。托尼的答案是正确的。
当我实现OpenPop.NET的那个部分时,我也遇到了区分附件和非附件的问题。MIME有一个标头Content-Disposition
,它能够判断某个部分是否是附件。
例如,这里有一个附件
Content-Disposition: attachment
这里可能是电子邮件的html部分的图像
Content-Disposition: inline
这看起来有多好,问题是许多电子邮件客户端没有添加这些标题,这让像OpenPop.NET这样的读者很难理解。我们选择不查看电子邮件的所有HTML部分来查看引用了哪些图像,因此这现在取决于库的用户。
如果你为这个问题制定了一个好的解决方案,它可以作为项目的一个例子添加。