【问题标题】:can i use .net to get email address from exchange (not AD) using username?我可以使用 .net 使用用户名从交易所(不是 AD)获取电子邮件地址吗?
【发布时间】:2012-03-09 01:47:42
【问题描述】:

有没有办法访问交换数据存储?我想在我的 c#/.net 应用程序中提取用户的电子邮件地址 - 最好使用用户名。

我在 AD 中执行此操作,但 AD 中的电子邮件地址错误,我收到了退回邮件。看到 AD 对电子邮件的不可靠程度,我需要去交换,这是我唯一的救命稻草。

有什么线索吗?

【问题讨论】:

  • Exchange 不是将所有的电子邮件地址都存储在 AD 中吗?我认为它们可以在任何安装了 Exchange AD 管理的机器上进行编辑。
  • 这不可能,因为从 AD 中提取电子邮件会显示不同的电子邮件,然后从 Exchange 中提取同一用户的电子邮件。
  • 必须有一种方法可以让数据交换发挥作用。
  • 哦,好的。您如何从 Exchange 中提取与 AD 不同的电子邮件?从powershell不知何故? (如果是这样,您可以使用它正在使用的相同 .NET 界面。)每当我在 Exchange 中编辑电子邮件地址时,我都会使用 AD 界面。
  • 它肯定是在 AD 中。如果您有一个简单的单一森林,它将成为 proxyAddress (多值属性)之一。主要的 SMTP 大写,通常与邮件相同(单值属性)。有了多林交换资源林,事情就变得……更有趣了。

标签: .net exchange-server


【解决方案1】:

我主要是 PowerShell 用户,但是当我这样做时,我会使用 System.DirectoryServices.DirectorySearcher .NET 方法,如下所示:

# Bind to OU Container
$OUPath = "LDAP://OU=SomeContainer,DC=domain,DC=com"
$SearchOU = [ADSI]$OUPath

# Use System.DirectoryServices.DirectorySearcher to Find objects in Container
$Searcher = New-Object System.DirectoryServices.DirectorySearcher($SearchOU)

# Filter results
$LDAPQueryFilter = "(&(HomeMDB=*)(mail=*)(objectClass=user))"
$Searcher.Filter = $LDAPQueryFilter

# Return results
$SearchResults = $Searcher.FindAll()

正如其他人提到的,您想枚举 ProxyAddresses 集合,它是一个具有多值属性的 AD 字段(基本上是一个字符串数组)。

希望这会有所帮助?

【讨论】:

    【解决方案2】:

    正如其他回复所表明的,所有版本的 Exchange 到 Exchange 2010 都直接在 Active Directory 中读取和写入用户数据。没有其他存储库。甚至 Exchange Online 也会在后台向 AD 读取和写入数据。我建议您仔细检查您用于读取电子邮件地址的 AD 属性。

    如果您希望直接避免 AD 查询,您可以使用 EWS 进行 AD 查询: http://vivekiyer.net/2010/07/17/querying-the-global-address-list-gal-via-exchange-web-services-ews/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多