SYMPTOMS:

========================

I recently assisted with a CDO 1.21 DST related issue where custom date field values set programmatically with CDO 1.21 (after the DST change on 3/11) were off by 1 hour. The CDO 1.21 code was running in a Scripting Agent on an Exchange 5.5 Server that had all of the DST updates installed.

 

We could see that the correct DST build of CDO.DLL was in the System32 directory, and by searching HKCR for “MAPI.Session” we found the CLSID for CDO 1.21 and confirmed that our InProcServer32 value was pointing to the correct build of CDO.DLL.

 

But the problem still happened and was easily reproducible with a test user by running the simple CDO 1.21 sample code below from VB6. To see the incorrect date value we would login to Outlook on a client machine as the same test user and add our test date field “DateTest” to the current view using Outlook’s Field Chooser. Once added, we could see that the value of our custom Date field was off by 1 hour.

 

Sample CDO 1.21 code to create and populate an Outlook date property:

-------------------------------------------------------------------------------------------------

Sub CDO_AddTestUserProperty()

    Dim objSession As MAPI.Session
    Dim objMessage As MAPI.Message
    Dim oFields As MAPI.Fields
    Const CdoPropSetID = "2903020000000000C000000000000046"
   
    Set objSession = New MAPI.Session
    objSession.Logon , , , True, , , "MyExServer" & vbLf & "testuser@address.com"
   
    'Get the most recent item in the Inbox of testuser
    Set objMessage = objSession.Inbox.Messages.GetLast
    Set oFields = objMessage.Fields
   
    Dim dateFieldValue As Date
    strFieldName = "DateTest"
    dateFieldValue = Now()
    Debug.Print dateFieldValue
   
    Set oField = oFields.Add(strFieldName, vbDate, dateFieldValue, CdoPropSetID)
    objMessage.Update
   
    Set oField = Nothing
    Set oFields = Nothing
    Set objMessage = Nothing
    objSession.Logoff
    Set objSession = Nothing
  
End Sub


 

PROBLEM:

===============================

It turned out that Outlook 2000 was installed on this Exchange 5.5 server (which is a bad idea) and the un-patched Outlook build of CDO.DLL kept being loaded instead of the patched version for Exchange.  

 

RESOLUTION:

===============================

We were able to resolve the immediate issue by following these steps:

1.       Uninstall Outlook’s Collaboration Data Objects component.

1.       Make sure Outlook is closed on the server

2.       Control Panel --> Add or Remove Programs

3.       Select your install of Office/Outlook (i.e. “Microsoft Office 2000” or “Microsoft Outlook 2000”)

4.       Click “Change”

5.       Click “Add or Remove Features”

6.       Expand the list of components under “Microsoft Outlook for Windows”

7.       Click on the down arrow next to “Collaboration Data Objects”

8.       Select “Not Available” (it should appear as a red X)

9.       Click “Update Now” and complete the steps.

2.       Re-register the correct version of CDO.DLL in the System32 directory using Regsvr32.exe.

 

 

For some other CDO 1.21 DST related issues see: FYI: DST 2007 exposes those who misuse CDO 1.21