获取联系人项的电子邮件地址
适用于:Outlook 2013 | Outlook 2016
本主题演示如何获取表示Microsoft Outlook 2010或Microsoft Outlook 2013联系人项目的电子邮件地址的命名属性的值。
最多可将三个电子邮件地址与 Outlook 2010 和 Outlook 2013 中的联系人项目相关联。 每个电子邮件地址对应于 Outlook 2010 和 Outlook 2013 对象模型中 Outlook 2010 或 Outlook 2013 ContactItem 对象的属性。 在 Outlook 2010 和 Outlook 2013 内部,电子邮件地址还对应于 MAPI 命名属性。 例如,联系人的第一个电子邮件地址对应于 Outlook 2010 和 Outlook 2013 对象模型中 ContactItem 的 Email1Address 属性,以及 Outlook 2010 和 Outlook 2013 内部名称为 PidLidEmail1EmailAddress 规范属性。
若要获取联系人项目的电子邮件地址的值,可以使用 Outlook 2010 或 Outlook 2013 对象模型的 PropertyAccessor 对象,或者首先使用 IMAPIProp::GetIDsFromNames 获取命名属性的属性标记,然后在 IMAPIProp::GetProps 中指定此属性标记以获取该值。 调用 IMAPIProp::GetIDsFromNames 时,请为输入参数 lppPropNames 指向的 MAPINAMEID 结构指定适当的值。 以下代码示例演示如何使用 GetIDsFromNames 和 GetProps 获取指定联系人的第一个电子邮件地址 lpContact' 。
HRESULT HrGetEmail1(LPMESSAGE lpContact)
{
HRESULT hRes = S_OK;
LPSPropTagArray lpNamedPropTags = NULL;
MAPINAMEID NamedID = {0};
LPMAPINAMEID lpNamedID = &NamedID;
NamedID.lpguid = (LPGUID)&PSETID_Address;
NamedID.ulKind = MNID_ID;
NamedID.Kind.lID = dispidEmailEmailAddress;
hRes = lpContact->GetIDsFromNames(
1,
&lpNamedID,
NULL,
&lpNamedPropTags);
if (SUCCEEDED(hRes) && lpNamedPropTags)
{
SPropTagArray sPropTagArray;
sPropTagArray.cValues = 1;
sPropTagArray.aulPropTag[0] = CHANGE_PROP_TYPE(lpNamedPropTags->aulPropTag[0],PT_STRING8);
LPSPropValue lpProps = NULL;
ULONG cProps = 0;
hRes = lpContact->GetProps(
&sPropTagArray,
NULL,
&cProps,
&lpProps);
if (SUCCEEDED(hRes) &&
1 == cProps &&
lpProps &&
PT_STRING8 == PROP_TYPE(lpProps[0].ulPropTag) &&
lpProps[0].Value.lpszA)
{
printf("Email address 1 = \"%s\"\n",lpProps[0].Value.lpszA);
}
MAPIFreeBuffer(lpProps);
MAPIFreeBuffer(lpNamedPropTags);
}
return hRes;
}