我一直从用户的个人资料“PR_DISPLAY_NAME”中获取用户名的值,并在“PR_SENDER_NAME_X”属性值中设置与发件人相同的值。但似乎outlook 2010 \ 13始终在创建配置文件时将用户名设置为电子邮件地址。即使我们手动添加用户名,也会在创建Outlook配置文件/帐户时将其替换为电子邮件地址。
我的问题是 - 如何获取实际用户的姓名,以便我可以设置与发件人姓名相同的名称?传送提供商如何设置发送电子邮件时在“发件人”字段(“PR_SENDER_NAME_X”属性值)中显示的发件人姓名? 我尝试搜索任何相关的财产,但找不到。
我通过Outlook MAPI帐户连接到Exchange Server 2k10。
此时我看到了获取发件人姓名的可能性,但我不认为这些是解决问题的正确方法。
有一个配置文件属性PR_PROFILE_USER,它包含一个DN名称。我们可以 从此属性中提取用户名。
我们有电子邮件地址,在地址簿中查询并获取用户 从那里起名字。但我不确定地址簿是否始终保留当前用户
答案 0 :(得分:0)
配置文件中使用了哪种MAPI提供程序?它是sn Exchange服务器吗?还是POP3 / SMTP帐户?如果您使用IOlkAccountManager查看配置文件(OutlookSpy会向您显示),请oyu查看预期数据吗?
答案 1 :(得分:0)
与德米特里进行了几轮讨论。我能够解决我的问题如下 -
我已经有LeagcyDN或用户的交换名称,所以我创建了Sender的EntryId。
从IMAPSupport获取IAddrBook *如下 - lpMAPIsupport-> OpenAddressBook(NULL,0,& lpAddrBook);
从用户的Addressbook指针获取发件人的MAPI属性。
从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属性中提取该文件。
谢谢德米特里。