使用 EWS 托管访问共享联系人 API (Exchange 2010)
Accessing Shared Contacts with EWS Managed API (Exchange 2010)
我目前正在开展一个项目,我需要从共享联系人(姓名、邮寄地址等)中获取信息,以比较多个共享文件夹并查找重复条目。
我在 Visual Studio 2015 年编码。该程序只是一个控制台应用程序,它创建一个 excel sheet,其中标记了重复的联系人。
Exchange 服务器是 2010 SP1。
联系人是通过电子邮件共享的。
我可以毫无问题地访问我自己的联系人。但是我无法访问共享给我的文件夹。
我试图遵循这个 Guide。
但不幸的是,这一行给了我一个空指针异常。
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);
}
}
}
}
我找到了解决方案。
而且它比预期的要容易得多。
我意识到我应该在 WellKnownFolderName.Root 而不是 WellKnownFolderName.Contacts 中查找文件夹。
因为 WellKnownFolderName.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);
这已经是它了。
我目前正在开展一个项目,我需要从共享联系人(姓名、邮寄地址等)中获取信息,以比较多个共享文件夹并查找重复条目。
我在 Visual Studio 2015 年编码。该程序只是一个控制台应用程序,它创建一个 excel sheet,其中标记了重复的联系人。
Exchange 服务器是 2010 SP1。
联系人是通过电子邮件共享的。
我可以毫无问题地访问我自己的联系人。但是我无法访问共享给我的文件夹。
我试图遵循这个 Guide。 但不幸的是,这一行给了我一个空指针异常。
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);
}
}
}
}
我找到了解决方案。 而且它比预期的要容易得多。
我意识到我应该在 WellKnownFolderName.Root 而不是 WellKnownFolderName.Contacts 中查找文件夹。 因为 WellKnownFolderName.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);
这已经是它了。