我需要从交换/活动目录获取所有电子邮件的列表。
无论是电子邮件如j.doe@domain.com还是电子邮件组,如所有联系人或CEO,其中包含几个电子邮件地址。
到目前为止,这是我的代码:
DirectoryEntry de = new DirectoryEntry(ad_path);
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&(objectClass=addressBookContainer)(CN=All Global Address Lists,CN=Address Lists Container,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=mydomain,DC=local))";
SearchResultCollection ss = ds.FindAll(); // count = 0
答案 0 :(得分:1)
您不会直接从这些目录对象中获取Mailadresses,这些只是配置对象。如果您只想在您的组织中获取所有Mailadresses,您可以简单地查询以下内容(请注意,默认情况下结果有限):
DirectoryEntry de = new DirectoryEntry();
DirectorySearcher ds = new DirectorySearcher(de);
ds.PropertiesToLoad.Add("proxyAddresses");
ds.Filter = "(&(proxyAddresses=smtp:*))";
SearchResultCollection ss = ds.FindAll(); // count = 0
foreach (SearchResult sr in ss)
{// you might still need to filter out other addresstypes, ex: sip:
foreach (String addr in sr.Properties["proxyAddresses"])
Console.WriteLine(addr);
//or whithout the 'smtp:' prefix Console.WriteLine(addr.SubString(5));
}
如果您想获取特定交换地址列表的内容,可以修改过滤器并将其替换为该列表的“声称搜索”属性的值,例如:
(&(mailNickname=*)(|(objectClass=user)(objectClass=contact)(objectClass=msExchSystemMailbox)(objectClass=msExchDynamicDistributionList)(objectClass=group)(objectClass=publicFolder)))
这是"默认全局地址列表"的默认过滤器。或者您可以枚举所有AddressBookContainer对象(CN =所有全局地址列表,CN =地址列表容器,CN =第一个组织,CN = Microsoft Exchange,CN =服务,CN =配置,DC = mydomain,DC =本地) 用每个'purportedSearch' -Property。
进行查询