本篇主要介紹如何設定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