Looping through and/or creating Exchange folders via Redemption

M

Mike

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.
 
D

Dmitry Streblechenko

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
 
M

Mike

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);
 
D

Dmitry Streblechenko

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
 
M

Mike

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);
 
D

Dmitry Streblechenko

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
 
M

Mike

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
 
D

Dmitry Streblechenko

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top