我编写了一个WebAPI控制器方法,该方法通过ExchangeOnline中的唯一ID查找邮件。我写了一个小模型类,以存储邮件的一些属性,如主题,发件人,收到的日期等。
现在,如果邮件包含此类附件,我还想访问文件附件。因此,我编写了这段代码(只是相关部分):
List<AttachmentItem> attDataContainer = new List<AttachmentItem>();
EmailMessage originalMail = EmailMessage.Bind(service, new ItemId(uniqueID), new PropertySet(ItemSchema.Attachments));
foreach (Attachment att in originalMail.Attachments)
{
if (att is FileAttachment && !att.IsInline)
{
FileAttachment fa = att as FileAttachment;
fa.Load();
attDataContainer.Add(
new AttachmentItem
{
ID = fa.Id,
Name = fa.Name,
ContentID = fa.ContentId,
ContentType = fa.ContentType,
ContentLocation = fa.ContentLocation,
Content = Convert.ToBase64String(fa.Content),
Size = fa.Size
});
}
}
该方法确实找到附件并显示您可以在&#34; AttachmentItem&#34;中看到的所有属性。 object - 但不是fa.Content 属性。
我几乎找到了我能找到的任何文件(特别是* .Load()部分以及很多例子。但在我的情况下,我得到&#34; byte [0]&#34;在调试时输出
你对我有什么想法可能是什么原因吗?
PS:顺便说一下,我引用了Microsoft.Exchange.WebServices的v2.0.50727版本。
提前致以最诚挚的问候和谢意, 马可
答案 0 :(得分:0)
当您在附件上调用load方法时,该方法应向服务器发出GetAttachment请求,该请求将返回该附件的数据。如果启用跟踪https://msdn.microsoft.com/en-us/library/office/dn495632(v=exchg.150).aspx,那么应该允许您遵循应该帮助进行故障排除的基础SOAP请求(例如,您可以看到服务器返回的内容很重要)。
要检查的另一件事是,这是一个真正的附件与One Drive附件,可能是ExchangeOnline的情况。