如何在使用outlook 2010/13发送的消息中设置发件人姓名? <MAPI> </MAPI>

时间:2013-01-15 07:35:30

标签: windows outlook outlook-addin mapi

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

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

我通过Outlook MAPI帐户连接到Exchange Server 2k10。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

与德米特里进行了几轮讨论。我能够解决我的问题如下 -

  1. 我已经有LeagcyDN或用户的交换名称,所以我创建了Sender的EntryId。

  2. 从IMAPSupport获取IAddrBook *如下 - lpMAPIsupport-&gt; OpenAddressBook(NULL,0,&amp; lpAddrBook);

  3. 从用户的Addressbook指针获取发件人的MAPI属性。

  4. 从MAPI属性获取发件人的PR_DISPLAY属性。

  5. 也许以下代码有助于理解

        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属性中提取该文件。

    谢谢德米特里。