文章編號: 194627 - 上次校閱: 2005年8月25日 - 版次: 3.4

如何開啟具有特殊權限存取的信箱

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

執行統計資料或監視的信箱的應用程式需要存取所有信箱。可以達成此目的所登入私人資訊儲存庫,以特殊權限帳戶的信箱,清單執行迴圈,並開啟信箱具有 HrMailboxLogon() 函式。

其他相關資訊

下列程式碼將示範如何開啟所有在伺服器上信箱。它會要求您使用來啟動應用程式在 Exchange 伺服器目錄上具有管理權限的 Windows NT 帳號。

這裡是用來編譯此程式碼的額外程式庫的清單。(您應該加入這些 Win32 主控台應用程式所需程式庫)。

  • version.lib
  • Exchsdk.lib
  • Mapi32.lib
  • Edkutils.lib
  • Edkmapi.lib
  • Msvcrt.lib
以標示在程式碼中的某些項目"TO DO:"您需要將變更為使用您所存取之伺服器的組織與站台資訊。另外,也可以讓您變更程式碼,使其接受伺服器辨別名稱 (DN) 從提示。
    #include <stdio.h>
    #include <edk.h>

    HRESULT OpenMailbox(LPMAPISESSION lpMAPISession,
                        LPSTR pszExchangeServerName);

    void main()
    {
       HRESULT hr = S_OK;

       hr = MAPIInitialize(NULL);
       if(FAILED(hr))
       {
          printf("Failed to initialize MAPI\n");
       }

       char pszExchangeServerName[500];
       LPMAPISESSION lpSess = NULL;
       LPMDB   lpMDB = NULL;

       // Get the Exchange Server name from the user.
       // 
       printf("n\nPlease enter the name of your Exchange System ?  ");
       gets(pszExchangeServerName);
       printf("\n\n");

       // TO DO: Need to logon using a profile for the service account or
       //        an Exchange Admin.
       hr = MAPILogonEx(0, "", NULL,
               MAPI_LOGON_UI | MAPI_NEW_SESSION |  MAPI_EXPLICIT_PROFILE ,
               &lpSess);
       if (FAILED(hr))
       {
          MessageBox(NULL,"MAPI Logon failed",NULL,MB_OK);
       }

       if(SUCCEEDED(hr)&& lpSess)
       {
          printf("Created MAPI session\n");
          hr = OpenMailbox(lpSess, pszExchangeServerName);

          if(FAILED(hr))
             printf("Failed to Run\n");
          else
             printf("Opened users mailboxes\n");

       }

       char ch;
       printf("\nHit a key to exit");
       ch = getchar();

       if(lpSess)
          lpSess->Release();

    }

    HRESULT OpenMailbox(LPMAPISESSION lpMAPISession, LPSTR pszServerName)
    {
       HRESULT      hr            = S_OK;
       LPMAPITABLE lpMailBoxTable = NULL;
       LPSRowSet   lpRows         = NULL;
       LPENTRYID   lpMsgStoreID   = NULL;
       ULONG      cbMsgStoreID   = 0;
       LPMDB      lpMDB         = NULL;
       LPMDB      lpUserMDB      = NULL;
       LPMAPIFOLDER lpFolder      = NULL;
       LPEXCHANGEMANAGESTORE lpIManageStore = NULL;
       char pszServerDN[500];

       if (FAILED(hr = HrOpenExchangePrivateStore(lpMAPISession, &lpMDB)))
       {
          MessageBox(0L,"Message Store Not Available","Error",MB_OK);
          return MAPI_E_NOT_FOUND;
       }

       if (FAILED(hr = lpMDB->QueryInterface(IID_IExchangeManageStore,
                                (void **) &lpIManageStore)))
       {
          MessageBox(0L,"QueryInterace Failed","Error",MB_OK);
          return MAPI_E_NOT_FOUND;
       }

       // TO DO: Create server DN. Replace "myorgname" and "mysitename"
       //        with appropriate organization and site name.
       sprintf(pszServerDN,"/o=myorgname/ou=mysitename/cn=servers/cn=%s",
               pszServerName);

       if (FAILED(hr = lpIManageStore->GetMailboxTable(pszServerDN,
                                        &lpMailBoxTable,0)))
       {
          MessageBox(0L,"Mailbox Table Not Available","Error",MB_OK);
          return MAPI_E_NOT_FOUND;
       }

       //  Get a list of Mailboxes taking up resources.
       hr = HrQueryAllRows(lpMailBoxTable, NULL, NULL, NULL, 0, &lpRows);

       if(SUCCEEDED(hr))
          {
             // TO DO: Create Information Store DN. Replace "myorgname"
             //        and "mysitename" with appropriate organization
             //        and site name.
             sprintf(pszServerDN,
                     "/o=myorgname/ou=mysitename/cn=servers/cn=%s%s",
                     pszServerName,"/cn=Microsoft Private MDB");

             if (lpRows->cRows > 0)
             {
                for (UINT i=0; i < lpRows->cRows; i++)
                {
                   LPSPropValue lpspv = PpropFindProp(
                                       lpRows->aRow[i].lpProps,
                                       lpRows->aRow[i].cValues,
                                       PR_EMAIL_ADDRESS );

                   if(FAILED(hr = HrMailboxLogon(lpMAPISession,
                                      lpMDB,pszServerDN,lpspv->Value.lpszA,
                                      &lpUserMDB)))
                   {
                       MessageBox(0L,"Mailbox Not Available","Error",MB_OK);
                       continue;
                   }
                   else
                   {
                       printf("Opened %s \n",lpspv->Value.lpszA);
                   }
                   // TO DO: ****** Place Mailbox Processing Here.
                   HrMailboxLogoff(&lpUseMDB);
                }
             }
          }

       if(lpRows)
       {
          FreeProws(lpRows);
       }

       if(lpMailBoxTable)
       {
          lpMailBoxTable->Release();
       }

       if (FAILED(hr))
          return MAPI_E_NOT_FOUND;
       else
          return S_OK;
    }
				

這篇文章中的資訊適用於:
  • Microsoft Office Outlook 2007
  • Microsoft Messaging Application Programming Interface
  • Microsoft Exchange Development Kit 5.5
  • Microsoft Exchange Server 2003 Software Development Kit
關鍵字:?
kbmt kbcode kbhowto KB194627 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:194627? (http://support.microsoft.com/kb/194627/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。