Доступ к общим контактам с помощью EWS Managed API (Exchange 2010) - PullRequest
0 голосов
/ 17 мая 2018

В настоящее время я работаю над проектом, в котором мне нужно получить информацию от общих контактов (имя, почтовый адрес и т. Д.), Чтобы сравнить несколько общих папок и найти повторяющиеся записи.

Я пишу код в Visual Studio 2015. Программа представляет собой просто консольное приложение, которое создает лист Excel, где отмечены дублирующиеся контакты.

Сервер Exchange Server 2010 SP1.

Контакты доступны по электронной почте.

У меня нет проблем, чтобы получить доступ к своим контактам.Но я не могу добраться до папок, которые мне доступны.

Я пытался следовать этому Руководству .Но, к сожалению, эта строка дает мне исключение nullpointer.

NameResolutionCollection ncCol = service.ResolveName(lnLegDN, ResolveNameSearchLocation.DirectoryOnly, true);
                        if (ncCol.Count > 0)

И в дальнейшем я не совсем понимаю, что эта часть должна делать, так что я не могу это исправить.Я впервые работаю с EWS Managed API.

После изменения кода я могу получить доступ к папке contacts из другого почтового ящика.Но это не та папка, которая мне доступна.

Итак, мой вопрос, как я могу получить папку контактов с именем "CheckForDuplicates", например.Есть ли способ?

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

 foreach (Item itItem in fiResults.Items)
                {
                    object WlinkStoreEntryId = null;
                    if (itItem.TryGetProperty(PidTagWlinkStoreEntryId, out WlinkStoreEntryId))
                    {
                        string lookup = itItem.Subject;
                        string[] lookupArr = lookup.Trim().Split(new Char[] {'-'});
                        NameResolutionCollection ncCol = service.ResolveName(lookupArr[0], ResolveNameSearchLocation.DirectoryOnly, true);
                        if (ncCol.Count > 0)
                        {
                            try
                            {
                                Console.WriteLine(itItem.Subject);
                                FolderId SharedContactsId = new FolderId(WellKnownFolderName.Contacts, ncCol[0].Mailbox.Address);
                                Folder SharedContactFolder = Folder.Bind(service, SharedContactsId);
                                rtList.Add(ncCol[0].Mailbox.Address, SharedContactFolder);
                            }
                            catch (Exception exception)
                            {
                                Console.WriteLine(exception.Message);
                            }
                        }

                    }

                }

1 Ответ

0 голосов
/ 17 мая 2018

Я нашел решение.И это намного проще, чем ожидалось.

Я понял, что мне нужно искать папки в WellKnownFolderName.Root, а не в WellKnownFolderName.Contacts.Потому что WellKnownFolderName.Contacts зарезервировано для Contacts -Folder.И не так, как я думал для всех папок контактов.

FolderId sharedRootFolderid = new FolderId(WellKnownFolderName.Root, ncCol[0].Mailbox.Address);
FolderView sharedFolderView = new FolderView(1000);
sharedFolderView .PropertySet = new PropertySet(BasePropertySet.IdOnly);
sharedFolderView .PropertySet.Add(FolderSchema.DisplayName);
sharedFolderView .Traversal = FolderTraversal.Deep;
SearchFilter testSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "CheckForDuplicates");
FindFoldersResults sharedContacts = service.FindFolders(sharedRootFolderid , testSearchFilter, sharedFolderView);

И это уже все.

...