我在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). Great condition.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </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"> <img width="212" height="313" id="Picture_x0020_2" src="cid:image002.jpg@01CFD899.89339A10"> <img width="281" height="469" id="Picture_x0020_3" src="cid:image003.jpg@01CFD899.89339A10"><o:p>
</o:p></p>
</div>
</body>
答案 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
}