Чтение контактов Outlook в C# с использованием любой версии Microsoft Outlook

Я пытался прочитать контакт Microsoft Outlook с помощью библиотеки объектов библиотеки Microsoft Outlook 15.0, он работает локально; когда дело доходит до клиента, мы не знаем, какую версию Outlook использует клиент. Как читать, если у каждого клиента разные версии Outlook?

Я хочу прочитать контакт с любой версией версии Microsoft Outlook, используя C#.

Если у вас есть открытый исходный код, это очень помогает.

Пожалуйста, посмотрите на мой код и помогите мне, где я делаю неправильно.

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;
        }
    }


}

2 ответа

Вам просто нужно использовать PIA, соответствующие самой низкой версии Outlook, которую вы хотите поддерживать. Таким образом, вы будете уверены, что используются только те свойства и методы, которые существуют во всех версиях Outlook. См. Приложение C# для автоматизации Outlook (CSAutomateOutlook) для примера проекта.

В настоящее время он работает нормально с моей версией Outlook 2003 CheckOut этот код, но я не тестировал с другой версией outlook.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);  
  }
}
Другие вопросы по тегам