【问题标题】:How to set sender name in message sent using outlook 2010/13 ? <MAPI>如何在使用 Outlook 2010/13 发送的邮件中设置发件人姓名? <MAPI>
【发布时间】:2012-12-29 06:34:46
【问题描述】:

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

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

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

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

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

  2. 我们有邮箱地址,在通讯录中查询得到用户 从那里命名。但我不确定通讯录是否总是保留当前用户

【问题讨论】:

    标签: windows outlook outlook-addin mapi


    【解决方案1】:

    配置文件中使用了哪种 MAPI 提供程序?是sn Exchange服务器吗?还是 POP3/SMTP 帐户?如果您使用 IOlkAccountManager 查看配置文件(OutlookSpy 会显示给您),oyu 是否看到预期的数据?

    【讨论】:

    • 是的,它是 MAPI 帐户并连接到 Exchange 服务器 2K10。我注意到在 IOlkAccountManager 中设置了 3 个属性。它在属性值之一中显示电子邮件地址而不是用户名。
    【解决方案2】:

    在与 Dmitry 进行了几轮讨论之后。我能够解决我的问题如下 -

    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 属性中提取它。

    谢谢德米特里。

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多