65.9K
CodeProject 正在变化。 阅读更多。
Home

Exchange Server、ASP 和 ADSI / LDAP

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.18/5 (11投票s)

2004年5月6日

2分钟阅读

viewsIcon

125047

downloadIcon

1129

如何使用 ASP 和 ADSI / LDAP 访问 Exchange Server 的地址簿。

引言

通过 ADSI(Active Directory Service Interface),微软提供了一个 COM 组件,用于访问各种目录服务。ADSI 是 Windows 2000 的一个组件。

你可以将 ADSI 视为各种目录服务的 ODBC 接口。在网络中,目录服务充当用户和功能的管理,例如计算机、打印机、用户和服务。

目录服务的结构是分层的,可以看作是一棵目录树:有一个根,你可以从中开始到其他条目。根可以包含容器(节点)和叶子。容器本身可以包含其他条目,而叶子标记目录树中一个分支的结束。此目录中的每个条目都描述一个对象并具有特定的属性。这可以用 Windows 文件系统来说明:硬盘 c: 是根,目录/文件夹是容器,文件是叶子。

ADSI 支持的目录系统示例包括:WinNT(访问 Windows NT)、GC(Windows 2000 全局目录)、IIS(Internet Information Server 元数据库)、NWCOMPAT(Novell NetWare 3.x)、NDS(Novell NetWare 4.x)和 LDAP 目录。

在此上下文中,将特别考虑目录服务 LDAP。LDAP(Lightweight Directory Access Protocol)由密歇根大学在 90 年代初开发,它允许更轻松地访问 X.500 协议的目录服务。LDAP 基于 TCP/IP 并使用端口号 389。越来越多的公司将其产品中集成 LDAP,例如微软及其产品 Exchange、Windows 2000 和 Site Server。

访问 Exchange 的 LDAP 目录

首先,必须确保互联网用户有权访问 LDAP 目录。

通过 ADSI 对目录树中对象的读取访问是通过 GetObject 方法进行的

StrServer = "Exchange01"
Set cont = GetObject("LDAP://" & strServer)
For Each obj in cont
   Response.Write obj.Name & "<BR>"
Next

Exchange 的 LDAP 根包含公司的不同位置。可以通过 FOR-NEXT 循环显示此容器的内容。StrServer 是网络上 Exchange 服务器的名称。

在显示不同的位置之后,可以在下一步显示不同位置的 Exchange 用户。

为此,必须知道根。在这种特定情况下,它是 "o=BSP"。

strServer = "Exchange01"
strOrganisation = "o=BSP"
strLocation = "ou=Mannheim"

Set cont = GetObject("LDAP://" & strServer &"/cn=Recipients,"_
           & strLocation & "," & strOrganisation)
For Each obj in cont
   Response.Write & obj.Name & "<BR>"
Next

这意味着访问包含 Exchange 用户数据的容器 "cn= Recipients"。使用 For-NEXT 循环,可以显示此容器的各个对象,即用户。

现在知道了单个用户,就可以显示他们的属性了

strServer = "Exchange01"
strOrganisation = "o=BSP"
strLocation = "ou=Mannheim"
strUser = "cn=ckiefer"
Set objMailbox = GetObject("LDAP://" & strServer &"/" &strUser& ",_
   cn=Recipients," & strLocation & "," & strOrganisation)
response.write "<table border=1>"
response.write "<tr><td colspan=""2"">Userdetails</td></tr>"
response.write "<tr><td>name</td><td>" & objMailbox.name & "</td></tr>"
response.write "<tr><td>mail</td><td>" & objMailbox.mail & "</td></tr>"
response.write "<tr><td>cn</td><td>" & objMailbox.cn & "</td></tr>"
response.write "<tr><td>sn</td><td>" & objMailbox.sn & "</td></tr>"
response.write "<tr><td>givenname</td><td>" & objMailbox.givenname & "</td></tr>"
response.write "<tr><td>member</td><td>" & objMailbox.member & "</td></tr>"
response.write "<tr><td>department</td><td>" & objMailbox.department & "</td></tr>"
response.write "<tr><td>title</td><td>" & objMailbox.title & "</td></tr>"
response.write "<tr><td>uid</td><td>" & objMailbox.uid & "</td></tr>"
response.write "<tr><td>company</td><td>" & objMailbox.company & "</td></tr>"
response.write "<tr><td>telephonenumber</td><td>" &_
   objMailbox.telephonenumber & "</td></tr>"
response.write "<tr><td>facsimiletelephonenumber</td><td>" &_
   objMailbox.facsimiletelephonenumber & "</td></tr>"
response.write "<tr><td>postaladdress </td><td>" &_
   objMailbox.postaladdress & "</td></tr>"
response.write "<tr><td>homepostaladdress </td><td>" &_
   objMailbox.homepostaladdress & "</td></tr>"
response.write "<tr><td>physicalDeliveryOfficeName</td><td>"_
   & objMailbox.physicalDeliveryOfficeName & "</td></tr>"
response.write "</table>"

如果你将这些函数放在一起,你可以编写一个 ASP 脚本,该脚本允许你显示 Exchange 地址簿中的条目。

下载完整的脚本并享受吧。

© . All rights reserved.