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));
Другие вопросы по тегам