2008-12-08 1 views
1

Я ищу, чтобы написать автоматический сценарий монитора, чтобы программно извлекать информацию из почтового ящика другого пользователя Exchange 2003. У меня есть код C++ для входа в MAPI и подключения к моему собственному почтовому ящику. Я также могу использовать апплет Control Panel-> Mail для настройки почтового ящика другого пользователя в свой профиль, и мой код может получить доступ к этому пути. Однако это было сделано на моем рабочем столе с установленным Outlook, который предоставляет более богатый редактор профиля почты.Использование MAPI w/C++, как я могу открыть папку «Входящие» другого пользователя?

Поскольку это будет работать на сервере, я бы предпочел не устанавливать Outlook вообще. Вместо этого я могу установить MAPI client. Затем я создаю простое приложение MAPI, которое всплывает из мастера профиля почты, используя MAPILogonEx() с флагом MAPI_LOGON_UI. Однако основной клиент MAPI не имеет функций для настройки почтового ящика другого пользователя. В качестве требования я могу запустить этот сценарий только как учетную запись службы приложения мониторинга, поэтому я не могу сказать, что он запускается как учетная запись, чей почтовый ящик мне нужен.

Возможно ли подключиться к почтовому ящику другого пользователя (при условии, что разрешения уже предоставлены) с использованием основного клиента MAPI? Или абсолютно необходимо установить Outlook для этой функции?

ответ

0

Вы изучили ConfigureMsgService? Я считаю, что работает с Exchange MAPI, или вы говорите, что попробовали это, и это не сработало?

+0

IMsgServiceAdmin :: ConfigureMsgService установит почтовый ящик для профиля. То, что я действительно искал, было способом добавления _additional_ почтовых ящиков. Когда вы делаете это в Outlook, MAPI рассматривает их как дополнительные записи IMsgStore. Без Outlook, как это можно сделать? – spoulson 2008-12-08 19:06:55

1

Я вижу ... Я не уверен, как это сделать явным образом; это обычно побочный эффект вызова CreateStoreEntryID с неправильными флагами. Что вы хотите сделать, это вероятно:

  1. Получит IID_IExchangeManageStore от клиента по умолчанию хранилища сообщений
  2. Вызов CreateStoreEntryID
  3. Затем открыть этот магазин по въездному ID

    LPEXCHANGEMANAGESTORE mapiObject = NULL; 
    
    store->QueryInterface(IID_IExchangeManageStore, (LPVOID *) &mapiObject); 
    
    mapiObject->CreateStoreEntryID(server, mailbox, OPENSTORE_TAKE_OWNERSHIP | 
        OPENSTORE_USE_ADMIN_PRIVILEGE, &len, &buffer); 
    
    //Call OpenEntry on the entry id 
    

Если вы хотите получить более подробный пример, найдите источник проекта MFC MAPI для CreateStoreEntryID. Если у вас есть другие вопросы, лучшим местом для их ответа является новостная группа microsoft.public.win32.programmer.messaging.

+0

Мое исследование по этой теме согласуется с этим предложением. Однако поиск двоичных файлов и заголовков, которые дают вам IExchangeManageStore, кажется невозможным; удален из MS download. До сих пор он доступен? – spoulson 2008-12-22 22:11:56

1

Я настоятельно рекомендую использовать клиент MAPI Microsoft Exchange (как вы уже связали). Он спроектирован как более надежный, чем версия этих версий Outlook. API Outlook не должен отличаться от Outlook и Exchange Server в отношении расширенного MAPI.

Чтобы открыть другие почтовые магазины, вам потребуется использовать Extended MAPI (как описано в Cain T S Random), и, конечно, ваше приложение должно быть зарегистрировано как пользователь Windows с соответствующими разрешениями на сервере Exchange.

Смежные вопросы