Как изменить параметры поставщика транспорта MS Exchange

Переводы статьи Переводы статьи
Код статьи: 170225 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье объясняется, как программно изменить значения поставщика транспорта Microsoft Exchange и просмотрите изменения, после их фиксации.

Дополнительная информация

Изменение параметров для поставщика службы Microsoft Exchange Server может быть разбит на два этапа: Создание и настройка профиля и изменение некоторых или всех параметров поставщика службы Microsoft Exchange Server.

Создание и настройка профиля

Сначала выполните шаги, перечисленные ниже, для создания и настройки профиля. (Эти действия можно найти на Microsoft Developer Network (MSDN) в статье «Создание и настройка профиля».)
  1. Прочитайте файл заголовка для каждой службы. Понимаете, что необходимо настроить свойства и значения, которые будут использовать.
  2. Вызов функции MAPIAdminProfiles получить интерфейс IProfAdmin. Вызовите метод CreateProfile для создания профиля и AdminServices метод, чтобы получить интерфейс IMsgServiceAdmin.
  3. Добавьте в профиль службы сообщений. Обратитесь к предыдущей инструкции для заказа, следует использовать. Для каждой службы с помощью IMsgServiceAdmin интерфейса, выполните следующие действия:

    1. Вызовите метод CreateMsgService.
    2. Для получения структуры MAPIUID только что созданную службу:

      1. Вызовите метод GetMsgServiceTable для получения IMAPITable интерфейса.
      2. Вызов функции HrQueryAllRows для извлечения всех строк из таблицы.
      3. Получите PR_SERVICE_UID столбцу последней строки. Это структура MAPIUID добавлен последнего обслуживания. Вы можете проверить с помощью утверждения, другие свойства службы должным образом.
    3. Вызовите метод ConfigureMsgService, структура MAPIUID службы, созданного и массив значений свойств, с помощью его свойства конфигурации.

      • Если вы должны создать конфигурацию вызовы, требующие IMAPISession интерфейса, такие как IMAPISession::SetDefaultStore IAddrBook::SetPAB и IAddrBook::SetABSearchPath, передайте в функцию MAPILogonEx MAPI_NO_MAIL флаг.
      • Чтобы сделать временный профиль, вызовите IProfAdmin::DeleteProfile метод сразу после входа в систему профиль. Он будет удален после завершения сеанса, а не будет отображаться для других приложений, в настоящий момент.

Изменение параметров службы поставщика

Действия, описанные выше помогли вам создать и настроить общий профиль. На втором этапе предстоит изменить некоторые или все параметры службы доступа Microsoft Exchange Server. (Эти действия можно также найти в MSDN в статье «Создание профиля через MAPI.»)

При достижении на шаге которого вызывается метод IMsgServiceAdmin::ConfigureMsgService MAPI, укажите в параметре lpProps следующую информацию. Этот параметр является указателем на структуру SPropValue, содержащий значения свойств для отображения в окне свойств.
  • Основной сервер приложения почтового ящика. Свойство тег PR_PROFILE_HOME_SERVER. Это свойство задается в EDKMDB.H.
  • Имя почтового ящика приложения, с помощью свойства тега PR_PROFILE_MAILBOX. Это свойство задается в EDKMDB.H.

Аннотация

Приведенные выше, должны иметь код, который сравним с псевдокод ниже.

(Примечание.: Следующий псевдокод использует PR_UNRESOLVE_XXX свойства для настройки профиля. С помощью свойств, перечисленных выше, обычно не настройки службы, как ожидалось.)
  • Получить указатель интерфейса IProfAdmin MAPIAdminProfiles()
  • Создать новый профиль с IProfAdmin::CreateProfile()
  • Получить указатель интерфейса IMsgServiceAdmin IProfAdmin::AdminServices()
  • Добавить новый профиль с IMsgServiceAdmin::CreateMsgService() служба сообщений
  • Получение таблицы сообщений службы, службы сообщений с IMsgServiceAdmin::GetMsgServiceTable()
  • Получить строку из таблицы сообщений службы, который представляет поставщик службы Microsoft Exchange Server (MSEMS) с HrQueryAllRows()
  • Задайте значения для PR_PROFILE_UNRESOLVED_NAME и PR_PROFILE_UNRESOLVED_SERVER с IMSgServiceAdmin::ConfigureMsgService()
  • Вход в систему с помощью нового профиля с MAPILogonEx() новый сеанс MAPI
  • Выпуск и повторно использовать объекты IMsgService и IMAPITable
  • Новый указатель интерфейса IMsgServiceAdmin
  • Получить таблицу службы сообщений
  • Найдите строку, представляющую MSEMS служба сообщений
  • Откройте окно свойств для службы с IMsgServiceAdmin::ConfigureMsgService

Пример программы

Ниже приведен псевдокод один из возможных вариантов реализации. Это только выборка, но оно соответствует цели разработки различных параметров поставщика службы Microsoft Exchange и отображение результатов этих изменений:
   #include "windows.h"
   #include "edk.h"
   #include "stdio.h"
   #include "d:\customer\makeprofile\makeprofile\makeprofile.h"

   char g_lpszProfile[256];



   STDMETHODIMP ChangeMSESPSettings ( LPSTR lpszProfile, HWND hWnd )
     {
     HRESULT hRes = S_OK;

     LPPROFADMIN       pProfAdmin = NULL;
     LPSERVICEADMIN    pSvcAdmin = NULL;
     LPMAPITABLE       pMsgSvcTable = NULL;
     LPSRowSet         pRows = NULL;
     SPropValue        rgval[2];
     LPMAPISESSION     pSession = NULL;
     SRestriction      sres;
     SPropValue        pSvcProps;
     enum {iSvcName, iSvcUID, cptaSvc};
     SizedSPropTagArray (cptaSvc, sptCols) = { cptaSvc,
                                                 PR_SERVICE_NAME,
                                                 PR_SERVICE_UID };
   // Copy the profile name into a global variable.
    strcpy ( g_lpszProfile, lpszProfile );

       for ( int i = 0; i < 2; i++)
         ZeroMemory ( &rgval[i], sizeof ( SPropValue ) );

       //  Get IProfAdmin interface pointer.
       if ( FAILED ( hRes = MAPIAdminProfiles ( 0L, &pProfAdmin ) ) )
          goto Quit;

       //   Create a new profile -- IProfAdmin::CreateProfile()
       //   If the attempt to create the profile fails, remove the
       //   profile.
       if ( FAILED ( hRes = pProfAdmin -> CreateProfile ( lpszProfile,
                                                            "",
                                                            0L,
                                                            0L ) ) )
       {
         hRes = pProfAdmin -> DeleteProfile ( lpszProfile, 0L );
         goto Quit;
       }
    printf("CreateProfile worked\n");

       // Get IMsgServiceAdmin interface pointer.
        if ( FAILED ( hRes = GetAdminService ( &pSvcAdmin, 0L ) ) )
           goto Quit;

        // Add a message service to the newly created profile.
        if (FAILED(hRes = pSvcAdmin->CreateMsgService ( "MSEMS",
                                           "Microsoft Exchange",
                                           (ULONG)hWnd,
                                           0L ) ) )
        goto Quit;

        // Get the message service table of the Message service.
        if ( FAILED ( hRes = pSvcAdmin->GetMsgServiceTable(0L,
                                       &pMsgSvcTable) ) )
           goto Quit;

        // Get the row from the message service table that represents the
        // Microsoft Exchange Server service provider.

        sres.rt = RES_CONTENT;
        sres.res.resContent.ulFuzzyLevel = FL_FULLSTRING;
        sres.res.resContent.ulPropTag = PR_SERVICE_NAME;
        sres.res.resContent.lpProp = &pSvcProps;

        pSvcProps.ulPropTag = PR_SERVICE_NAME;
        pSvcProps.Value.lpszA = "MSEMS";

        if ( FAILED ( hRes = HrQueryAllRows ( pMsgSvcTable,
                                             (LPSPropTagArray)&sptCols,
                                              &sres,
                                              NULL,
                                              0,
                                              &pRows ) ) )
           goto Quit;

        // Set the values for PR_PROFILE_UNRESOLVED_NAME and
        // PR_PROFILE_UNRESOLVED_SERVER

        rgval[0].ulPropTag = PR_PROFILE_UNRESOLVED_NAME;
   //     rgval[0].Value.lpszA = <mailbox name> ;
        rgval[0].Value.lpszA =  "Karenwo";

        rgval[1].ulPropTag = PR_PROFILE_UNRESOLVED_SERVER;
   //     rgval[1].Value.lpszA = <Exchange Server Name>;
        rgval[1].Value.lpszA = "Karenwo";

        if ( FAILED ( hRes = pSvcAdmin -> ConfigureMsgService(
             (LPMAPIUID) pRows -> aRow->lpProps[iSvcUID].Value.bin.lpb,
              0, NULL, 2, rgval ) ) )
         hRes = pProfAdmin -> DeleteProfile ( lpszProfile, 0L );

         // Logon to a new MAPI session using new profile -- MAPILogonEx()
         if ( SUCCEEDED ( hRes = MAPILogonEx ( ( ULONG )hWnd,
                                              lpszProfile,
                                              "",
                                              MAPI_NEW_SESSION |
                                              MAPI_NO_MAIL, &pSession ) ) )
         {
            // Release and reuse IMsgService and IMAPITable
            // objects.
            pSvcAdmin -> Release ( );
            pMsgSvcTable -> Release ( );
            FreeProws ( pRows );

            pSvcAdmin = NULL;
            pMsgSvcTable = NULL;
            pRows = NULL;

            // Get new IMsgServiceAdmin interface pointer.
            hRes = pSession -> AdminServices ( 0L, &pSvcAdmin );

            // Get the Message service table.
            if(FAILED(hRes = pSvcAdmin->GetMsgServiceTable ( 0L,
                                                        &pMsgSvcTable ) ) )
                   goto Quit;

            // Find the row that represents the MSEMS message service.
            if ( FAILED ( hRes = HrQueryAllRows (pMsgSvcTable,
                                                 (LPSPropTagArray)&sptCols,
                                                 &sres,
                                                 NULL,
                                                 0,
                                                 &pRows ) ) )
                   goto Quit;

            // Open the property sheet for the service.
            if ( FAILED ( hRes = pSvcAdmin -> ConfigureMsgService(
              (LPMAPIUID) pRows -> aRow -> lpProps[iSvcUID].Value.bin.lpb,
               0,
               SERVICE_UI_ALLOWED |
               SERVICE_UI_ALWAYS,
               5,
               rgval) ) )

                   goto Quit;
       return hRes;
       }

       Quit:
         if ( hRes )
           hRes = pProfAdmin -> DeleteProfile ( lpszProfile, 0L );

         if ( pMsgSvcTable )
         {
            FreeProws( pRows );
            pRows = NULL;
            pMsgSvcTable -> Release ( );
            pMsgSvcTable = NULL;
         }


         if ( pSvcAdmin )
         {
            pSvcAdmin -> Release ( );
            pSvcAdmin = NULL;
         }

         if ( pSession )
         {
            pSession -> Logoff ( (ULONG)hWnd, MAPI_LOGOFF_SHARED, 0L );
            pSession -> Release ( );
            pSession = NULL;
         }

   return hRes;
       }


   STDMETHODIMP GetAdminService ( LPSERVICEADMIN * lppSvcAdmin,
           LPMAPISESSION m_pSession)
        {
           HRESULT hRes = S_OK;
           LPSERVICEADMIN lpSvcAdmin = NULL;
   LPPROFADMIN       pProfAdmin = NULL;

           if(NULL!=m_pSession)
           hRes = m_pSession -> AdminServices ( 0L, &lpSvcAdmin );
           else

                   hRes = MAPIAdminProfiles(0L, &pProfAdmin);

           if ( SUCCEEDED ( hRes ) )
   hRes = pProfAdmin -> AdminServices( g_lpszProfile, "", 0L, 0L,
   &lpSvcAdmin );
           else
   return hRes;

           if ( SUCCEEDED ( hRes ) )
                   *lppSvcAdmin = lpSvcAdmin;

           return hRes;
        }
				
Этот код приводит в окне свойств системы обмена сообщениями службы для поставщика службы Microsoft Exchange Server, отображается с помощью свойства сервера и почтового ящика для профиля.

Свойства

Код статьи: 170225 - Последний отзыв: 14 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Office Outlook 2007
  • Интерфейс программирования приложений передачи сообщений MAPI
Ключевые слова: 
kbcode kbhowto kbmsg kbmt KB170225 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:170225

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com