#c# #microsoft-graph-api #exchangewebservices
#c# #microsoft-graph-api-интерфейс #exchangewebservices #microsoft-graph-api
Вопрос:
Я не могу получить узлы разговора из сообщения электронной почты, используя MS graph API. Мне нужен последний элемент электронной почты.
Мое приложение использовало Microsoft.Обмен.Веб-сервисы для получения электронной почты и разговоров, теперь я обновляю это приложение до MS Graph API.
Старый код:
EmailMessage email = EmailMessage.Bind(service, new ItemId(emailId));
ConversationResponse response = service.GetConversationItems(email.ConversationId,
properties,
null,
null,
ConversationSortOrder.TreeOrderAscending);
foreach (ConversationNode objC in response.ConversationNodes)
{
foreach (Item objItem in objC.Items)
{
objItem.Load(new PropertySet(EmailMessageSchema.UniqueBody, ItemSchema.Attachments,
EmailMessageSchema.Sender,
EmailMessageSchema.Subject));
}
}
Graph API:
Message message = await _client.Users[_config.UserName].Messages[emailId]
.Request()
.GetAsync();
Я не нашел никакого свойства или метода для получения узлов беседы в сообщении.
Ответ №1:
Вы можете использовать conversationId и фильтр, чтобы получить все сообщения в разговоре, например, что-то вроде
var ConversationMessages = await GraphServiceClient.Users[UserId].Messages.Request().Filter("conversationid eq '" Message.ConversationId "'").GetAsync();
Если вы хотите, чтобы сообщения возвращались в порядке последнего получения, вам также необходимо включить receivedDateTime в фильтр, тогда вы можете упорядочивать по нему (без получения ошибки), например
var ConversationMessages2 = await GraphServiceClient.Users[UserId].Messages.Request().Filter("(receivedDateTime gt 2020-08-20) and (conversationid eq '" Message.ConversationId "')").OrderBy("receivedDateTime desc").GetAsync();