Всех приветствую!!!
столкнулся с такой проблемой: при попытке прочесть (получить) вложения никак не могу обратиться к такому свойству аттачей как PR_ATTACH_DATA_BIN!!!
погуглив малость прочел, что PR_ATTACH_METHOD должен быть установлен ATTACH_BY_VALUE(то есть равен 1). У меня стоит OutlookSpy, я все проверил так и есть...но при попытке выполнить OpenProperty(PR_ATTACH_DATA_BIN... никак не получается достучаться до этого свойства!!!ниже привожу отрывок кода(может я что-то упускаю)
SizedSPropTagArray( 4, rgTags) = { 4, PR_SENDER_EMAIL_ADDRESS, PR_DISPLAY_TO, PR_SUBJECT, PR_BODY };
SizedSPropTagArray( 5, atContents) = { 5, PR_ATTACH_NUM, PR_ATTACH_FILENAME, PR_ATTACH_SIZE, PR_ATTACH_METHOD, PR_ATTACH_DATA_BIN };
IStream *pAttachstream = NULL;
//LPSTREAM pAttachstream = NULL;
HANDLE hAttachFile = NULL;
TCHAR tchFilePath[MAX_PATH] = TEXT("\0");
DWORD dwRead = 0, dwWritten = 0;
LPVOID lpBuffer;
WCHAR res_file[MAX_PATH];
//lpBuffer = (LPVOID)LocalAlloc(LPTR, 4096);
lpBuffer = (LPVOID)malloc( 4096);
if( !lpBuffer )
for(int k=0; k<mescount; k++){
hr = lpMessageStore->OpenEntry( pRow->aRow[k].lpProps[0].Value.bin.cb, (LPENTRYID)pRow->aRow[k].lpProps[0].Value.bin.lpb,
NULL, 0, &ulObjType, (LPUNKNOWN FAR *)&lpMessage);
hr = lpMessage->GetProps((LPSPropTagArray) &rgTags, MAPI_UNICODE, &cCount, &rgprops);
if(FAILED(hr)){
printf("ERROR GetProps\n");
MAPIUninitialize();
return hr;
}
hr = lpMessage->GetAttachmentTable( MAPI_UNICODE, &lpAttachTable);
if(FAILED(hr)){
printf("ERROR GetAttachmentTable\n");
MAPIUninitialize();
return hr;
}
//else
//printf("SUCCESS GetAttachmentTable\n");
hr = lpAttachTable->GetRowCount(0,&atcount);
hr = lpAttachTable->SetColumns( (LPSPropTagArray)&atContents, 0 );
if(FAILED(hr))
{
printf("ERROR SetColumns\n");
MAPIUninitialize();
return hr;
}
if (atcount > 0){
printf("atcount = %d\n", atcount);
hr = lpAttachTable->QueryRows( atcount, 0, &pRow1 );
if(FAILED(hr)){
printf("ERROR QueryRows\n");
MAPIUninitialize();
return hr;
}
/*
hr = lpMessage->GetProps((LPSPropTagArray) &atContents, MAPI_UNICODE, &propCount, &atrgprops);
if(FAILED(hr)){
printf("ERROR GetProps\n");
MAPIUninitialize();
return hr;
}
*/
for( int m=0; m<atcount; m++)
{
//for( int n=0; n<propCount; n++){
atnum = pRow1->aRow[m].lpProps[0].Value.l;
printf( "Number = %u\n", atnum );
printf("PR_ATTACH_METHOD = %u \n", pRow1->aRow[m].lpProps[3].Value.l);
//hr = lpMessage->OpenAttach( atnum, NULL, MAPI_BEST_ACCESS, &pAttach );
hr = lpMessage->OpenAttach( atnum, NULL, NULL, &pAttach );
if(FAILED(hr))
{
return hr;
}
wsprintf(tchFilePath, TEXT("\\%s"), pRow1->aRow[m].lpProps[1].Value.lpszA);
hAttachFile = CreateFile(tchFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
hr = pAttach->OpenProperty( PR_ATTACH_DATA_BIN, (LPIID)&IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY,IUnknown **)&pAttachstream);
//ИМЕННО ТУТ ВОЗНИКАЕТ ОШИБКА
if( FAILED(hr))
{
wprintf( L"ERRRRRRR: hr = 0x%p\n", hr );
return hr;
}
else
printf("OK!!!!\n");
do {
memset(lpBuffer, 0, 4096);
dwRead = 0;
wprintf( L"pAttachstream = 0x%p\n", pAttachstream );
pAttachstream->Read(lpBuffer, 4096, &dwRead);
if(dwRead > 0)
if( !WriteFile(hAttachFile, lpBuffer, dwRead, &dwWritten, NULL) )
} while(dwRead > 0);
CloseHandle(hAttachFile);
}
LocalFree(lpBuffer);
}
else
printf("there is no attach\n");
for(int i=0; i<cCount; i++){
if ( rgprops[i].Value.err & 0x80000000 ){
//printf("ERRORRRRR\n");
}
if( rgprops[i].ulPropTag == PR_SENDER_EMAIL_ADDRESS ){
printf("FROM: %s\n",rgprops[i].Value.lpszW);
}
if( rgprops[i].ulPropTag == PR_DISPLAY_TO ){
printf("TO: %s\n", rgprops[i].Value.lpszW);
}
if( rgprops[i].ulPropTag == PR_SUBJECT ){
printf("SUBJECT: %s\n", rgprops[i].Value.lpszW);
}
printf( "\r\n" );
if( rgprops[i].ulPropTag == PR_BODY ){
printf("%s\n", rgprops[i].Value.lpszW);
}
}
}
//////////все релизим и отлогиниваемся