Issue accessing Public Folder Store using CDO 1.2.1 for Outlook 2007

Issue accessing Public Folder Store using CDO 1.2.1 for Outlook 2007

  • Comments 0

If you are using InfoStores collection of CDO 1.2.1 for Outlook 2007 to access Public Folder store and not able to get reference to Public Folder store then here is the explanation of the design change in CDO 1.2.1 from SGriffin’s post@Outlook 2007, Public Folders, MAPI and You.

Basically, Outlook 2007's version of the Exchange provider, emsmdb32, doesn't automatically add the Public Folder store to the message store table of a new profile. Instead, it waits until a successful connection has been made to the Exchange server. If it then detects that the public folders are available, it updates the profile and sends a table notification indicating the availability of Public Folders. This is a change from previous versions of Outlook and from Exchange's version of the provider. We made this change to better support Exchange 2007's Public Folder-less environments.

Here is the vbscript sample code snippet to repro the issue:

NOTE: Following programming examples is for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This sample code assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. This sample code is provided for the purpose of illustration only and is not intended to be used in a production environment.

'Change Server and User name below
SERVER = "Server"
Mailbox = "User"
 
Set objSession = CreateObject("MAPI.Session")
objSession.LogOn , "", False, True, , True, SERVER  & Chr(10) & Mailbox
 
    Set objInfoStores = objSession.InfoStores
     For i = 1 To objInfoStores.Count
        If UCase(objInfoStores.Item(i)) = UCase("Public Folders") Then
            Set objInfoStore = objInfoStores.Item(i)
                msgbox objInfoStore.name 
            Exit For
        End If
    Next
 
Set objInfoStores= Nothing
Set objSession=Nothing
 
The above sample code would not return the name of the Public Folders store to us.
 
We need to work around the above issue by creating another session object as per the below code snippet:
 
'Change Server and User name below
SERVER = "Server"
Mailbox = "User"
 
Set objSession = CreateObject("MAPI.Session")
objSession.LogOn , "", False, True, , True, SERVER  & Chr(10) & Mailbox
 
    Set objInfoStores = objSession.InfoStores
     For i = 1 To objInfoStores.Count
        If UCase(objInfoStores.Item(i)) = UCase("Public Folders") Then
            Set objInfoStore = objInfoStores.Item(i)
                msgbox objInfoStore.name 
            Exit For
        End If
    Next
 
 
Set objSession2 = CreateObject("MAPI.Session")
objSession2.LogOn , "", False, False, , True, SERVER  & Chr(10) & Mailbox
 
    Set objInfoStores2 = objSession2.InfoStores
     For i = 1 To objInfoStores2.Count
        If UCase(objInfoStores2.Item(i)) = UCase("Public Folders") Then
            Set objInfoStore2 = objInfoStores2.Item(i)
                msgbox objInfoStore2.name 
            Exit For
        End If
    Next
 
Set objInfoStores= Nothing
Set objSession=Nothing
 
Set objInfoStores2= Nothing
Set objSession2=Nothing

 

Note: We are using third parameter as “False” for objSession2.Logon, So that it uses the current shared MAPI session.

Leave a Comment
  • Please add 5 and 1 and type the answer here:
  • Post