C#列出MS Exchange中的所有电子邮件地址

时间:2014-09-01 09:35:32

标签: c# active-directory exchange-server-2010

我需要从交换/活动目录获取所有电子邮件的列表。
无论是电子邮件如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

1 个答案:

答案 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。

进行查询