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

时间:2016-02-18 19:18:14

标签: c# email pop3 richedit openpop

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

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

原始图像文件名:image001.jpg

  

Content-Type:image / jpeg;名称=" image001.jpg"
      内容传输编码:base64
      内容ID:image001.jpg@01D16A6B.41013C60

并且

  

在html正文中,cid值:image001.jpg@01D16A6B.41013C60

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

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

  

Content-Type:image / jpeg;名称=" image001.jpg"
      内容处理:内联;文件名=" image001.jpg"
      内容传输编码:base64
      Content-ID:ii_iksd5tmd1_152f4c90885b6c5d

我们在richtextbox上看到了CID值:

  

CID:ii_iksd5tmd1_152f4c90885b6c5d

这是问题所在。

CID值不包含文件名信息。所以,我没有得到图像。当从Gmail收到电子邮件时,CID值会发生变化。

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

非常感谢。

3 个答案:

答案 0 :(得分:1)

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

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

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

显然,邮件HTML中的cid:URL引用了Content-Id标头值,因此如果您希望在将附件保存到磁盘后能够在以后引用附件,那么您' ll还需要将Content-Id保存在附件的数据库记录中。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

OpenPop结果:

  

内容 - 描述:null
  Content-ID:null
  Content-Disposition:null

我正在尝试其他网络界面和相同的结果。 例如:Outlook Web界面

示例:

  

RichText中的HTML BODY

     

“img src =”cid:ii_iksd5tlv0_152f4c90885b6c5d“height =”398“width =”530“>

  img src =“cid:ii_iksd5tmd1_152f4c90885b6c5d”height =“398”width =“530”>
>

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