hastur | Bonjour,
Je suis en train de developper un plugin outlook en utilisant MAPI.
J'ajoute un bouton sur la fenetre d'envoi d'un nouveau message.
En gros, lorsque l'utilisateur a fini de remplir son nouveau message, il clique sur mon bouton au lieu de cliquer sur le bouton "envoyer" classique.
La je dois récuperer les infos entrées par l'utilisateur (to, cc, bcc, sujet et corps du message).
Pour cela je récupere un pointeur sur l'objet IMessage sensé contenir les infos du message mais apparement, les infos n'y sont pas ...
voici mon code : lorsque l'utilisateur clique sur mon bouton, la fonction DoCommand est appelée.
Code :
- STDMETHODIMP OutlookExtension::DoCommand(LPEXCHEXTCALLBACK pmecb, UINT cmdid)
- {
- LPMDB lpMDB = NULL;
- LPMESSAGE lpMsg = NULL;
- HRESULT hr = S_FALSE; // assume it is not our command
- if (m_cmdidEnvoi == cmdid)
- {
- pmecb->GetObject(&lpMDB, (LPMAPIPROP *)&lpMsg);
- GetMsgInfo(lpMsg);
- if (NULL != lpMDB)
- lpMDB->Release();
- if (NULL != lpMsg)
- lpMsg->Release();
- hr = S_OK;
- }
- else if(m_cmdidOption == cmdid)
- {
- MessageBox(m_hWnd, "Test Option", "Extension PosteCs Outlook", MB_OK);
- hr = S_OK;
- }
- return hr;
- }
- void OutlookExtension::GetMsgInfo(LPMESSAGE lpMsg)
- {
- LPSPropValue lpPropVals = NULL;
- SPropValue val;
- ULONG ulPropCount= 0;
- //LPSPropTagArray MsgPropTagArray;
- HRESULT hr;
- SizedSPropTagArray(1, MsgPropTagArray) = {1,
- {PR_NORMALIZED_SUBJECT}
- };
- // hr = lpMsg->SaveChanges(KEEP_OPEN_READWRITE );
- CStdString valeur(_T("Propriété du message :\n" ));
- //get message subject
- hr = lpMsg->GetProps((SPropTagArray*)&MsgPropTagArray, 0, &ulPropCount, &lpPropVals);
- if (hr==MAPI_E_NO_ACCESS)
- MessageBox(m_hWnd, "MAPI_E_NO_ACCESS", "Extension PosteCs Outlook", MB_OK);
- else if (hr==MAPI_W_ERRORS_RETURNED)
- MessageBox(m_hWnd, "MAPI_W_ERRORS_RETURNED", "Extension PosteCs Outlook", MB_OK);
- else
- {
- for(int i=0; i<ulPropCount; i++)
- {
- val = lpPropVals[i];
- if((val.ulPropTag != PT_ERROR ) && (val.Value.lpszA != NULL))
- {
- valeur += val.Value.lpszA;
- valeur += "\n";
- }
- }
- }
- // Get the body of the message as plain text
- // into the buffer 'bodybuf'
- char *bodybuf=0; unsigned int bodysize=0;
- IStream *istream;
- hr = lpMsg->OpenProperty(PR_BODY, &IID_IStream, STGM_READ, 0, (IUnknown**)&istream);
- if (hr==S_OK)
- {
- STATSTG stg = {0};
- hr = istream->Stat(&stg,STATFLAG_NONAME);
- if (hr==S_OK)
- { bodysize = stg.cbSize.LowPart; // won't bother checking for >2gb messages!
- bodybuf = new char[bodysize+1];
- ULONG red; hr = istream->Read(bodybuf, bodysize, &red);
- if (hr!=S_OK) bodysize=0;
- else if (red<bodysize) bodysize=red;
- bodybuf[bodysize]=0;
- }
- istream->Release();
- }
- //get recipients to, cc and bcc
- CStdString to, cc, bcc;
- IMAPITable *rtable;
- hr = lpMsg->GetRecipientTable(0,&rtable);
- if (hr==S_OK)
- { SizedSPropTagArray(2,rcols) = {2, {PR_RECIPIENT_TYPE, PR_EMAIL_ADDRESS} };
- SRowSet *rrows;
- hr = pHrQueryAllRows(rtable,(SPropTagArray*)&rcols,NULL,NULL,0,&rrows);
- if (hr==S_OK)
- { for (unsigned int r=0; r<rrows->cRows; r++)
- {
- if (rrows->aRow[r].lpProps[0].ulPropTag==PR_RECIPIENT_TYPE)
- {
- if(rrows->aRow[r].lpProps[0].Value.l == MAPI_TO)
- if (rrows->aRow[r].lpProps[1].ulPropTag==PR_EMAIL_ADDRESS)
- {
- to += rrows->aRow[r].lpProps[1].Value.lpszA;
- }
- else if(rrows->aRow[r].lpProps[0].Value.l == MAPI_CC)
- if (rrows->aRow[r].lpProps[1].ulPropTag==PR_EMAIL_ADDRESS)
- {
- cc += rrows->aRow[r].lpProps[1].Value.lpszA;
- }
- else if(rrows->aRow[r].lpProps[0].Value.l == MAPI_BCC)
- if (rrows->aRow[r].lpProps[1].ulPropTag==PR_EMAIL_ADDRESS)
- {
- bcc += rrows->aRow[r].lpProps[1].Value.lpszA;
- }
- }
- }
- pFreeProws(rrows);
- }
- rtable->Release();
- }
- MessageBox(m_hWnd, (LPCTSTR )valeur, "Extension PosteCs Outlook", MB_OK);
- MessageBox(m_hWnd, bodybuf, "Extension PosteCs Outlook", MB_OK);
- MessageBox(m_hWnd, to, "Extension PosteCs Outlook : TO", MB_OK);
- MessageBox(m_hWnd, cc, "Extension PosteCs Outlook : CC", MB_OK);
- MessageBox(m_hWnd, bcc, "Extension PosteCs Outlook : BCC", MB_OK);
- MAPIFreeBuffer(lpPropVals);
- }
|
Message édité par hastur le 20-01-2003 à 17:11:32
|