Article ID: 170319
Article Last Modified on 8/18/2005
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 =
"<Display Name>";
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 =
"<email address>";
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