C#接收带有内嵌图像和cid值的pop3电子邮件

C# Receiving pop3 email with inline images and cid value

我正在努力通过OpenPop组件接收pop3电子邮件。我正在接收来自服务器的电子邮件并将其保存到sql数据库。至此,没有问题。

但是今天,我意识到,一些图像没有显示在Richtextbox上。
这封电子邮件的源代码:

原始图像文件名:image001.jpg

Content-Type: image/jpeg; name="image001.jpg"
Content-Transfer-Encoding: base64
Content-ID: [email protected]

In html body, cid value : [email protected]

有了上面的代码,我没有任何问题。因为我正在从CID值获取图像文件名。 (image001.jpg)。我正在从SQL Server获取具有真实图像文件名的图像。

但是,如果我们通过Gmail网络界面发送相同的电子邮件,

Content-Type: image/jpeg; name="image001.jpg"
Content-Disposition: inline; filename="image001.jpg"
Content-Transfer-Encoding: base64
Content-ID: ii_iksd5tmd1_152f4c90885b6c5d

我们在richtextbox上看到CID值:

cid:ii_iksd5tmd1_152f4c90885b6c5d

这是问题所在。

CID值不包含文件名信息。因此,我没有得到图像。从Gmail接收电子邮件时,CID值正在更改。

为了捕获真实的图像文件名,我该怎么办?

非常感谢。


使用以下逻辑来获取文件名:

如果Content-Disposition标头存在,则使用filename参数值作为附件文件名。否则,退回到使用Content-Type标头上的name参数值(如果存在)。

Content-Id标头值可以是任何值,您真正可以期望的是它是消息上下文中的唯一字符串。

显然,消息HTML中的cid:URL是指Content-Id标头值,因此,如果您希望以后在将附件保存到磁盘后能够引用该附件,则还需要保存附件的数据库记录中的Content-Id


OpenPop结果:

Content-Description : null
Content-ID : null
Content-Disposition : null

我正在尝试另一个Web界面和相同的结果。
例如:Outlook Web界面

例子 :

HTML BODY in RichText

"img src="cid:ii_iksd5tlv0_152f4c90885b6c5d" height="398" width="530">
img src="cid:ii_iksd5tmd1_152f4c90885b6c5d" height="398" width="530">?>

原始图像文件名:DSC00011.jpg和DSC00018.jpg


在HTML邮件中内联使用的图像不一定具有"真实文件名"。他们可能只使用CID。您应该将CID与图像一起存储在数据库中,然后通过CID从数据库中检索图像以显示它。