Как получить КАЖДЫЕ почтовые сообщения (включая Удаленные, Архивные и Восстанавливаемые элементы) для пользователя O365 с Graph API? - PullRequest
0 голосов
/ 08 декабря 2018

Мы работаем над приложением в области соответствия / мониторинга, где мы отслеживаем деятельность отдельного человека.Из-за этого мы хотим извлечь ВСЕ в почтовый ящик пользователя Office 365 - если в нем есть текст, написанный или полученный пользователем, мы хотим, чтобы он был там, даже если он был удален, очищен и т. Д.

Мы используем Graph API и имеем существующую реализацию, которая использует стандартную команду GET «messages»:

GET https://graph.microsoft.com/v1.0/me/messages

Мы используем GraphApiClient (Microsoft.Graph v1.9.0), поэтому код на самом делевыглядит примерно так:

IUserMessagesCollectionPage pageOfMessages = _graphClient.Users[userId].Messages.Request(options).Top(batchSize).Expand("attachments").GetAsync().Result;

Однако, по крайней мере, это не возвращает никаких элементов ни из одной из папок RecoverableItems.Посмотрев его, я теперь подозреваю, что могут быть и другие папки, которые не возвращаются этой командой.Существует довольно большой список известных имен папок , и я не уверен, что другие могут не быть включены в общий запрос сообщений.

Основываясь на этом сообщении , я знаю, что вы можете запрашивать сообщения в отсутствующих папках по WellKnownFolderName по одному, например:

GET https://graph.microsoft.com/v1.0/me/MailFolders/RecoverableItemsDeletions/messages

Это работает даже сGraphApiClient:

IMailFolderMessagesCollectionPage pageOfMessages = _graphClient.Users[userId].MailFolders["RecoverableItemsDeletions"].Messages.Request(options).Top(batchSize).Expand("attachments").GetAsync().Result;

Проблемы с этим:

  1. Я не знаю, как создать полный список каждой папки, в которой есть сообщения для пользователя
  2. Некоторые из папок (например, RecoverableItemsDeletions и ArchiveRecoverableItemsDeletions) могут содержать дубликаты, поэтому мне потребуется использовать словарь, чтобы избавиться от дубликатов
  3. Сначала было бы намного дороже создатьсписок соответствующих папок, а затем запрашивать их содержимое и содержимое их детей по одному запросу за раз.
  4. При масштабировании реализация папок за папками может подвергаться throttling (если мыотслеживает достаточно пользователей с достаточно большими почтовыми ящиками)

Кто-нибудь знает лучший способ сделать это?Спасибо!

...