1

ユーザーのプロファイル「PR_DISPLAY_NAME」からユーザー名の値を取得し、「PR_SENDER_NAME_X」プロパティ値に送信者と同じ値を設定しました。しかし、Outlook 2010\13 では、プロファイル作成時に常にユーザー名がメール アドレスとして設定されているようです。ユーザー名を手動で追加しても、outlook プロファイル/アカウントが作成されると、電子メール アドレスに置き換えられます。

私の質問は - 送信者名と同じように設定できるように、実際のユーザー名を取得するにはどうすればよいですか? トランスポート プロバイダーは、メール送信時に From フィールド (「PR_SENDER_NAME_X」プロパティ値) に表示される送信者名をどのように設定しますか? 関連する物件を探してみましたが、見つかりませんでした。

Outlook MAPI アカウントを介して Exchange Server 2k10 に接続しています。

現時点では、送信者名を取得するための次の可能性がありますが、これらが問題を解決する正しい方法ではないと思います。

  1. DN 名で構成されるプロファイル プロパティ PR_PROFILE_USER があります。このプロパティからユーザー名を抽出できます。

  2. 電子メール アドレスを取得し、アドレス帳でそれをクエリして、そこからユーザー名を取得します。しかし、アドレス帳が常に現在のユーザーを保持しているかどうかはわかりません

4

2 に答える 2

0

プロファイルで使用されているMAPIプロバイダーの種類は何ですか?それはsnExchangeサーバーですか?またはPOP3/SMTPアカウント?IOlkAccountManagerを使用してプロファイルを見ると(OutlookSpyがそれを表示します)、oyuは期待されるデータを確認しますか?

于 2013-01-15T14:01:49.257 に答える
0

ドミトリーとの話し合いの後。次のように問題を解決できました-

  1. ユーザーの LeagcyDN または交換名が既にあったので、そこから Sender の EntryId を作成しました。

  2. 次のように IMAPSupport から IAddrBook* を取得します - lpMAPIsupport->OpenAddressBook(NULL, 0, &lpAddrBook);

  3. ユーザーのアドレスブック ポインターから送信者の MAPI プロパティを取得します。

  4. MAPI プロパティから送信者の PR_DISPLAY プロパティを取得します。

おそらく、次のコードが理解に役立つでしょう

    hrRet = lpMAPIsupport->OpenAddressBook(NULL, 0, &lpAddrBook);
    if (SUCCEEDED(hrRet) && lpAddrBook != NULL )
    {
      hrRet = lpAddrBook->OpenEntry(cbEntryID, lpEntryID, &IID_IMAPIProp, 0, &ulEntryType, 
                        (LPUNKNOWN *)&lpMapiProp);

      if (SUCCEEDED(hrRet) && lpMapiProp != NULL )
      {
        HrGetOneProp(lpMapiProp, PR_DISPLAY_NAME_W, true, UserName);
      }
    }

注 - LegacyDN がない場合は、メッセージの PR_STORE_ENTRYID プロパティから抽出できます。

ありがとうドミトリー。

于 2013-02-12T07:53:10.223 に答える