受信者名の解決

適用対象: Outlook 2013 | Outlook 2016

メッセージがアドレス指定されると、各受信者に関連するプロパティを使用して受信者リストが作成されます。 メッセージが送信されるまでに、これらのプロパティの 1 つが受信者の長期的なエントリ識別子である必要があります。 各受信者に PR_ENTRYID (PidTagEntryId) プロパティが確実に含まれるようにするには、IAddrBook::ResolveName の呼び出しで lpAdrList パラメーターの内容に受信者リストを記述する ADRLIST 構造体を渡します。

ResolveName は、対応する ADRENTRY 構造体の SPropValue 配列にエントリ識別子が存在することで示されるように、既に解決されている ADRLIST 構造体内のエントリを無視して処理を開始します。 次に、 ResolveName は 1 回限りのエントリ識別子を 2 種類の受信者に自動的に割り当てます。

  • アドレスがインターネット アドレスとして書式設定された受信者

  • アドレスが次のように書式設定された受信者:

    displayname[address type:email address]

残りのすべてのエントリについて、 ResolveName はアドレス帳を検索して、表示名と完全に一致するものを検索します。 ResolveName、PR_AB_SEARCH_PATH (PidTagAbSearchPath) プロパティを使用して、検索するコンテナーのセットと検索順序を決定します。 MAPI は、すべてのコンテナーの IABContainer::ResolveNames メソッドを呼び出して、すべての名前の解決を試みます。 一部のコンテナーでは ResolveNames がサポートされていないため、コンテナーがMAPI_E_NO_SUPPORTを返す場合、MAPI はコンテンツ テーブルに 対してPR_ANR (PidTagAnr) プロパティ制限を適用します。 この制限を使用して名前解決をサポートするには、すべてのアドレス帳コンテナーが必要です。 すべての名前が解決されると、それ以上コンテナー呼び出しは行われません。 すべてのコンテナーが呼び出されていても、あいまいな名前または未解決の名前が残っている場合は、可能であれば、残りの名前を解決するようにユーザーに求めるダイアログ ボックスが表示されます。

PR_ANR制限は、PR_ANR プロパティの値と ADRLIST 構造体の表示名と一致します。 PR_ANR プロパティ制限を使用してコンテナーのコンテンツ テーブルのビューを制限すると、アドレス帳プロバイダーは"最適な推測" 型の検索を実行し、プロバイダーにとって意味のあるプロパティと照合します。 たとえば、あるアドレス帳プロバイダーは常に受信者リスト内の名前を PR_DISPLAY_NAME (PidTagDisplayName) と照合し、別のアドレス帳プロバイダーは管理者がプロパティを選択できる場合があります。

アドレス帳コンテナーのコンテンツ テーブルにPR_ANRプロパティの制限を設定するには

  1. 次のコードに示すように 、SRestriction 構造体を作成します。
SRestriction SRestrict;
SRestrict.rt = RES_PROPERTY;
SRestrict.res.resProperty.relop = RELOP_EQ;
SRestrict.res.resProperty.ulPropTag = PR_ANR;
SRestrict.res.resProperty.lpProp->ulPropTag = PR_ANR;
SRestrict.res.resProperty.lpProp->Value.LPSZ = lpszName;
 
  1. コンテンツ テーブルの IMAPITable::Restrict メソッドを呼び出し、 SRestriction 構造体を lpRestriction パラメーターとして渡します。