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.
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().
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
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/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
O que podemos fazer para melhor estas informações?
Para proteger a sua privacidade, não inclua as informações de contacto nos comentários.
Obrigado! Os seus comentários serão utilizados para nos ajudar a melhorar o conteúdo do suporte. Para obter mais opções de assistência, visite a Home Page da Ajuda e Suporte.