如何開啟郵件,Outlook 物件模型中使用取自 MAPI 在 Visual C++ 6.0 中的項目識別碼

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:304894
本文已封存。本文係以「現狀」提供且不會再更新。
簡介
本文將告訴您如何使用 [PR_ENTRYID 屬性取自延伸 MAPI 開啟並顯示使用 Outlook 物件模型的項目。
其他相關資訊
如果要建立,並建置這個範例專案,Microsoft Visual C++ 中的請依照下列步驟執行:
  1. 開啟 Visual Studio、 建立新的 Win32 應用程式,名為"OOMEntryID 」,然後選取 [A 簡單 Win32 應用程式
  2. 開啟 OOMEntryID.cpp 檔案,並以下列程式碼取代其全部內容。請確定您變更路徑至 Mso.dll] 和 [Msoutl.olb],來指向其各自的位置,為您的電腦
    #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. 按一下 [專案] 功能表 設定]。按一下 [連結] 索引標籤,然後選取 [為類別的 [輸入]。

    物件/程式庫 模組區段新增下列。
    MSVCRT.LIB addrLkup.lib edkguid.lib edkdebug.lib edkmapi.lib edkutils.lib mapi32.lib						
    對於 [忽略程式庫] 區段新增 libcd.lib 和 libc.lib。

    關閉 [專案設定] 對話方塊。
  4. 建置並執行專案。
  5. 會顯示 [收件匣] 中的第一個訊息。
参考
如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
259298如何使用 # import 陳述式來使用從 Visual C++ 的 Outlook 物件模式

警告:本文為自動翻譯

內容

文章識別碼:304894 - 最後檢閱時間:12/06/2015 04:31:49 - 修訂: 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 KbMtzh
意見反應