1

我一直在从用户的个人资料“PR_DISPLAY_NAME”中获取用户名的值,并在“PR_SENDER_NAME_X”属性值中设置与发件人相同的值。但似乎 Outlook 2010\13 在创建配置文件时总是将用户名设置为电子邮件地址。即使我们手动添加用户名,它也会在创建 Outlook 配置文件/帐户时替换为电子邮件地址。

我的问题是 - 如何获取实际用户名,以便我可以设置与发件人姓名相同?发送电子邮件时,传输提供商如何设置显示在“发件人”字段(“PR_SENDER_NAME_X”属性值)中的发件人姓名?我尝试搜索任何相关属性,但找不到。

我通过 Outlook MAPI 帐户连接到交换服务器 2k10。

目前,我看到以下获取发件人姓名的可能性,但我认为这些不是解决问题的正确方法。

  1. 配置文件属性 PR_PROFILE_USER 包含一个 DN 名称。我们可以从这个属性中提取用户名。

  2. 我们有电子邮件地址,在通讯簿中查询并从那里获取用户名。但我不确定地址簿是否总是保留当前用户

4

2 回答 2

0

配置文件中使用了哪种 MAPI 提供程序?是sn Exchange服务器吗?还是 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 回答