Opening a message

Applies to: Outlook 2013 | Outlook 2016

To open a message

  1. Retrieve the message's entry identifier from one of the following sources:

    • The row that represents the message in the contents table of its parent folder. For more information about working with a folder contents table, see Contents Tables.

    • The lpEntryID member of the NEWMAIL_NOTIFICATION structure that is sent with a new mail notification. For more information about receiving and handling notifications, see Handling Notifications.

    • A call to the message's IMAPIProp::GetProps method requesting the PR_ENTRYID (PidTagEntryId) property.

  2. Call one of the following OpenEntry methods to open the message, setting lpEntryID to the message's entry identifier:

The fastest method is usable only for incoming messages and involves calling the receive folder's IMAPIFolder::OpenEntry method. The next fastest method, calling the message store's IMsgStore::OpenEntry method, is usable for all messages as is the slowest method, calling IMAPISession::OpenEntry.

Note

Folders and their contents tables can be closed at any time without adversely affecting any of the messages that were opened from within them.

To open a message that has been saved on disk

  1. Call StgOpenStorage to retrieve an IStorage interface pointer, passing the name of the message file for the pwcsName parameter.

     LPSTORAGE pStorage = NULL;
     HRESULT hr = StgOpenStorage (L"MESSAGE.MSG", NULL,
                                 STGM_TRANSACTED |
                                 STGM_READWRITE |
                                 STGM_SHARE_EXCLUSIVE,
                                 NULL, 0, &pStorage);
    
    
  2. Call OpenIMsgOnIStg to retrieve an IMessage interface pointer to access the message.

     LPMESSAGE pMessage = NULL;
     LPMALLOC pMalloc = MAPIGetDefaultMalloc();
     hr = OpenIMsgOnIStg (NULL, MAPIAllocateBuffer, MAPIAllocateMore,
                         MAPIFreeBuffer, pMalloc, NULL, pStorage,
                         NULL, 0, 0, &pMessage);