Microsoft KB Archive/170319

= How To Creating a One-Off Address =

Article ID: 170319

Article Last Modified on 8/18/2005

-

APPLIES TO


 * Microsoft Messaging Application Programming Interface

-



This article was previously published under Q170319



SUMMARY
This article explains how to programmatically call the CreateOneOff method of the IAddrBook::IMAPIProp interface and attach the newly created address to an existing message object.



MORE INFORMATION
Most address book providers support the ability to create temporary e-mail addresses so that users can send mail to a one-time recipient or to recipients that do not appear in a read-only list or a Global Address List.

Messaging Application Programming Interface (MAPI) clients that want to facilitate this feature should follow these steps and use similar code to incorporate this feature. (NOTE: The following code segments assume an existing connection to a MAPI session exists): HRESULT TestAddress(LPMESSAGE pMsg) {    HRESULT hRes   = S_OK;      // Status code of MAPI calls LPADRLIST pAdrList  = NULL;  // ModifyRecips takes LPADRLIST

enum {NAME, ADDR, EMAIL, RECIP, EID, NUM_RECIP_PROPS };    SizedSPropTagArray(NUM_RECIP_PROPS, sRecipProps) = {      NUM_RECIP_PROPS,  // number of columns (properties) {        PR_DISPLAY_NAME, PR_ADDRTYPE, PR_EMAIL_ADDRESS, PR_RECIPIENT_TYPE, PR_ENTRYID }    };

// Allocate memory for new SRowSet structure. hRes = MAPIAllocateBuffer(CbNewSRowSet(1),      (LPVOID*) &pAdrList); if (FAILED(hRes)) goto Quit;

// Zero out allocated memory. ZeroMemory(pAdrList, CbNewSRowSet(1));

// Allocate memory for SPropValue structure that indicates what // recipient properties will be set. NUM_RECIP_PROPS == 5. hRes = MAPIAllocateBuffer(      NUM_RECIP_PROPS * sizeof(SPropValue),       (LPVOID*) &(pAdrList->aEntries[0].rgPropVals)); if (FAILED(hRes)) goto Quit;

// Zero out allocated memory. ZeroMemory(pAdrList -> aEntries[0].rgPropVals,      NUM_RECIP_PROPS * sizeof(SPropValue) );

// Setup the One Time recipient by indicating how many // recipients and how many properties will be set on each // recipient.

pAdrList->cEntries = 1;  // How many recipients. // How many properties per recipient pAdrList->aEntries[0].cValues = NUM_RECIP_PROPS;

// Set the SPropValue members == the desired values. pAdrList->aEntries[0].rgPropVals[NAME].ulPropTag =    PR_DISPLAY_NAME; pAdrList->aEntries[0].rgPropVals[NAME].Value.lpszA = "";

pAdrList->aEntries[0].rgPropVals[ADDR].ulPropTag = PR_ADDRTYPE; pAdrList->aEntries[0].rgPropVals[ADDR].Value.lpszA = "SMTP";

pAdrList->aEntries[0].rgPropVals[EMAIL].ulPropTag = PR_EMAIL_ADDRESS; pAdrList->aEntries[0].rgPropVals[EMAIL].Value.lpszA = " ";

pAdrList->aEntries[0].rgPropVals[RECIP].ulPropTag = PR_RECIPIENT_TYPE; pAdrList->aEntries[0].rgPropVals[RECIP].Value.l = MAPI_TO;

pAdrList->aEntries[0].rgPropVals[EID].ulPropTag = PR_ENTRYID;

// Create the One-off address and get an EID for it. hRes = m_pAddrBook->CreateOneOff(      pAdrList-> aEntries[0].rgPropVals[NAME].Value.lpszA,       pAdrList-> aEntries[0].rgPropVals[ADDR].Value.lpszA,       pAdrList-> aEntries[0].rgPropVals[EMAIL].Value.lpszA,       0,       &pAdrList->aEntries[0].rgPropVals[EID].Value.bin.cb,       (LPENTRYID*)       (&pAdrList->aEntries[0].rgPropVals[EID].Value.bin.lpb)); if (FAILED(hRes)) goto Quit;

hRes = m_pAddrBook->ResolveName(      0L,       0L,       NULL,       pAdrList ); if (FAILED(hRes)) goto Quit;

// If everything goes right, add the new recipient to the // message object passed into us. hRes = pMsg->ModifyRecipients(MODRECIP_ADD,pAdrList); if (FAILED(hRes)) goto Quit;

hRes = pMsg->SaveChanges(FORCE_SAVE); if (FAILED(hRes)) goto Quit;

Quit: // Always release any newly created objects and // allocated memory. FreePadrlist(pAdrList);

return hRes; }

Keywords: kbhowto kbmsg kbcode KB170319

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.