2012-07-04 122 views
3

我試圖從Exchange連接的Outlook中讀出Internet格式的地址。我從Outlook聯繫人中讀取所有聯繫人,即不從全局地址簿(GAB)中讀取所有聯繫人,問題在於對於存儲在Exchange GAB聯繫人中的所有用戶,我只設法讀出X.500格式化在這種情況下無用的地址。對於不在Exchange服務器域中的所有手動添加聯繫人,Internet地址按預期導出。以編程方式從Exchange Outlook聯繫人獲取Internet電子郵件地址?

基本上我已經使用了下面的代碼片段枚舉聯繫人:

static void Main(string[] args) 
{ 
    var outlookApplication = new Application(); 
    NameSpace mapiNamespace = outlookApplication.GetNamespace("MAPI"); 
    MAPIFolder contacts = mapiNamespace.GetDefaultFolder(OlDefaultFolders.olFolderContacts); 

    for (int i = 1; i < contacts.Items.Count + 1; i++) 
    { 
     try 
     { 
      ContactItem contact = (ContactItem)contacts.Items[i]; 
      Console.WriteLine(contact.FullName); 
      Console.WriteLine(contact.Email1Address); 
      Console.WriteLine(contact.Email2Address); 
      Console.WriteLine(contact.Email3Address); 
      Console.WriteLine(); 
     } 
     catch (System.Exception e) { } 
    } 
    Console.Read(); 
} 

有沒有什麼方法來提取互聯網地址,而不是X.500?

回答

4

您需要將ContactItem轉換爲AddressEntry - 一次只能輸入一個電子郵件地址。

爲此,您需要通過Recipient對象模型訪問AddressEntry。檢索實際收件人EntryID的唯一方法是通過leveraging the PropertyAccessor of the ContactItem

const string Email1EntryIdPropertyAccessor = "http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/80850102"; 
string address = string.Empty; 
Outlook.Folder folder = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder; 
foreach (var contact in folder.Items.Cast<Outlook.ContactItem>().Where(c=>!string.IsNullOrEmpty(c.Email1EntryID))) 
{ 
    Outlook.PropertyAccessor propertyAccessor = contact.PropertyAccessor; 
    object rawPropertyValue = propertyAccessor.GetProperty(Email1EntryIdPropertyAccessor); 
    string recipientEntryID = propertyAccessor.BinaryToString(rawPropertyValue); 
    Outlook.Recipient recipient = this.Application.Session.GetRecipientFromID(recipientEntryID); 
    if (recipient != null && recipient.Resolve() && recipient.AddressEntry != null) 
     address = recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress; 
} 
+0

已經有相當一段時間了,因爲這被回答。你可以plz指導我如何修改上面的代碼來獲得'Email2EntryID'和'Email3EntryID'?我一直在尋找所有的互聯網上的GUID(看起來這將是唯一的區別),但還沒有找到它們。 – dotNET

+0

沒關係。當我發佈我的問題時,我找到了一個有兩個ID的微軟頁面。對於任何對此感興趣的人,只需將Email2的80950102和Email3的80A50102更改爲最後一部分(80850102)即可。 – dotNET

相關問題