How To Use CDO (1.x) to Work with Public/Personal Folders (171638)
The information in this article applies to:
- Collaboration Data Objects (CDO) 1.21
- Collaboration Data Objects (CDO) 1.1
- Collaboration Data Objects (CDO) 1.2
- Microsoft Visual Basic Standard Edition, 32-bit, for Windows 4.0
- Microsoft Visual Basic Professional Edition, 32-bit, for Windows 4.0
- Microsoft Visual Basic Learning Edition for Windows 5.0
- Microsoft Visual Basic Professional Edition for Windows 5.0
- Microsoft Visual Basic Enterprise Edition for Windows 5.0
This article was previously published under Q171638 SUMMARY
To navigate to folders using Collaboration Data Objects (CDO 1.x) library, you need to know either the FolderID or the name of the folder and where it is. This example assumes that you do not know the FolderID, but that you do know what folder you are looking for, and where it is located. For purposes of demonstration, this example assumes that the folder you are looking for is in your local PST (Personal Folders).
MORE INFORMATION
To navigate to a folder that is not built into the session object (that is,
Inbox or Outbox), you need to know something about the folder. For example,
if you know the FolderID, then you can use the GetFolder method of the
session object. The problem with this method is that you do not always know
the FolderID, which is a string that specifies the unique identifier of the
folder.
A folder's unique identifier comes from MAPI, which assigns a permanent,
unique identifier when an object is created. This identifier does not
change from one MAPI session to another, nor from one messaging domain to
another.
If you know only the folder's location and name, you must navigate to the
folder. One way to accomplish this is to iterate through the InfoStores
until you find the one that contains your folder. Then iterate through the
folders in the InfoStore to find your target folder.
Each InfoStore contains a RootFolder. By identifying the RootFolder's name,
you know what type of InfoStore you are in. Use the following table to
determine where in the hierarchy you are:
INFOSTORE.NAME TOPFOLDER.NAME
Public Folders IPM_SUBTREE
Mailbox - <User Name> Top of Information Store
PST Top of Personal Folders
Using the above table, you know that if you want to find the folder named
"Messaging" in the PST, you need to find a TopFolder named "Top of Personal
Folders". Then, navigate through these folders until you find the
"Messaging" folder.
One problem with this method is that you can have multiple PST files in a
profile. If this is the case, you need to employ an additional check to
make sure you are in the correct PST. Alternatively, you can check for the
name of the InfoStore instead of the name of the Root Folder.
The following code demonstrates how to use this technique.
This code sample requires a reference to the "Microsoft Active Messaging
1.1 Object Library" (Olemsg32.dll) or to the Microsoft CDO 1.2 (or later)
library. This sample assumes that there is an active client session
running.
Option Explicit
Dim objSession As MAPI.Session
Private Sub Form_Load()
Set objSession = CreateObject("MAPI.Session")
objSession.Logon showdialog:=False, newsession:=False
End Sub
Private Sub Command1_Click()
Dim objPSTFolder As Folder
Dim objMessages As Messages
Dim objOneMessage As Message
'Want to find the Messaging folder in my PST. Modify the "Messaging"
'as needed to find the folder you are interested in.
Set objPSTFolder = objFindTargetFolder("Top of Personal Folders", _
"Messaging")
Set objMessages = objPSTFolder.Messages
Set objOneMessage = objMessages.GetFirst
End Sub
Private Function objFindTargetFolder( _
strTargetTopFolder As String, _
strSearchName As String) As Folder
Dim objInfoStores As InfoStores
Dim objInfoStore As InfoStore
Dim objTopFolder As Folder
Dim objPSTFolders As Folders
Dim i As Integer
Set objInfoStores = objSession.InfoStores
'This message box loop is just telling you what the current
'objects are. It is not needed for the function to work
'properly.
For i = 1 To objInfoStores.Count
Set objInfoStore = objInfoStores(i)
Set objTopFolder = objInfoStore.RootFolder
MsgBox "i= " & i & Chr(10) & _
"InfoStore.Name= " & objInfoStores(i).Name & Chr(10) & _
"TopFolder.Name= " & objTopFolder.Name
Next i
'This loop finds the TopFolder you specified.
For i = 1 To objInfoStores.Count
Set objInfoStore = objInfoStores(i)
Set objTopFolder = objInfoStore.RootFolder
If objTopFolder.Name = strTargetTopFolder Then 'Found PST
'Because you can have more than one PST in a profile,
'you may want to put another check here to make sure you have
'the correct PST. This check would need to specify a string
'that is the name of the PST you are looking for.
'It would look something like this:
'If objInfoStore.Name = "MyPST" Then 'Found own PST
' Exit For
'End If
End If
Next i
Set objPSTFolders = objTopFolder.Folders
For i = 1 To objPSTFolders.Count
MsgBox objPSTFolders.Item(i).Name
If objPSTFolders.Item(i).Name = strSearchName Then
Exit For
End If
Next i
Set objFindTargetFolder = objPSTFolders.Item(i)
Set objTopFolder = Nothing
Set objPSTFolders = Nothing
Set objInfoStores = Nothing
Set objInfoStore = Nothing
End Function
Modification Type: | Major | Last Reviewed: | 6/6/2005 |
---|
Keywords: | kbhowto kbMsg KB171638 |
---|
|