如何使用EWS检索嵌入在电子邮件正文中的图像

时间:2014-09-25 17:47:48

标签: exchangewebservices

我在C#中使用EWS查询邮箱中的电子邮件。我能够收到电子邮件正文消息。我想知道如何在电子邮件中嵌入图像。

以下是电子邮件正文的示例。我想下载图像“cid:image002.jpg@01CFD899.89339A10”,我该怎么做?

<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Solid wood dining table with 6 chairs (2 captain chairs, 4 armless).&nbsp; Great condition.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><img width="469" height="287" id="Picture_x0020_1" src="cid:image001.jpg@01CFD899.89339A10">
<o:p></o:p></p>
<p class="MsoNormal">&nbsp;<img width="212" height="313" id="Picture_x0020_2" src="cid:image002.jpg@01CFD899.89339A10">&nbsp;&nbsp;&nbsp;&nbsp;<img width="281" height="469" id="Picture_x0020_3" src="cid:image003.jpg@01CFD899.89339A10"><o:p>
</o:p></p>
</div>
</body>

3 个答案:

答案 0 :(得分:3)

图像应该在Attachments集合中,因此您应该能够通过附件集合枚举找到匹配的Cid并下载它。附件集合不会与FindItems操作一起返回,因此您需要确保在Message上使用GetItem操作来获取这些详细信息,例如

        ItemView view = new ItemView(100);
        view.PropertySet = new PropertySet(PropertySet.IdOnly);
        PropertySet PropSet = new PropertySet();
        PropSet.Add(ItemSchema.HasAttachments);
        PropSet.Add(ItemSchema.Body);
        PropSet.Add(ItemSchema.DisplayTo);
        PropSet.Add(ItemSchema.IsDraft);
        PropSet.Add(ItemSchema.DateTimeCreated);
        PropSet.Add(ItemSchema.DateTimeReceived);
        PropSet.Add(ItemSchema.Attachments);
        FindItemsResults<Item> findResults;
        do
        {
            findResults = service.FindItems(WellKnownFolderName.Inbox, view);
            if (findResults.Items.Count > 0)
            {
                service.LoadPropertiesForItems(findResults.Items, PropSet);
                foreach (var item in findResults.Items)
                {
                    foreach (Attachment Attach in item.Attachments) {
                        if (Attach.IsInline) {

                            Console.WriteLine(Attach.ContentId);
                            if(Attach.ContentId == "image001.png@01CFDBF0.192F54C0"){
                                ((FileAttachment)Attach).Load(@"c:\temp\downloadto.png");
                            }
                        }
                    }                      
                }
            }
            view.Offset += findResults.Items.Count;
        } while (findResults.MoreAvailable);

干杯 格伦

答案 1 :(得分:0)

对于内联附件,HasAttachments属性为false,即使已填充“附件”集合也是如此。这令人困惑。

答案 2 :(得分:0)

如果您调用item.Load(),也会执行此操作

foreach (var item in findResults.Items)
{ 
       item.Load(); // this will load everything
}