2014-09-01 53 views
0

我需要从交换/活动目录中获取所有电子邮件的列表。
无论是电子邮件如[email protected]还是电子邮件群组,如全部联系人或CEO,他们都包含几个电子邮件地址。
这是我到目前为止的代码:
C#列出MS Exchange中的所有电子邮件地址

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 

回答

1

你不会得到Mailadresses这些目录的直接对象,这些仅仅是配置对象。如果你只是想获得的所有Mailadresses在你的组织,你可以简单地查询以下(注意,默认情况下,有限的resultsize):

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

     } 

如果你想获得具体的交换地址列表中的内容,你可以修改你的过滤器,并与该列表的“purportedSearch'-属性的值替换它,例如:

(&(mailNickname=*)(|(objectClass=user)(objectClass=contact)(objectClass=msExchSystemMailbox)(objectClass=msExchDynamicDistributionList)(objectClass=group)(objectClass=publicFolder))) 

这是‘默认全局地址列表’默认过滤器。或者,您可以枚举(CN =所有全局地址列表,CN =地址列表容器,CN =第一个组织,CN = Microsoft Exchange,CN =服务,CN =配置,DC = mydomain,DC =本地)中的所有AddressBookContainer对象用每个“purportedSearch”属性进行查询。

相关问题