Как открыть папку Finder почтового ящика делегата с помощью Outlook MAPI

Я ищу способ открыть папку «Finder» почтового ящика делегата с помощью Outlook MAPI.

Я создал EntryID почтового ящика делегата, вызвав CreateStoreEntryID. Используя этот EntryID, я вызываю OpenMsgStore, что удалось. Теперь я пытаюсь открыть папку «Finder», которая завершается ошибкой MAPI_E_INVALID_PARAMETER. Я могу получить другие папки, такие как «Входящие», «Отправленные» и т. д.

          enum {

                         ePR_VALID_FOLDER_MASK,

                         ePR_IPM_FOLDER_ENTRYID,

                         FOLDER_NUMCOLS

          };

          SizedSPropTagArray(FOLDER_NUMCOLS, cols) = {

                         FOLDER_NUMCOLS,

                         {

                                       PR_VALID_FOLDER_MASK,

                                       PR_FINDER_ENTRYID,

                         }

          };



          ULONG pcount;

          SPropValue *props;

          hRes = pMapi_msgstore->GetProps((SPropTagArray *)&cols, 0, &pcount, &props);



          if (hRes == S_OK || hRes == MAPI_W_ERRORS_RETURNED) {

                         LONG mask;

                         if (props[ePR_VALID_FOLDER_MASK].ulPropTag != PT_ERROR)

                                       mask = props[ePR_VALID_FOLDER_MASK].Value.ul;

                         else

                                       mask = 0;

                         if ((mask & FOLDER_FINDER_VALID) &&

                                       props[ePR_IPM_FOLDER_ENTRYID].ulPropTag != PT_ERROR)

                         {

                                       hRes = **pMapi_msgstore->OpenEntry**(props[ePR_IPM_FOLDER_ENTRYID].Value.bin.cb,

                                       (LPENTRYID)props[ePR_IPM_FOLDER_ENTRYID].Value.bin.lpb,

                                       NULL,

                                       MAPI_MODIFY,

                                       &ulType,

                                       (LPUNKNOWN*)&m_lpFinderFolder);

Здесь вызов OpenEntry завершается с ошибкой MAPI_E_INVALID_PARAMETER. Вызов pMapi_msgstore -> GetProps((SPropTagArray *)&cols, 0, &pcount, &props) не завершается ошибкой, но &props заполняется неправильно. Невозможно открыть папку Finder почтового ящика делегата?

Спасибо.


person user357254    schedule 04.06.2015    source источник


Ответы (1)


Линия

props[ePR_IPM_FOLDER_ENTRYID].ulPropTag != PT_ERROR)

необходимо изменить на

(props[ePR_IPM_FOLDER_ENTRYID].ulPropTag & PROP_TYPE_MASK) != PT_ERROR)
person Dmitry Streblechenko    schedule 04.06.2015
comment
Я предпочитаю макрос PROP_TYPE здесь. В любом случае вам необходимо выполнить эту проверку для каждого свойства, которое вы получаете от GetProps, поскольку отсутствующие/отсутствующие свойства довольно часто встречаются в MAPI. - person sgriffin; 07.06.2015