FindItems() и BindToItems() дают противоречивые результаты для EmailMessage.Sender.Address
После значительной отладки я уточнил сложную проблему 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 и Sender
не на этом. В чем дело?
1 ответ
На самом деле я не знаю почему, но во втором варианте он загружает только основную информацию об отправителе, такую как имя, но не адрес.
Если вы хотите загрузить все свойства отправителя, но не хотите связывать полное сообщение, вы можете добавить следующую строку перед первым утверждением
service.LoadPropertiesForItems(findResults.Items, new PropertySet(EmailMessageSchema.Sender));