ID do artigo: 194627 - Última revisão: quinta-feira, 25 de agosto de 2005 - Revisão: 3.4

Como abrir caixas de correio com acesso privilegiado

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

Aplicativos que estão fazendo estatísticas ou monitoramento de caixas de correio precisam acessar todas as caixas de correio. Você pode fazer isso, fazer logon no armazenamento de informações particulares com uma conta com privilégios, um loop pela lista de caixas de correio e abrir as caixas de correio com a função HrMailboxLogon().

Mais Informações

O código a seguir mostra como abrir todas as caixas de correio em um servidor. Ele requer a conta do Windows NT usada para iniciar o aplicativo com privilégios administrativos no diretório do Exchange Server.

Aqui está a lista de bibliotecas adicionais usados para compilar este código. (Você deve adicioná-los para as bibliotecas necessárias para um aplicativo de console do Win32.)

  • Version.lib
  • Exchsdk.lib
  • Mapi32.lib
  • Edkutils.lib
  • Edkmapi.lib
  • Msvcrt.lib
Há alguns itens dentro do código marcadas com "TO:" que você precise alterar para usar as informações de organização e site para o servidor que você acessar. Também é possível alterar o código para aceitar o servidor de nome distinto (DN) no prompt.
    #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;
    }
				

A informação contida neste artigo aplica-se a:
  • Microsoft Office Outlook 2007
  • Microsoft Messaging Application Programming Interface
  • Microsoft Exchange Development Kit 5.5
  • Microsoft Exchange Server 2003 Software Development Kit
Palavras-chave: 
kbmt kbcode kbhowto KB194627 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 194627  (http://support.microsoft.com/kb/194627/en-us/ )