从电子邮件中获取图像

时间:2012-02-29 13:20:35

标签: c# exchangewebservices

我注意到当有人复制粘贴电子邮件然后发送它时,图像的“src”值会发生变化。例如,如果原始电子邮件的图像是附件,其contentId是:cid:companlyLogo。然后有人将此电子邮件复制粘贴到新草稿中并将此src值更改发送到:src =“cid:image001.jpg@01CCF6B1.A4CA2FE0”。

我对如何获取此图像并将其保存在c#中的图像对象中一无所知。我目前正在使用EWS api来执行此操作。问题是,因为它的复制粘贴它不再具有作为原始电子邮件的附件。

有没有人知道如何检索此类电子邮件的图像?

1 个答案:

答案 0 :(得分:3)

Exchange将嵌入图像视为电子邮件附件。这意味着您可以从Item.Attachments属性中检索图像。以下示例说明如何使用EWS托管API执行此操作。请注意,除非您通过调用LoadPropertiesForItems明确告知附件,否则EWS不会加载附件。

您可以通过检查Attachment.IsInline属性来判断是否嵌入了附件。 EWS允许您通过调用FileAttachment.Load方法加载附件并将其保存到磁盘。

ExchangeService service = GetService();
var view = new ItemView(1);
var searchFilter = new SearchFilter.IsEqualTo(EmailMessageSchema.Subject, "Some subject text");
var items = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);
service.LoadPropertiesForItems(items, new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments));

var item = items.ElementAt(0) as EmailMessage;

for (int i = 0; i < item.Attachments.Count; i++)
{
    var att = item.Attachments[i] as FileAttachment;
    if (att.IsInline && att.ContentType.Contains("image"))
    {
        att.Load(String.Format(@"c:\temp\attachedimage_{0}.jpg", i));
    }
}