2015-11-03 135 views
1

我試圖使用Microsoft Outlook 15.0對象庫DLL讀取Microsoft Outlook聯繫人,它在本地工作;當涉及到客戶端時,我們不知道客戶端使用的是什麼版本的Outlook。如何閱讀每個客戶端是否具有不同版本的Outlook?使用任何Microsoft Outlook版本在C#中閱讀Outlook聯繫人

我想閱讀與使用C#的任何版本的Microsoft Outlook版本的聯繫。

如果您有任何開源代碼,它會有很大的幫助。

請看我的代碼,並幫助我在哪裏做錯了。

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Threading; 
using System.Runtime.InteropServices; 
using MsOutlook = Microsoft.Office.Interop.Outlook; 

namespace Test 
{ 
    public class OutlookMailManager : IDisposable 
    { 

     public OutlookMailManager() { } 


     /// <summary> 
     /// Get MailContacts From Google (Gmail) using the provided username and password. 
     /// </summary> 
     /// <param name="maxEnries">Total number of entries to return</param> 
     /// <returns>The addressbook entries</returns> 
     public string GetOutlookMailContacts(int maxEnries) 
     { 
      MsOutlook.ApplicationClass OutlookApplication = new MsOutlook.ApplicationClass(); 
      MsOutlook.NameSpace outlookNameSpace = OutlookApplication.GetNamespace("MAPI"); 
      MsOutlook.MAPIFolder contactsCollection = outlookNameSpace.GetDefaultFolder(MsOutlook.OlDefaultFolders.olFolderContacts); 
      Microsoft.Office.Interop.Outlook.Items folderItems = contactsCollection.Items; 

      string rtnStr = ""; 
      if (folderItems.Count > 0) 
      { 
       for (int i = 1; folderItems.Count >= i; i++) 
       { 
        object contactObj = folderItems[i]; 
        if (contactObj is MsOutlook.ContactItem) 
        { 
         MsOutlook.ContactItem contact = (MsOutlook.ContactItem)contactObj; 
         rtnStr += contact.FullName + " (" + contact.BusinessTelephoneNumber + ")\n"; 
        } 
        Marshal.ReleaseComObject(contactObj); 
        if (i == maxEnries) break; 
       } 
      } 
      Marshal.ReleaseComObject(folderItems); 
      Marshal.ReleaseComObject(contactsCollection); 
      Marshal.ReleaseComObject(outlookNameSpace); 

      return rtnStr; 
     } 
    } 


} 

回答

1

您只需要使用對應於您需要支持的最低Outlook版本的PIA。因此,您將確保只使用所有Outlook版本中存在的屬性和方法。示例項目請參閱C# app automates Outlook (CSAutomateOutlook)

+0

尤金喜感謝您的發佈,目前我只使用PIA,它只針對某些客戶。可能是爲什麼它不在其他客戶上工作的問題。 – Sam

+0

@Sam這些客戶端上產生的錯誤消息是什麼?拋出的完整異常是什麼?如果你沒有記錄它,你應該。沒有它,人們只能猜測他們的版本可能比你使用的PIA版本更早,或者可能存在一點點問題(x86 vs x64) –

1

目前其工作的罰款與我的Outlook 2003版本 Checkout向此代碼,但我還沒有與不同的Outlook測試version.but

添加Microsoft.Office.Interop.Outlook DLL參考

Microsoft.Office.Interop.Outlook.Items OutlookItems; 
    Microsoft.Office.Interop.Outlook.Application outlookObj; 
    MAPIFolder Folder_Contacts; 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     outlookObj = new Microsoft.Office.Interop.Outlook.Application(); 

     Folder_Contacts = (MAPIFolder)outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts); 

     OutlookItems = Folder_Contacts.Items; 

     for (int i = 0; i < OutlookItems.Count; i++) 
     { 
      Microsoft.Office.Interop.Outlook.ContactItem contact = (Microsoft.Office.Interop.Outlook.ContactItem)OutlookItems[i + 1]; 
     MessageBox.Show("FirstName:"contact.FirstName +" "+"LastName:"+contact.LastName +" "+"Emailid:"+contact.Email1Address); 
    } 
} 
+0

我可以知道你是否嘗試過這個版本?對別人有幫助。 –