[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 552
  • Last Modified:

Programmatically Create and Mail enable a contact in Exchange 2003

I am having problems mail enabling a contact in Exchange 2003 after I create it using VB6. I have referenced the following:


Here is the code I am using (I have changed the actual domain names and stuff):
There is a single command button control on the form called cmdGo.

Option Explicit
Dim oIADs As IADs
Dim oContainer As IADsContainer
Dim strSMTP, strFN, strLN, strDN, strCont, strDom As String
Dim strUserName, strTargetMailAddress, strDomain As String
Dim blResult As Boolean

Private Sub cmdGo_Click()

On Error Resume Next

strSMTP = "tester@test.net"
strFN = "Test"
strLN = "Contact"
strDN = "Test Contact"
strCont = "CN=Contacts"
strDom = "DC=testlab,DC=test,dc=com"

Set oIADs = GetObject("LDAP://rootDSE")
Set oContainer = GetObject("LDAP://" & strCont & "," & strDom)
Set oIADs = oContainer.Create("contact", "cn=" + CStr(strDN))

oIADs.Put "mail", CStr(strSMTP)
oIADs.Put "targetAddress", CStr(strSMTP)
oIADs.Put "givenName", CStr(strFN)
oIADs.Put "sn", CStr(strLN)
oIADs.Put "displayName", CStr(strDN)

If Err.Number = 0 Then
    Call MailEnableCDOPerson(CStr(strDN), CStr(strSMTP), CStr(strCont), CStr(strDom))
    MsgBox "Success!"
    MsgBox "Failure!"
End If

strSMTP = ""
strFN = ""
strLN = ""
strDN = ""
Set oIADs = Nothing
Set oContainer = Nothing

End Sub

Sub MailEnableCDOPerson(strUserName As String, _
                             strTargetMailAddress As String, _
                             strContainer As String, _
                             strDomain As String)

    Dim oPerson             As New CDO.Person
    Dim oRecipient          As CDOEXM.IMailRecipient

    'Target address should look like this
    'strTargetMailAddress = strLastName & "@microsoft.com"

    ' get the user
    oPerson.DataSource.Open "LDAP://CN=" & strUserName & "," & strContainer & "," & strDomain

    ' MailEnable
    Set oRecipient = oPerson
    oRecipient.MailEnable strTargetMailAddress


    MsgBox strUserName + " mail enabled successfully"

    Set oPerson = Nothing
    Set oRecipient = Nothing

End Sub

The code creates the contact but does not mail enable it. I have poured through technet, MSDN and google, and everything they have given me does not work. Help.
1 Solution
GusGallowsAuthor Commented:
Never mind. I found the problem. By default, the "oPerson.DataSource.Open" is opened in read only. You have to add the following to the line:
, , adModeReadWrite

So it should look as follows:

oPerson.DataSource.Open "LDAP://CN=" & strUserName & "," & strContainer & "," & strDomain, , adModeReadWrite

I did that and I was able to create Mail Enabled Contacts in active directory from my XP workstation. Also get rid of the following two lines:
oIADs.Put "mail", CStr(strSMTP)
oIADs.Put "targetAddress", CStr(strSMTP)

It gives an error that an email address already exists if you use them before doing the mailenable. Add the "mail" one back after the mail enable. You do not need the "targetAddress" one at all.
Closed, 500 points refunded.
Experts Exchange Moderator

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now