|
 |
asp_cdo thread: Resolving a name from a NT Login
Message #1 by "Michael Gorsuch" <voodoo_bluesman@h...> on Fri, 10 Aug 2001 16:03:52
|
|
Greetings everyone,
I'm fairly new to CDO and its capabilities, but I do have a firm grasp on
ASP and VB. What I need to know is whether it is possible for you to
resolve Exchange information (First name, last name, department, etc) via
an NT login. If this is possible, could anybody provide some simple code
to show me the concepts?
I appreciate the help,
Michael
Message #2 by Eli Schilling <eschilli@t...> on Fri, 10 Aug 2001 09:08:04 -0700
|
|
Here is the code to display all of a persons info from exchange. Actually,
it lists everyone in the GAL. You can modify this to make it searchable or
what not:
<%@ LANGUAGE="VBSCRIPT"%>
<HTML>
<HEAD>
<TITLE>Employee EMail List</TITLE>
<base target="_self">
</HEAD>
<BODY bgcolor="#FAF5D7" text="#000000" link="#0000FF" vlink="#0000FF"
alink="#FF0000"><font face="Arial, Arial, Helvetica">
<%
CONST adChar = 129
Const adUseClient = 3
Const adOpenKeyset = 1
CONST CdoPR_GIVEN_NAME = &H3A06001E 'First Name
CONST CdoPR_INITIALS = &H3A0A001E 'Initials
CONST CdoPR_SURNAME = &H3A11001E 'Last Name
CONST CdoPR_DISPLAY_NAME = &H3001001E 'Display Name
CONST CdoPR_ACCOUNT = &H3A00001E 'Alias
CONST CdoPR_TITLE = &H3A17001E 'Title
CONST CdoPR_COMPANY_NAME = &H3A16001E 'Company
CONST CdoPR_OFFICE_LOCATION = &H3A19001E 'Office
CONST CdoPR_HOME_TELEPHONE_NUMBER = &H3A09001E 'Phone
CONST CdoPR_HOME2_TELEPHONE_NUMBER = &H3A2F001E 'Home Phone 2
CONST CdoPR_HOME_FAX_NUMBER = &H3A25001E 'Home Fax
CONST CdoPR_HOME_ADDRESS_STREET = &H3A5D001E 'Address
CONST CdoPR_HOME_ADDRESS_CITY = &H3A59001E 'City
CONST CdoPR_HOME_ADDRESS_STATE_OR_PROVINCE = &H3A5C001E 'State
CONST CdoPR_HOME_ADDRESS_POSTAL_CODE = &H3A5B001E 'Zip
CONST CdoPR_HOME_ADDRESS_COUNTRY = &H3A5A001E 'Country
CONST CdoPR_MANAGER_NAME = &H3A4E001E 'Manager
CONST CdoPR_OFFICE_TELEPHONE_NUMBER = &H3A08001E 'Business Phone
CONST CdoPR_OFFICE2_TELEPHONE_NUMBER = &H3A1B001E 'Business Phone 2
CONST CdoPR_BUSINESS_FAX_NUMBER = &H3A24001E 'Fax
CONST CdoPR_ASSISTANT = &H3A30001E 'Assistant
CONST CdoPR_ASSISTANT_TELEPHONE_NUMBER = &H3A2E001E 'Asistant Phone Number
CONST CdoPR_MOBILE_TELEPHONE_NUMBER = &H3A1C001E 'Mobile
CONST CdoPR_PAGER_TELEPHONE_NUMBER = &H3A21001E 'Pager
CONST CdoPR_DEPARTMENT = &H3A18001E 'Department Name
Dim objSession
Dim objAddrEntries
Dim objAddressEntry
Dim strProfileInfo
Set objName = request.form("nname")
strUsername = Request.ServerVariables("Logon_User")
strProfileInfo = "/cn=Configuration/cn=Servers/cn=rt-apps" & vbLf & vblf &
strUsername
Set objSession = CreateObject("MAPI.Session")
objSession.Logon "", "", False, True, 0, True, "Exchange_Server_Name" & vbLf
& strProfileInfo
Set objAddrEntries = objSession.AddressLists("Global Address
List").AddressEntries
On Error Resume Next 'Required, because, if an item is missing, an
'error returns that stops the process.
' Create an ADO recordset to sort the data
set oRSTemp = CreateObject("ADODB.Recordset")
oRSTemp.Fields.Append "PR_DISPLAY_NAME", adChar, 256
oRSTemp.Fields.Append "PR_GIVEN_NAME", adChar, 256
oRSTemp.Fields.Append "PR_SURNAME", adChar, 256
oRSTemp.Fields.Append "PR_OFFICE_TELEPHONE_NUMBER", adChar, 256
oRSTemp.Fields.Append "PR_DEPARTMENT", adChar, 256
oRSTemp.Fields.Append "PR_TITLE", adChar, 256
oRSTemp.Fields.Append "PR_ACCOUNT", adChar, 256
oRSTemp.CursorLocation = adUseClient
oRSTemp.CursorType = adOpenKeyset
oRSTemp.Open
' Sort our data
order = Request.QueryString("Order")
if order = 1 then
oRSTemp.Sort = "PR_SURNAME, PR_GIVEN_NAME ASC"
elseif order = 2 then
oRSTemp.Sort = "PR_OFFICE_TELEPHONE_NUMBER ASC"
elseif order = 3 then
oRSTemp.Sort = "PR_TITLE ASC"
elseif order = 4 then
oRSTemp.Sort = "PR_ACCOUNT ASC"
elseif order = 5 then
oRSTemp.Sort = "PR_DEPARTMENT ASC"
else
oRSTemp.Sort = "PR_DISPLAY_NAME ASC"
end if
' Copy in the data
For Each objAddressEntry In objAddrEntries
add = False
add = Not (IsNull(objAddressEntry.Fields(CdoPR_SURNAME).Value) Or
IsNull(objAddressEntry.Fields(CdoPR_GIVEN_NAME).Value))
If add Then
oRSTemp.AddNew
oRSTemp("PR_DISPLAY_NAME").Value
objAddressEntry.Fields(CdoPR_DISPLAY_NAME).Value
oRSTemp("PR_GIVEN_NAME").Value
objAddressEntry.Fields(CdoPR_GIVEN_NAME).Value
oRSTemp("PR_SURNAME").Value = objAddressEntry.Fields(CdoPR_SURNAME).Value
oRSTemp("PR_OFFICE_TELEPHONE_NUMBER").Value
objAddressEntry.Fields(CdoPR_OFFICE_TELEPHONE_NUMBER).Value
oRSTemp("PR_DEPARTMENT").Value
objAddressEntry.Fields(CdoPR_DEPARTMENT).Value
oRSTemp("PR_TITLE").Value = objAddressEntry.Fields(CdoPR_TITLE).Value
oRSTemp("PR_ACCOUNT").Value = objAddressEntry.Fields(CdoPR_ACCOUNT).Value
oRSTemp.Update
End If
Next
' Now, display the records
oRSTemp.MoveFirst
%>
</font><TABLE BORDER=0 cellspacing="0" width="100%">
<TR bgcolor="#000080" height="16">
<TH valign="middle" height="32" colspan="4">
<font face="Arial, Arial, Helvetica"><b>
<font size="4" face="Arial, Helvetica" color="#FFFFFF">
Employee List</font></b></font></TH>
</TR>
<TR bgcolor="#000080" height="16">
<TH valign="middle" height="48">
<font face="Arial, Arial, Helvetica">
<A HREF="OutAddBook.asp?Order=0">
<font color="#FFFF00" face="Arial, Helvetica">First</font></A>
<font color="#FFFF00" face="Arial, Helvetica">&</font>
<A HREF="OutAddBook.asp?Order=1">
<font color="#FFFF00" face="Arial, Helvetica">Last</font></A>
<font color="#FFFF00" face="Arial, Helvetica">Name</font></font>
</TH>
<TH valign="middle" height="48"><font face="Arial, Arial, Helvetica">
<A HREF="OutAddBook.asp?Order=2"><font color="#FFFF00" face="Arial,
Helvetica">Ext</font></A>
</font>
</TH>
<TH valign="middle" height="48"><font face="Arial, Arial, Helvetica">
<A HREF="OutAddBook.asp?Order=5"><font face="Arial, Helvetica"
color="#FFFF00">
Department, </font></A>
<A HREF="OutAddBook.asp?Order=3"><font face="Arial, Helvetica"
color="#FFFF00">
Title</font></A></font>
</TH>
<TH valign="middle" height="48"><font face="Arial, Arial, Helvetica">
<A HREF="OutAddBook.asp?Order=4"><font color="#FFFF00" face="Arial,
Helvetica">
Email Address</font></A></font></TH>
</TR>
<%
While Not oRSTemp.EOF
mailAddr = oRSTemp("PR_ACCOUNT").Value & "@domain.com"
%>
<TR>
<TD><font face="Arial, Arial, Helvetica">
<font face="Arial, Helvetica">
<font size="2">
<% Response.Write oRSTemp("PR_DISPLAY_NAME").Value & " " %>
</font>
</font>
</font></TD>
<TD><font face="Arial, Arial, Helvetica">
<font face="Arial, Helvetica">
<font size="2">
<% Response.Write oRSTemp("PR_OFFICE_TELEPHONE_NUMBER").Value & " " %>
</font>
</font>
</font></TD>
<TD><font face="Arial, Arial, Helvetica">
<font face="Arial, Helvetica">
<font size="2">
<%
foo = ""
If Not IsNull(oRSTemp("PR_DEPARTMENT").Value) Then
foo = oRSTemp("PR_DEPARTMENT").Value
End If
If Not IsNull(oRSTemp("PR_TITLE").Value) Then
if Len(foo) > 0 then foo = foo + ", "
foo = foo & oRSTemp("PR_TITLE").Value
End If
Response.Write foo
%>
</font>
</font>
</font></TD>
<TD><font face="Arial, Arial, Helvetica">
<font face="Arial, Helvetica">
<font size="2">
<% Response.Write("<A href='mailto:" & mailAddr) & "'>" & mailAddr & "</A>"
%>
</font>
</font>
</font></TD>
</TR>
<%
oRSTemp.MoveNext
Wend
objSession.Logoff
Set objFilter = Nothing
Set objAddrEntries= Nothing
Set objSession = Nothing
%>
</TABLE><font face="Arial, Arial,
Helvetica"></font></BODY>
</HTML>
*************************************
I tried to modify the above page to display SMPT addresses but they weren't
always correct. I used the code below to pull any and all SMTP addresses
for a specified user:
strUsrString = request.servervariables("LOGON_USER")
strMailbox = Mid(strUsrString, 5, len("00000000"))
strExchangeServer = "Exchange_Server_Name"
set objSession = Server.CreateObject("MAPI.Session")
strProfileInfo = strExchangeServer & vbLF & strMailbox
'response.write(strProfileInfo) //for debugging
objSession.Logon "", "", False,True,0,True,strProfileInfo
myUser = objSession.CurrentUser
Set objMessage = objSession.Outbox.Messages.Add
Set objRecip = objMessage.Recipients.Add
objRecip.Name = request.form("strRecip") //Change this to a valid display
name.
On Error Resume Next
Err.Clear
objRecip.Resolve
If Err.Number = 0 Then
Set objField = objRecip.AddressEntry.Fields(&H800F101E)
'PR_EMS_AB_PROXY_ADDRESSES
For Each v In objField.Value
If Mid(v, 1, 4) = "SMTP" Then
strEmail = v
End If
Next
strRecipient = mid(strEmail, 6, 28)
*********end**********************************
Hope this helps,
Cheers,
Eli
-----Original Message-----
From: Michael Gorsuch [mailto:voodoo_bluesman@h...]
Sent: Friday, August 10, 2001 9:04 AM
To: ASP CDO
Subject: [asp_cdo] Resolving a name from a NT Login
Greetings everyone,
I'm fairly new to CDO and its capabilities, but I do have a firm grasp on
ASP and VB. What I need to know is whether it is possible for you to
resolve Exchange information (First name, last name, department, etc) via
an NT login. If this is possible, could anybody provide some simple code
to show me the concepts?
I appreciate the help,
Michael
Message #3 by "Michael Gorsuch" <voodoo_bluesman@h...> on Fri, 10 Aug 2001 21:06:48
|
|
Thank you very much for the help! If I can ask a question - where did you
get the constants from?
Also, does this have to be run on the Exchange Server itself, or can it be
run on a remote IIS server?
Thanks a ton,
Michael
Message #4 by Eli Schilling <eschilli@t...> on Sat, 11 Aug 2001 05:00:21 -0700
|
|
I actually got that bit of code from another gentleman off this mailing
list. I would assume the constants probably came from MSDN but I'm not
completely sure.
You are supposed to be able to run this on a seperate IIS server as long as
you use plain text authentication (known microsoft issue) but I was never
able to make it work. Since I already had IIS on my exchange server I just
stuck it out there.
Regards,
Eli
-----Original Message-----
From: Michael Gorsuch [mailto:voodoo_bluesman@h...]
Sent: Friday, August 10, 2001 2:07 PM
To: ASP CDO
Subject: [asp_cdo] RE: Resolving a name from a NT Login
Thank you very much for the help! If I can ask a question - where did you
get the constants from?
Also, does this have to be run on the Exchange Server itself, or can it be
run on a remote IIS server?
Thanks a ton,
Michael
|
|
 |