IABContainer::ResolveNames
適用於:Outlook 2013 |Outlook 2016
針對一或多個收件者專案執行名稱解析。
HRESULT ResolveNames(
LPSPropTagArray lpPropTagArray,
ULONG ulFlags,
LPADRLIST lpAdrList,
LPFlagList lpFlagList
);
參數
lpPropTagArray
[in] SPropTagArray 結構的指標,其中包含屬性標記的陣列,描述要包含在提供者所傳回 之 ADRLIST 結構中的屬性。 若要要求提供者的默認屬性集,請在 lpPropTagArray 參數中傳遞 NULL。
ulFlags
[in]旗標的位掩碼,控制傳回字串中的文字類型。 您可以設定下列旗標:
EMS_AB_ADDRESS_LOOKUP
只會找到確切的 Proxy 位址相符專案;部分相符專案會被忽略。 只有 Exchange 通訊簿提供者支援此旗標。
MAPI_CACHE_ONLY
只有離線通訊錄會用來執行名稱解析。 例如,您可以使用此旗標,讓用戶端應用程式以快取交換模式開啟 GAL () 的全域通訊清單,並從快取存取該通訊簿中的專案,而不需要在用戶端與伺服器之間建立流量。 只有 Exchange 通訊簿提供者支援此旗標。
MAPI_UNICODE
傳回的字串屬性是 Unicode 格式。 如果未設定MAPI_UNICODE旗標,則字串會是 ANSI 格式。
lpAdrList
[in, out]在輸入時, ADRLIST 結構的指標,其中包含要解析的收件者清單。 在輸出上,包含已解析名稱的 ADRLIST 結構指標。
lpFlagList
[in, out]旗標數位的指標,每個旗標對應至 lpAdrList 參數中的 ADRENTRY 結構,提供收件者的名稱解析作業狀態。 lpFlagList 參數中的旗標順序與 lpAdrList 中的專案相同。 您可以設定下列旗標:
MAPI_AMBIGUOUS
對應的收件者已解析,但未解析為唯一的專案標識符。 其他容器不應嘗試解析此收件者。
MAPI_RESOLVED
對應的收件者已解析為唯一的專案標識碼。 其他容器不應嘗試解析此收件者。
MAPI_UNRESOLVED
尚未解析對應的專案。 其他容器應該嘗試解析此收件者。
傳回值
S_OK
名稱解析程式成功。
MAPI_E_BAD_CHARWIDTH
已設定MAPI_UNICODE旗標,且實作不支援 Unicode,或未設定MAPI_UNICODE,且實作僅支援 Unicode。
MAPI_E_NO_SUPPORT
通訊錄提供者不支援使用這個方法進行大量名稱解析。
註解
ResolveNames 方法會嘗試比對 lpAdrList 參數中項目數組中未解析的收件者與此通訊簿容器中的收件者。 無法解析的收件者通常只有 PR_DISPLAY_NAME (PidTagDisplayName) 屬性,而且可能還有其他幾個屬性。 無法解析的收件者沒有 PR_ENTRYID (PidTagEntryId) 屬性,而且其在 lpFlagList 參數中的對應旗標會設定為 MAPI_UNRESOLVED。 相反地,解析的收件者一律至少有 PR_ENTRYID 屬性加上其他數個屬性,例如 PR_EMAIL_ADDRESS (PidTagEmailAddress) 、 PR_DISPLAY_NAME 和 PR_ADDRTYPE (PidTagAddressType) 。
名稱解析通常會在用戶端呼叫 IAddrBook::ResolveName 方法時啟動。 Outlook MAPI 的回應方式是呼叫通訊簿搜尋路徑中所包含之每個通訊簿容器的 ResolveNames 方法, PR_AB_SEARCH_PATH (PidTagAbSearchPath) 屬性所指定。 lpAdrList 參數中的專案包含已解析的收件者,因為收件者位於MAPI已呼叫 ResolveNames 的容器中,因為這些專案稍早在搜尋路徑中出現。
每個容器都會嘗試藉由比對收件者的顯示名稱與其其中一個項目的顯示名稱,來解析無法解析的專案。 找到唯一的相符專案時,ResolveNames 會將 lpPropTagArray 參數中包含的PR_ENTRYID屬性和其他屬性新增至傳出 ADRLIST 結構中的對應專案。 ResolveNames 接著會將 lpFlagList 參數中的項目設定為 MAPI_RESOLVED。 儲存在 PR_ENTRYID 屬性中的項目標識碼可以是短期或長期。
在搜尋路徑中的所有容器都嘗試名稱解析程序之後,MAPI 會儘可能開啟對話框,提示使用者協助解決任何剩餘的衝突。
用戶端也可以在呼叫 IMessage::ModifyRecipients 方法時使用傳回的 ADRLIST 結構。
實作者注意事項
您不需要使用 ResolveNames 方法來支援名稱解析。 您也可以改用 PidTagAnr) 屬性限制 (PR_ANR 來支援它。 如果您決定依賴 名稱解析的PR_ANR 限制,您可以傳回MAPI_E_NO_SUPPORT。 如需詳細資訊,請參閱 實作名稱解析。
如果收件者不符合容器的任何收件者,請將 lpFlagList 參數中的收件者旗標專案設定為 MAPI_UNRESOLVED。
當收件者符合多個收件者時,將其旗標設定為 MAPI_AMBIGUOUS,而不會變更其 ADRENTRY 結構。
MAPI 需要郵件收件者清單中包含之收件者的特定屬性。 您可以將它們包含在 ADRENTRY 結構中做為名稱解析程式的一部分,或等候 MAPI 呼叫 IAddrBook::P repareRecips 和 IMAPISupport::ExpandRecips 方法來要求它們。 您可以在所有已解析收件者的 ADRENTRY 結構中包含下列屬性,以消除這些額外的呼叫並改善效能:
PR_ADDRTYPE
PR_DISPLAY_NAME
PR_EMAIL_ADDRESS
PR_ENTRYID
PR_OBJECT_TYPE (PidTagObjectType)
PR_SEARCH_KEY (PidTagSearchKey)
PR_TRANSMITABLE_DISPLAY_NAME (PidTagTransmittableDisplayName)
如果 lpPropTagArray 參數中的某些屬性無法使用,通常是因為容器專案不支援屬性,而且它們不包含在 ADRLIST 結構中收件者的 ADRENTRY 成員中,請將每個無法使用的屬性的屬性類型設定為 PT_ERROR。
請勿從已解析收件者的 ADRENTRY 結構中移除任何屬性。
如果您必須取代而不是修改 ADRENTRY 結構,請先呼叫 MAPIFreeBuffer 函式來釋放原始 ADRENTRY 結構,然後使用 MAPIAllocateBuffer 配置取代的 ADRENTRY 結構。