Получите доступ к почтовому ящику другого пользователя, чтобы получить структуру его папок

Как можно получить структуру папок определенного пользователя без использования ExchangeService с паролем?

У меня, безусловно, есть права на чтение информации, но я не могу найти способ сделать это. Я ищу что-то вроде этого:

Mailbox userMailbox = new Mailbox(user);

WellKnownFolderName userFolderName = userMailbox.WellKnownFolderName.MsgFolderRoot;

FindFoldersResults findFoldersResults = exchangeService.FindFolders(userFolderName, new FolderView(int.MaxValue));

Но на самом деле я не могу получить доступ к другим WellKnowFolderNames или напрямую к его папкам.

Изменить: у меня был новый подход, но, к сожалению, он не вернул ни одного элемента:

// Create mailbox for user
Mailbox mailbox = new Mailbox(user);

// Create a searchfolder to verify the used folder id is the same like the given folder id
SearchFilter.IsEqualTo folderIdFilter = new SearchFilter.IsEqualTo(ItemSchema.Id, folderId);

// Create new folder id
FolderId usersFolderId = new FolderId(WellKnownFolderName.Root, mailbox);

// Find items with search criteria
itemResult = getExchangeService().FindItems(usersFolderId, folderIdFilter, viewBase);

person Zumarta    schedule 03.08.2016    source источник


Ответы (1)


itemResult = getExchangeService().FindItems(usersFolderId, folderIdFilter, viewBase);

Доступ будет только к элементам в корневой папке, в которых для большинства почтовых ящиков ничего не будет. Все, что вам нужно сделать, это использовать перегрузку FolderId и FindFolders, например

        FolderId RootFolder = new FolderId(WellKnownFolderName.MsgFolderRoot, "[email protected]");
        FolderView FolderVw = new FolderView(1000);
        FolderVw.Traversal = FolderTraversal.Deep;
        FindFoldersResults findFoldersResults = null;
        do
        {
            findFoldersResults = service.FindFolders(RootFolder, FolderVw);
            foreach (Folder mbFolder in findFoldersResults)
            {
                Console.WriteLine("Processing Folder " + mbFolder.DisplayName);
            }
            FolderVw.Offset += findFoldersResults.Folders.Count;
        } while (findFoldersResults.MoreAvailable);
person Glen Scales    schedule 04.08.2016
comment
Спасибо, это сработало! Вы, наверное, знаете, как сделать один и тот же процесс для получения всех предметов конкретного пользователя? Проблема в том, что в этой ситуации я не могу установить FolderId для почтового ящика, потому что мне нужно использовать данный FolderId, чтобы найти все элементы в этой папке определенного пользователя. - person Zumarta; 05.08.2016
comment
Если вы хотите получить все элементы в почтовом ящике, лучший подход — просто перечислить элементы в каждой папке (используя findItems), например, в приведенном выше примере поместите что-то в цикл по каждому элементу. Пейджинг ограничит вас обработкой элемента партиями по 1000. Если вы просто хотите найти элемент в почтовом ящике, Ediscovery в 2013 и более поздних версиях можно использовать для поиска элемента или элементов в почтовом ящике, которые соответствуют критериям поиска msdn.microsoft.com/en-us/library/ офис/ - person Glen Scales; 08.08.2016
comment
Спасибо, я могу использовать это в другом месте, но я имел в виду другое: у меня есть идентификатор папки в почтовом ящике, и я хочу получить все элементы, которые находятся в этом почтовом ящике. Я не знаю, являются ли все идентификаторы папок глобально уникальными, тогда я мог бы просто найти эту папку и получить ее элементы. Но являются ли идентификаторы папок уникальными для всех почтовых ящиков? - person Zumarta; 08.08.2016
comment
Да, FolderId является глобальным уникальным, например, это все, что вам нужно для привязки к папке в почтовом ящике. Если вы хотите получить все элементы в почтовом ящике, все, что вам нужно, это SMTP почтового ящика, затем привязать и перечислить папки, а затем элемент. Хранить EWSId — не лучшая идея, так как они могут измениться, см. msdn.microsoft.com/en-us/library/office/ - person Glen Scales; 09.08.2016
comment
Хорошо, спасибо за ответ! Я предполагаю, что изменения идентификатора влияют только на идентификаторы элементов, а не на идентификаторы папок, но то, как я это обрабатываю, всегда будет обновлять элементы, поэтому изменения должны быть замечены в системе. - person Zumarta; 09.08.2016