【问题标题】:Accessing Shared Contacts with EWS Managed API (Exchange 2010)使用 EWS 托管 API (Exchange 2010) 访问共享联系人
【发布时间】:2018-05-17 05:33:47
【问题描述】:

我目前正在开展一个项目,我需要从共享联系人(姓名、邮件地址等)中获取信息,以比较多个共享文件夹并查找重复条目。

我在 Visual Studio 2015 中进行编码。该程序只是一个控制台应用程序,它创建一个 Excel 工作表,其中标记了重复的联系人。

Exchange Server 是 2010 SP1。

联系人通过电子邮件共享。

我可以毫无问题地访问自己的联系人。但我无法访问与我共享的文件夹。

我试图关注这个Guide。 但不幸的是,这条线给了我一个空指针异常。

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

而且我真的不明白这部分应该是什么,所以我无法真正修复它。这是我第一次使用 EWS 托管 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);
                            }
                        }

                    }

                }

【问题讨论】:

    标签: c# exchangewebservices contacts exchange-server-2010


    【解决方案1】:

    我找到了解决方案。 这比预期的要容易得多。

    我意识到我应该在 WellKnownFolderName.Root 中而不是在 WellKnownFolderName.Contacts 中查找文件夹。 因为 WellKnownFolderName.Contacts 是为 Contacts 文件夹保留的。不像我想的 all 联系人文件夹。

    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);
    

    就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      相关资源
      最近更新 更多