Looping through and/or creating Exchange folders via Redemption

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

I need a way to loop through the folders in the current user's (Exchange)
mailbox. I will be searching in particular for a folder that I need to be
there, and if it is not, I need to create it. Is this possible through the
Redemption objects? If so, can anyone point me towards some sample code?
Thanks very much.
 
Search in what sense? Based on name? Parent? Or...?
In general, you can start with RDOStore.IPMRootFolder (where RDOSrore is
returned by RDOSession.Stores colelection or RDOSession.Stores.DefaultStore)
and recursively loop through all the subfolders of the RDOFolder.Folders
collection.

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
 
Yes, based on name, and it seems easy enough I guess even without Redemption
code, but is it possible to add a folder on the same level as Inbox, i.e.,
att the Namespace level? Something like
Outlook._Namespace.Folders.Add("newfolder", ???) but what Object type to
give it? I've tried it with defaultInbox type, but get a generic "couldn't
complete the operation" Exception.

Is it even possible to add a folder at that level?

Folders.Add Method:
// TODO: Add code here to start the application.
Outlook._Application olApp = new Outlook.ApplicationClass();
Outlook._NameSpace olNs = olApp.GetNamespace("MAPI");
Outlook.MAPIFolder oTasks =
olNs.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks);
Outlook.Folders oFolders = oTasks.Folders;
Outlook.MAPIFolder oPersonalTasks = oFolders.Add("Personal
Tasks",Outlook.OlDefaultFolders.olFolderTasks);
Console.Write(oPersonalTasks.Name);
 
IN RDO that would be either
set Folder =
RDOSession.GetDefaultFolder(olFolderInbox).Parent.Folders.Add("Test Tasks",
olFolderTasks)
or
set Folder = RDOSession.Stores.DefaultStore.IPMRootFolder.Folders.Add("Test
Tasks", olFolderTasks)

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
 
Last question, hopefully! Now that I am able to add the folder, is there any
way to associate a different icon with it? thanks for your help.

I finally got it to work with the following (seems you can't use the named
value from the OlDefaultFolders enum, you have to use an actual #)

Outlook._Application olApp = OutlookApp;
Outlook._NameSpace olNs = olApp.GetNamespace("MAPI");
// adds to root level
olNs.Folders.Item(1).Folders.Add("Archive Search", 6);
//olNs.Folders.Item(1).Folders.Add("Test Folder",
Outlook.OlDefaultFolders.olFolderInbox);
 
No, the icon displayed by Outlook depends on whether the folder is one of
the default folders in the store or on the value of the PR_CONTAINER_CLASS
property.
Why can't you use one of the OlDefaultFolders enums? Do you get an error?

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
 
You know, it's actually quite strange. An exception is thrown when using the
enum value, but the folder is actually still created. Didn't notice this at
first until I trapped the exception and bypassed it by mistake once, and
there was the folder. No exception is thrown when using a numeric value.
Here is the exception thrown when using the enum: (I see something regarding
permissions)

{System.__ComObject}
[System.__ComObject]: {System.__ComObject}
Application: {Outlook.ApplicationClass}
Class: olFolder
DefaultItemType: olMailItem
DefaultMessageClass: "IPM.Note"
Description: null
EntryID: (too long, i removed it from this text)
Folders: {Outlook.FoldersClass}
Items: {Outlook.ItemsClass}
Name: "Test Folder"
Parent: {System.__ComObject}
Session: {Outlook.NameSpaceClass}
StoreID: (too long, i removed it from this text)
UnReadItemCount: 0
UserPermissions: 'olNs.Folders.Item(1).Folders.Add("Test Folder",
Outlook.OlDefaultFolders.olFolderInbox).UserPermissions' threw an exception
of type 'System.Runtime.InteropServices.COMException'
WebViewAllowNavigation: true
WebViewOn: false
WebViewURL: null
 
What is the COM exception number and message?

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool

Mike said:
You know, it's actually quite strange. An exception is thrown when using
the
enum value, but the folder is actually still created. Didn't notice this
at
first until I trapped the exception and bypassed it by mistake once, and
there was the folder. No exception is thrown when using a numeric value.
Here is the exception thrown when using the enum: (I see something
regarding
permissions)

{System.__ComObject}
[System.__ComObject]: {System.__ComObject}
Application: {Outlook.ApplicationClass}
Class: olFolder
DefaultItemType: olMailItem
DefaultMessageClass: "IPM.Note"
Description: null
EntryID: (too long, i removed it from this text)
Folders: {Outlook.FoldersClass}
Items: {Outlook.ItemsClass}
Name: "Test Folder"
Parent: {System.__ComObject}
Session: {Outlook.NameSpaceClass}
StoreID: (too long, i removed it from this text)
UnReadItemCount: 0
UserPermissions: 'olNs.Folders.Item(1).Folders.Add("Test Folder",
Outlook.OlDefaultFolders.olFolderInbox).UserPermissions' threw an
exception
of type 'System.Runtime.InteropServices.COMException'
WebViewAllowNavigation: true
WebViewOn: false
WebViewURL: null



Dmitry Streblechenko said:
No, the icon displayed by Outlook depends on whether the folder is one of
the default folders in the store or on the value of the
PR_CONTAINER_CLASS
property.
Why can't you use one of the OlDefaultFolders enums? Do you get an error?

Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
 
Back
Top