CE MAPI執行個體講解(7)

來源:互聯網
上載者:User
   本篇主要介紹如何設定Message的附件內容,下一篇會介紹如何擷取附件。長話短說,下面的例子將完成如下的事情:

1) 準備工作,在Temp目錄下先放上幾張圖片,在這個例子裡面,我在Temp目錄放兩張JPG圖片,1.jpg,2.jpg,我將把這兩張圖片放到一個Message裡面,產生兩個附件。2) 在Outlook草稿箱裡面建立出一條新的Message。3) 為Message添加附件。 如何在Outlook草稿箱裡面建立一條新的Message,我想通過前面的文章已經解釋清楚了,這裡就不羅嗦了,以下假設我們已經擷取了IMessage*對象指標。首先提出一個協助函數:MAPIHelp_AddAttachment,該函數作用是為指定的Message添加指定檔案作為附件,定義如下:       BOOL          MAPIHelp_AddAttachment( IMessage* pMsg, LPCTSTR szFilePath, LPCTSTR szFileName );       pMsg : Message目標對象指標     szFilePath : 需要作為附件添加的檔案全路徑     szFileName : 需要作為附件添加的檔案名稱,作為附件的名稱以下是函數具體實現:     BOOL MAPIHelp_AddAttachment( IMessage* pMsg, LPCTSTR szFilePath, LPCTSTR szFileName )     {          if( NULL == pMsg || NULL == szFilePath )               return FALSE;           BOOL bRet          = FALSE;          ULONG ulAttachNum = 0;          LPATTACH pAttach   = NULL;          IStream* pStream   = NULL;          HANDLE hFile       = NULL;          SPropValue rgpropsTo[1] = {0};          DWORD dwChunkSize = 4096;          DWORD dwSizeRead   = 0;         //預備BUFFER,用來讀寫檔案內容          LPBYTE pData       = new BYTE[dwChunkSize];          if( NULL == pData )              return FALSE;          //建立附件,返回IAttach對象,每個IAttach對象對應於一個附件, ulAttachNum是這個對象的標識,我們可以通過IMessage::OpenAttach時傳入這個ID來讀取這個附件,具體的方法會在下篇時介紹。          if( FAILED(pMsg->CreateAttach( NULL, NULL, &ulAttachNum, &pAttach )) )              goto Exit;              //設定附件名稱          rgpropsTo[0].ulPropTag      = PR_ATTACH_FILENAME;          rgpropsTo[0].Value.lpszW    = (LPTSTR)szFileName;          if( FAILED(pAttach->SetProps(1, rgpropsTo, NULL)) )              goto Exit;          //通過OpenProperty擷取IStream對象,有了IStream對象,我們就可以讀寫資料。對於IAttach:: OpenProperty,CE上只支援PR_ATTACH_DATA_BIN屬性。          if( FAILED(pAttach->OpenProperty( PR_ATTACH_DATA_BIN, NULL, NULL, MAPI_MODIFY, (LPUNKNOWN *)&pStream )) )              goto Exit;          //下面部分是檔案讀寫部分,從原始檔案裡讀出資料,再寫到附件裡面去          hFile                  = ::CreateFile( szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );          if( INVALID_HANDLE_VALUE == hFile )              goto Exit;           while( ReadFile( hFile, pData, dwChunkSize, &dwSizeRead, NULL ) )          {              if( 0 >= dwSizeRead )                   break;              pStream->Write( pData, dwSizeRead, &dwSizeRead );          }           bRet               = TRUE;     Exit:         //完畢以後記的釋放擷取的對象。          RELEASE_OBJ(pStream);          RELEASE_OBJ(pAttach);          DELETE_OBJ(pData);          if( INVALID_HANDLE_VALUE != hFile )              ::CloseHandle( hFile );          return bRet;} 有了上面的協助函數,當我們想為一條Message添加附件時,可以按照如下調用:     MAPIHelp_AddAttachment( pMsg, _T("//Temp//1.jpg"), _T("1.jpg") );MAPIHelp_AddAttachment( pMsg, _T("//Temp//2.jpg"), _T("2.jpg") );……  完畢,慣例,歡迎大家拍磚。  無聊客(blog.csdn.net/yzx0023) yzx0023@gmail.com   2006-7-15

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.