2013-01-15 58 views
1

我已經從用戶的配置文件「PR_DISPLAY_NAME」中獲取用戶名的值,並在「PR_SENDER_NAME_X」屬性值中設置了與發件人相同的值。但是,似乎Outlook 2010 \ 13始終將用戶名設置爲配置文件創建時的電子郵件地址。即使我們手動添加用戶名,在創建Outlook配置文件/帳戶時,它將被電子郵件地址替換。如何在使用outlook 2010/13發送的郵件中設置發件人姓名? <MAPI>

我的問題是 - 我如何獲得實際用戶的名稱,以便可以將其設置爲發件人姓名相同?傳送提供程序如何在發送電子郵件時設置發件人字段(「PR_SENDER_NAME_X」屬性值)中顯示的發件人名稱? 我試圖搜索任何相關的財產,但無法找到。

我通過outlook MAPI帳戶連接到交換服務器2k10。

在這一刻我看到下面的可能性來獲取發件人姓名,但我不認爲這是解決問題的正確方法。

  1. 存在包含DN名稱的配置文件屬性PR_PROFILE_USER。我們可以從 這個屬性中提取用戶名。

  2. 我們有電子郵件地址,在地址簿中查詢,並從那裏獲取用戶名稱 。但我不確定地址簿是否始終保持當前用戶

回答

0

經過與德米特里的幾輪討論。我能解決我的問題如下 -

  1. 我已經有LeagcyDN或用戶交換名字,所以從我創建的發送方的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財產。

謝謝德米特里。

0

配置文件中使用了哪種MAPI提供程序?它是否是Exchange服務器?或者一個POP3/SMTP帳戶?如果您使用IOlkAccountManager查看配置文件(OutlookSpy會顯示給您),請確保oyu查看預期數據?

+0

是的,它是MAPI帳戶並連接到交換服務器2K10。我注意到IOlkAccountManager中有3個屬性設置。它在屬性值之一中顯示電子郵件地址而不是用戶名。 – Rahul

相關問題