【发布时间】:2014-11-04 20:03:44
【问题描述】:
我正在遍历我们 AD 环境中的所有用户,并读取他们的电子邮件地址,以便我可以在另一个系统中更新它。我正在使用System.DirectoryServices 库。下面的简化示例。我发现mail 属性并不总是正确的,即使用户在 Exchange 中具有有效的邮箱设置和功能,它也经常丢失。所以,问题是,给定DirectoryEntry,除了读取mail 属性之外,还有什么方法可以从Exchange 列出用户的主要电子邮件地址(最好是任何别名)?我见过一些examples that use the proxyAddresses attribute,但这些似乎也不可靠。我正在寻找直接来自 Exchange 的解决方案。没有如果-and-or-buts。这是他们的电子邮件地址。
DirectorySearcher search = new DirectorySearcher("(&(mail=*))");
search.PageSize = 1000;
search.PropertiesToLoad.Add("mail");
foreach( SearchResult result in search.FindAll() )
{
DirectoryEntry entry = result.GetDirectoryEntry();
Console.WriteLine(entry.Properties["mail"].Value);
}
【问题讨论】:
-
您是否熟悉
PrincipalContext,您也可以通过这种方式获得域上的电子邮件地址。也可以通过代码将这一行entry.Properties["mail"].Value更改为以下entry.Properties["mail"].Value.ToString(); -
@DJKRAZE 只读取
mail属性。 -
您是否尝试过使用 PrincipalContext 来获取所有用户的列表,或者至少使用您的用户名尝试它,这将是您在网络上使用的 SamAccount 名称.. 您会看到它将返回电子邮件地址查找有关如何使用 PrincipalContext 获取所有 AD 用户的示例
-
@DJKRAZE,伙计,代码没有问题。我可以查看 AD 用户和计算机并看到属性为空白。
PrincipalContext仍然只会读取mail属性。底线是不能依赖mail属性。我需要直接与 Exchange 交互的东西。 -
试试这里给出的网络服务建议stackoverflow.com/questions/9705951/…
标签: c# active-directory exchange-server-2007