Exchange Server、ASP 和 ADSI / LDAP






3.18/5 (11投票s)
2004年5月6日
2分钟阅读

125047

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 地址簿中的条目。
下载完整的脚本并享受吧。