Artigo: 194627 - Última revisão: quinta-feira, 25 de Agosto de 2005 - Revisão: 3.4

Como abrir caixas de correio com o Access 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 | Reduzir tudo

Sumário

As aplicações que estão executando as estatísticas ou monitorização de caixas de correio tem de aceder a todas as caixas de correio. Pode fazer ao iniciar sessão no arquivo de informações privadas com uma conta com privilégios, ciclo através da lista de caixas de correio e abrir as caixas de correio com a função HrMailboxLogon().

Mais Informação

O seguinte código mostra como abrir todas as caixas de correio num servidor. Requer a conta de Windows NT que utiliza para iniciar a aplicação com privilégios administrativos no Exchange Server Directory.

Segue-se a lista de bibliotecas adicionais utilizados para compilar este código. (Deve adicionar estas para as bibliotecas necessárias para uma aplicação de consola Win32).

  • Version.lib
  • Exchsdk.lib
  • Mapi32.lib
  • Edkutils.lib
  • Edkmapi.lib
  • Msvcrt.lib
Existem alguns itens no código marcada com "TO:" que terá de alterar a utilizar as informações da organização e local para o servidor de acesso. Também é possível alterar o código para aceitar o servidor de nome distinto (DN) a partir da linha de comandos.
    #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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )