How to judge what folder the specified entry id is?

  • Thread starter ryotyankou via OfficeKB.com
  • Start date
R

ryotyankou via OfficeKB.com

I scaned all message store to search folders and add them to a tree with
checkbox. user can select what folder to do deal with, i want to set
different icon to the tree item. I have icon for inbox, outbox, sent items
and so on. So i want to know what kind of MAPIFolder is, for the default
message store, it is esay to know this while use GetDefaultFolder, for other
message store like hotmail, i tried a way, it worked fine, but when i add
hotmail account via outlook connector(from microsoft), it not work any more.
My method is:
1. use NameSpace::GetDefaultFolder get the folder.
2. Get name of the default folder and save it to a map.
3. do 1,2 to get other folder string, inbox, outbox(...etc.)
4. for no default message store, check their name if existed in the map, if
does, return id will show which kind it is.
Hotmail(via outlook connector) is not work, because some string are english,
such inbox, sent items, some are local language, such as chinese string of
"outbox".
Any ideas? If i want to check the folder's(MAPIFolder) type?
 
K

Ken Slovak - [MVP - Outlook]

GetDefaultFolder will only work with certain folders in your default mail
store (where emails are delivered). I'm not familiar at all with the Outlook
connector, but if it shows folders in Outlook it most likely is mimicking a
PST file. In that case you can iterate the Stores collection in Outlook 2007
or NameSpace.Folders in earlier versions to get all opened stores. From
there you can get folders and each folder is a MAPIFolder, where you can
check on the DefaultItemType property to see what type of folder it is.
 
R

ryotyankou via OfficeKB.com

Hi, ken, that's not exactly what i want, DefaultItemType is only show me what
kind of item the folder will hold, MailItem, appointment, contact. I want to
set the CTreeCtrl item's icon, and this item is a MAPIFolder, so i want to
know it's kind, the kind include "inbox, outbox, sent items, deleted items,
junk e-mails, drafts."
My method not work because the string is not always the same language, my
local system(XP pro) is Chinese system, but my hotmail account registered
using English info. So the folder names are all in a muddle. Some are
English and others are Chinese. This is special case, normally all message
store folders in my outlook are Chinese.
GetDefaultFolder will only work with certain folders in your default mail
store (where emails are delivered). I'm not familiar at all with the Outlook
connector, but if it shows folders in Outlook it most likely is mimicking a
PST file. In that case you can iterate the Stores collection in Outlook 2007
or NameSpace.Folders in earlier versions to get all opened stores. From
there you can get folders and each folder is a MAPIFolder, where you can
check on the DefaultItemType property to see what type of folder it is.
I scaned all message store to search folders and add them to a tree with
checkbox. user can select what folder to do deal with, i want to set
[quoted text clipped - 17 lines]
"outbox".
Any ideas? If i want to check the folder's(MAPIFolder) type?
 
K

Ken Slovak - [MVP - Outlook]

Well, you can only use GetDefaultFolder() with folders in your default mail
store (where email is delivered for that Outlook profile). So that method
won't help you at all for non-default stores.

If you use a MAPI viewer such as OutlookSpy you can see that on the Store
object (IMsgStore button) in any open store there are properties there that
contain the folder EntryID's of certain default folders:

PR_IPM_OUTBOX_ENTRYID 0x35E20102
PR_SENTMAIL_ENTRYID 0x35E40102
PR_IPM_WASTEBASKET_ENTRYID 0x35E30102

Those contain the EntryID's for respectively the Outbox, Sent Items and
Deleted Items folders.

Then in the Inbox (IMAPIFolder button) there are:

PR_IPM_APPOINTMENT_ENTRYID 0x36D00102
PR_IPM_CONTACT_ENTRYID 0x36D10102
PR_IPM_DRAFTS_ENTRYID 0x36D70102
PR_IPM_JOURNAL_ENTRYID 0x36D20102
PR_IPM_NOTE_ENTRYID 0x36D30102
PR_IPM_TASK_ENTRYID 0x36D40102

Those are for the Calendar, Contacts, Drafts, Journal, Notes and Tasks
default folders.

You can read those properties from the Store, navigate down through
PR_IPM_SUBTREE_ENTRYID (0x35E00102) and get to the visible folders where you
can check each folder in that hierarchy for a folder that has the Calendar,
etc. properties, that's the Inbox.

That will tell you what you want I think, but to do those operations you
would need to be using Outlook 2007 or in earlier versions of Outlook using
an alternate API such as Extended MAPI, CDO 1.21 or Redemption
(www.dimastr.com/redemption). Then for other folders you fall back to
DefaultItemType to get the folder types.

You also have to be careful about comparing EntryID's, you can't just test
them for string or binary array equality. You should use one of the
CompareID's methods using those other API's or Outlook 2007.
 
D

Dmitry Streblechenko

The omnly way to do that is to read the MailItem.Parent property which
returns the parent MAPIFolder object.
Or you can read the PR_PARENT_ENTRYID MAPI property.

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

ryotyankou via OfficeKB.com

Thank you for your relpy, Dmitry.
For a mail store, to get entry id for folders:
Inbox: GetReceiveFolder
Outbox: PR_IPM_OUTBOX_ENTRYID
Sent: PR_IPM_SENTMAIL_ENTRYID
Junk: PR_IPM_WASTEBASKET_ENTRYID
// then open PR_IPM_SUBTREE_ENTRYID to get others
Draft: PR_IPM_DRAFTS_ENTRYID
... Am i right?
But how about the deleted items folder? I couldn't find it in outlook spy.

Dmitry said:
The omnly way to do that is to read the MailItem.Parent property which
returns the parent MAPIFolder object.
Or you can read the PR_PARENT_ENTRYID MAPI property.
I scaned all message store to search folders and add them to a tree with
checkbox. user can select what folder to do deal with, i want to set
[quoted text clipped - 17 lines]
"outbox".
Any ideas? If i want to check the folder's(MAPIFolder) type?
 
R

ryotyankou via OfficeKB.com

I found my errors, correct ones should be:
Inbox: IMsgStore::GetReceiveFolder
Outbox: PR_IPM_OUTBOX_ENTRYID
Sent: PR_IPM_SENTMAIL_ENTRYID
Deleted: PR_IPM_WASTEBASKET_ENTRYID
// then open PR_IPM_SUBTREE_ENTRYID to get draft and other like note,
appointment, etc.
Draft: PR_IPM_DRAFTS_ENTRYID
...
Junk: PR_ADDITIONAL_REN_ENTRYIDS, which specify its entry value as 4
will get junk folder.
 
R

ryotyankou via OfficeKB.com

It's OK now, after search through the internet and many tries, all worked now,
thanks for your help, Dmitry.
 
K

Ken Slovak - [MVP - Outlook]

Deleted Items: PR_IPM_WASTEBASKET_ENTRYID

(not Junk)




ryotyankou via OfficeKB.com said:
Thank you for your relpy, Dmitry.
For a mail store, to get entry id for folders:
Inbox: GetReceiveFolder
Outbox: PR_IPM_OUTBOX_ENTRYID
Sent: PR_IPM_SENTMAIL_ENTRYID
Junk: PR_IPM_WASTEBASKET_ENTRYID
// then open PR_IPM_SUBTREE_ENTRYID to get others
Draft: PR_IPM_DRAFTS_ENTRYID
.. Am i right?
But how about the deleted items folder? I couldn't find it in outlook spy.

Dmitry said:
The omnly way to do that is to read the MailItem.Parent property which
returns the parent MAPIFolder object.
Or you can read the PR_PARENT_ENTRYID MAPI property.
I scaned all message store to search folders and add them to a tree with
checkbox. user can select what folder to do deal with, i want to set
[quoted text clipped - 17 lines]
"outbox".
Any ideas? If i want to check the folder's(MAPIFolder) type?
 

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