FindItems()和BindToItems()为EmailMessage.Sender.Address提供不一致的结果

时间:2012-01-18 03:18:53

标签: exchange-server exchangewebservices managed-ews

经过大量的调试后,我将一个复杂的Managed EWS问题简化为以下两个简单的测试用例。第一个工作,第二个工作失败:

var view = new ItemView(100) { PropertySet = new PropertySet { EmailMessageSchema.Id } };
var findResults = ews.FindItems(WellKnownFolderName.Inbox, view)
var bindResults = ews.BindToItems(findResults.Select(r => r.Id), new PropertySet { EmailMessageSchema.Sender });

// Sanity check
Assert.AreEqual(1, bindResults.Count());

// The results I care about
Assert.AreEqual("David Seiler", bindResults[0].Sender.Name);
Assert.AreEqual("david.seiler@yahoo.com", bindResults[0].Sender.Address);

有人可能会尝试删除BindToItems()来电,直接使用FindItems()

var view = new ItemView(100) { PropertySet = new PropertySet { EmailMessageSchema.Sender } };
var findResults = ews.FindItems(WellKnownFolderName.Inbox, view)

// This part still works fine
Assert.AreEqual(1, findResults.Count());

// So does this
Assert.AreEqual("David Seiler", findResults[0].Sender.Name);

// ...but this fails!  Sender.Address is null
Assert.AreEqual("david.seiler@yahoo.com", findResults[0].Sender.Address);

谁能告诉我哪里出错了?从文档中可以看出,这似乎应该有效。并非所有属性都可以通过FindItems()读取,这是真的,但是当我尝试访问它们时,这些属性通常会抛出,无论如何,MSDN上有list个属性Sender isn'在它上面。发生了什么事?

1 个答案:

答案 0 :(得分:3)

实际上我不知道为什么,但在第二个选项中,它只加载发件人的基本信息,如名称,而不是地址。

如果要加载所有发件人属性但不想绑定完整邮件,可以在第一个断言之前添加以下行

service.LoadPropertiesForItems(findResults.Items, new PropertySet(EmailMessageSchema.Sender));