Поделиться через


Получение электронного адреса элемента контакта

Область применения: Outlook 2013 | Outlook 2016

В этом разделе показано, как получить значение именованного свойства, представляющего адрес электронной почты Microsoft Outlook 2010, русская версия или Microsoft Outlook 2013 контакта.

Вы можете связать до трех адресов электронной почты с элементом контактов в Outlook 2010 и Outlook 2013. Каждый адрес электронной почты соответствует свойству объекта Outlook 2010 или Outlook 2013 ContactItem в объектных моделях Outlook 2010 и Outlook 2013. Внутренний адрес электронной почты Outlook 2010 и Outlook 2013 также соответствует свойству MAPI с именем. Например, первый адрес электронной почты контакта соответствует свойству Email1Addressобъекта ContactItem в объектных моделях Outlook 2010 и Outlook 2013, а также внутреннему свойству Outlook 2010 и Outlook 2013 с именем PidLidEmail1EmailAddress Canonical Property.

Чтобы получить значение адреса электронной почты элемента контакта, можно использовать объект PropertyAccessor объектной модели Outlook 2010 или Outlook 2013 или сначала использовать IMAPIProp::GetIDsFromNames для получения тега свойства именованного свойства, а затем указать этот тег свойства в IMAPIProp::GetProps , чтобы получить значение. При вызове IMAPIProp::GetIDsFromNames укажите соответствующие значения для структуры MAPINAMEID , на которую указывает входной параметр lppPropNames. В следующем примере кода показано, как получить первый адрес электронной почты указанного контакта,lpContact', используя GetIDsFromNames и GetProps.

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; 
}