Fixed font Subject: Re: How to access message recipients (MAPI)
Author: Ivan Copernic Date: 15 Nov 2010
References:
Hello,

Yes ! Use DCI Mail Processor SDK EMAPI wrapper to do this.

OpenMailbox(Your PST file name)

GetFolderCount - to get folders count

GetMessageProp - to get all mail message properties

Just 3 simple API call

Google - "DCI Mail Processor"

> On Tuesday, June 26, 2007 1:15 AM Iva wrote:

> I use next code (was simplified here) for accessing message recipients, but
> it works too slowly:
>
> SizedSPropTagArray( 3, cols ) = { 3, { PR_ENTRYID, PR_SUBJECT,
> PR_SENDER_NAME } };
> MAPIUtils::QueryAllRows( spTable, (SPropTagArray*)&cols, 0, 0, 0, &pRowSet );
> for( UINT i = 0; i < pRowSet->cRows; i++ )
> {
> // processing recipients
> spFolder->OpenEntry( row->lpProps[0].Value.bin.cb,
> (LPENTRYID)row->lpProps[0].Value.bin.lpb, NULL, 0, &messagetype,
> (IUnknown**)&spMessage );
> CComPtr<IMAPITable> spRecipientTable;
> spMessage->GetRecipientTable( MAPI_UNICODE, &spRecipientTable );
> SizedSPropTagArray( 3, rcptcols ) = { 3, { PR_EMAIL_ADDRESS,
> PR_RECIPIENT_TYPE, PR_DISPLAY_NAME } };
> MAPIUtils::QueryAllRows( spRecipientTable, (SPropTagArray*)&rcptcols, 0,
> 0, 0, &pRows );
> for( UINT r = 0; r < pRows->cRows; r++ )
> {
> // loop through all the recipient' properties
> for ( int ii = 0; ii < pRows->aRow[r].cValues; ii++ )
> {
> ULONG ulPT = pRows->aRow[r].lpProps[ii].ulPropTag;
> switch ( ulPT )
> {
> case PR_EMAIL_ADDRESS:
> // ...
> }
> }
> }
>
> //processing PR_SUBJECT and PR_SENDER_NAME properties here...
> }
>
> Are there another ways to read message recipients without opening entry and
> retrieving recipients table?


>> On Tuesday, June 26, 2007 7:18 PM Dmitry Streblechenko wrote:

>> No, I am afraid not. You can create a restriction on the on the recipients
>> though.
>> Do you really need to process all recipients in all messages in a given
>> folder?
>>
>> Dmitry Streblechenko (MVP)
>> http://www.dimastr.com/
>> OutlookSpy - Outlook, CDO
>> and MAPI Developer Tool
>>
>> "Ivan" <Ivan@discussions.microsoft.com> wrote in message
>> news:C6D7E8D2-BFD3-4184-81A5-12B7438BE507@microsoft.com...


>>> On Tuesday, June 26, 2007 11:52 PM Iva wrote:

>>> I need to get all recipients (their names and emails) of every message.
>>> Message properties PR_DISPLAY_TO and PR_DISPLAY_CC are not exactly what I
>>> need.


>>>> On Wednesday, June 27, 2007 2:54 AM Dmitry Streblechenko wrote:

>>>> Then opening each and every message is your only option...
>>>>
>>>> Dmitry Streblechenko (MVP)
>>>> http://www.dimastr.com/
>>>> OutlookSpy - Outlook, CDO
>>>> and MAPI Developer Tool


>>>>> On Wednesday, June 27, 2007 4:46 AM Iva wrote:

>>>>> Ok. Thanks.


>>>>>> On Tuesday, July 10, 2007 8:26 AM Iva wrote:

>>>>>> Dmitry, is it possible to open each message avoiding of calling
>>>>>> OpenEntry(msgEntryID)? It takes high time.
>>>>>>
>>>>>> Now I open mapi folder using spIMsgStore->OpenEntry(), then open mapi table
>>>>>> - spIFolder->GetContentsTable(), query all rows from the table (also using
>>>>>> SetColumns() to access only one property - PR_ENTRYID), and after that I
>>>>>> should open each message using spFolder->OpenEntry() to have an ability to
>>>>>> call GetRecipientTable() method.
>>>>>>
>>>>>> What if I need to read only all recipients for each message without reading
>>>>>> other message properties?
>>>>>>
>>>>>> In MSDN I found that contents of PR_MESSAGE_RECIPIENTS should be accessed by
>>>>>> the IMAPIProp::OpenProperty method, requesting the IID_IMAPITable interface
>>>>>> identifier. But I have no idea how to realize it.
>>>>>>
>>>>>> The fact is that Reunion's Outlook Addin (www.reunion.com) read all
>>>>>> recipients from all messages extremely fast (only first launch is meaningful
>>>>>> cause it cashes results in its own db).


>>>>>>> On Tuesday, July 10, 2007 1:00 PM Dmitry Streblechenko wrote:

>>>>>>> No, no way around it. You either call IMessage::GetRecipientTable or
>>>>>>> IMessage::OpenProperty(PR_MESSAGE_RECIPIENTS).
>>>>>>>
>>>>>>> Dmitry Streblechenko (MVP)
>>>>>>> http://www.dimastr.com/
>>>>>>> OutlookSpy - Outlook, CDO
>>>>>>> and MAPI Developer Tool
>>>>>>>
>>>>>>> "Ivan" <Ivan@discussions.microsoft.com> wrote in message
>>>>>>> news:15F34965-5592-40EF-B6D8-6199DBA08B3F@microsoft.com...


>>>>>>> Submitted via EggHeadCafe
>>>>>>> Microsoft .NET DataBase Access For Beginners
>>>>>>> http://www.eggheadcafe.com/training-topic-area/Microsoft-NET-DataBase-Access/1/SQL-Server-Oracle-DB2-Informix-Query-Samples.aspx