Como abrir uma mensagem utilizando o modelo de objecto do Outlook com o ID da entrada obtido a partir do MAPI no Visual C++ 6.0

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: 304894
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
INTRODUÇÃO
Este artigo demonstra como utilizar o PR_ENTRYID propriedade obtida extended MAPI para abrir e apresentar um item utilizando o modelo de objectos do Outlook.
Mais Informação
Para criar e construir este projecto de exemplo no Microsoft Visual C++, siga estes passos:
  1. Abra o Visual Studio, criar uma nova aplicação de Win32 denominado "OOMEntryID" e, em seguida, seleccione A aplicação de Win32 simples .
  2. Abra o ficheiro OOMEntryID.cpp e substitua o conteúdo de todo o código abaixo. Certifique-se que altera o caminho para no ficheiro Mso.dll e Msoutl.olb para apontar para as respectivas localizações do computador.
    #include "stdafx.h"#include "edk.h"// Import Outlook object model.#define IMPPROPS rename_namespace("OL")// Define this according to the Outlook object model // version you are compiling under.//#define OL2000 // Outlook 2000#define OL2002 // Outlook 2002 (2002)#if defined(OL2000)  // TODO: Verify that the path to the file is correct.  #import "c:\Program Files\Microsoft Office\Office\mso9.dll" IMPPROPS   #import "c:\Program Files\Microsoft Office\Office\msoutl9.olb" IMPPROPS#elif defined(OL2002)  // TODO: Verify that the path to the file is correct.  #import "c:\Program Files\Common Files\Microsoft Shared\Office10\mso.dll" IMPPROPS   #import "c:\Program Files\Microsoft Office\Office10\\msoutl.olb" IMPPROPS#endifstruct StartOle {   StartOle() { CoInitialize(NULL); }   ~StartOle() { CoUninitialize(); }} _inst_StartOle;void dump_com_error(_com_error &e){    _tprintf(_T("Oops - hit an error!\n"));    _tprintf(_T("\a\tCode = %08lx\n"), e.Error());    _tprintf(_T("\a\tCode meaning = %s\n"), e.ErrorMessage());    _bstr_t bstrSource(e.Source());    _bstr_t bstrDescription(e.Description());    _tprintf(_T("\a\tSource = %s\n"), (LPCTSTR) bstrSource);    _tprintf(_T("\a\tDescription = %s\n"), (LPCTSTR) bstrDescription);}using namespace OL;int APIENTRY WinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPSTR     lpCmdLine,                     int       nCmdShow){  // MAPI session pointer.  LPMAPISESSION  pSession = NULL;   HRESULT hRes = S_OK;    // Please add error checking yourself.  // Initialize MAPI.  hRes = MAPIInitialize(NULL);  // Log on to MAPI and get a session pointer.  hRes = MAPILogonEx(0, NULL, NULL, MAPI_LOGON_UI, &pSession);  // Open message store.  ULONG      cbEIDStore = 0;  LPENTRYID  lpEIDStore = NULL;  IMsgStore  *pMsgStore;  hRes = HrMAPIFindDefaultMsgStore(pSession,                   &cbEIDStore,                   &lpEIDStore);  hRes = pSession->OpenMsgStore(NULL,                   cbEIDStore,                   lpEIDStore,                   NULL,                   MAPI_BEST_ACCESS,                   &pMsgStore);    // Open Inbox.  ULONG        ulObjType;  ULONG        cbEntryID;  LPENTRYID    lppEntryID;  IMAPIFolder  *lpFolder;  hRes = pMsgStore->GetReceiveFolder(NULL,                      NULL,                      &cbEntryID,                      &lppEntryID,                      NULL);  hRes = pMsgStore->OpenEntry(cbEntryID,                 lppEntryID,                 NULL,                 MAPI_BEST_ACCESS,                 &ulObjType,                 (LPUNKNOWN *)&lpFolder);  // Get Inbox items.  LPMAPITABLE  lpContentsTable = NULL;  LPSRowSet    pRows = NULL;  enum {ePR_SUBJECT, ePR_ENTRYID,  NUM_COLS};  static SizedSPropTagArray(NUM_COLS,sptCols)   = {NUM_COLS, PR_SUBJECT, PR_ENTRYID};    hRes = lpFolder->GetContentsTable(0,                     &lpContentsTable);  hRes = HrQueryAllRows(lpContentsTable,               (LPSPropTagArray) &sptCols,               NULL,               NULL,               0,               &pRows);    if (pRows->cRows > 0) // Make sure there is at least one message.  {    // Get the first item in the Inbox and get its entry ID.    IMessage    *lpMessage;    LPSPropValue  pspvEID = NULL;    hRes = pMsgStore->OpenEntry(pRows->aRow[0].lpProps[ePR_ENTRYID].Value.bin.cb,                              (LPENTRYID)pRows->aRow[0].lpProps[ePR_ENTRYID].Value.bin.lpb,                              NULL,                              MAPI_BEST_ACCESS,                              &ulObjType,                              (LPUNKNOWN *)&lpMessage);        hRes = HrGetOneProp(lpMessage,               PR_ENTRYID,               &pspvEID);        char szEID[1001];    HexFromBin(pspvEID[0].Value.bin.lpb,                pspvEID[0].Value.bin.cb,                szEID);    // Open Outlook item using the entry ID we got from MAPI.    try{      OL::_ApplicationPtr  pOutlook("Outlook.Application");      OL::_NameSpacePtr    pNameSpace = pOutlook->GetNamespace("MAPI");      OL::_MailItemPtr     pMailItem = NULL;      pMailItem = pNameSpace->GetItemFromID(szEID, vtMissing);      if (pMailItem)      {        // Display message.        pMailItem->Display(vtMissing);      }    }     catch (_com_error &e)    {      dump_com_error(e);    }    UlRelease(lpMessage);  }  else  {    MessageBox(NULL,            "There are no messages in the inbox",            "Open Item",            MB_OK);  }  pSession->Logoff(NULL, 0L, 0);  FreeProws(pRows);  UlRelease(lpContentsTable);  UlRelease(lpFolder);  UlRelease(pMsgStore);  UlRelease(pSession);  return 0;} 					
  3. No menu projecto , clique em definições . Faça clique sobre o separador ligação e, em seguida, seleccione entrada como a categoria.

    Para a secção de módulos/Biblioteca de objectos , adicione o seguinte.
    MSVCRT.LIB addrLkup.lib edkguid.lib edkdebug.lib edkmapi.lib edkutils.lib mapi32.lib						
    Para a secção Bibliotecas ignorar , adicione libcd.lib e libc.lib.

    Feche a caixa de diálogo Definições do Project .
  4. Criar e, em seguida, execute o projecto.
  5. A primeira mensagem na pasta a receber será apresentada.
Referências
Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
259298Como utilizar um modelo de objecto do Outlook a partir do Visual C++ utilizando uma instrução #import

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 304894 - Última Revisão: 12/06/2015 04:31:45 - Revisão: 5.5

Microsoft Messaging Application Programming Interface, Microsoft Outlook 2000, Microsoft Outlook 2000 Service Pack 1, Microsoft Outlook 2002 Standard Edition, Microsoft Visual Studio 6.0 Enterprise Edition

  • kbnosurvey kbarchive kbmt kbemail kbopenfile kbprogramming kbhowto kbmsg KB304894 KbMtpt
Comentários