【问题标题】:Reading Outlook contact in C# using any Microsoft Outlook version使用任何 Microsoft Outlook 版本在 C# 中读取 Outlook 联系人
【发布时间】:2015-11-03 19:41:34
【问题描述】:

我尝试使用 Microsoft Outlook 15.0 对象库 DLL 读取 Microsoft Outlook 联系人,它在本地工作;对于客户端,我们不知道客户端使用的是什么版本的 Outlook。如果每个客户端都有不同版本的 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;
        }
    }


}

【问题讨论】:

    标签: c# outlook office-interop com-interop


    【解决方案1】:

    您只需要使用与您需要支持的最低 Outlook 版本相对应的 PIA。因此,您将确保只使用所有 Outlook 版本中存在的属性和方法。示例项目见C# app automates Outlook (CSAutomateOutlook)

    【讨论】:

    • 嗨 Eugene 感谢您的帖子,我目前仅使用 PIA,它仅适用于某些客户。为什么它不能在其他客户端上运行可能是什么问题。
    • @Sam 在这些客户端上生成的错误消息是什么?抛出的完整异常是什么?如果你没有记录它,你应该。没有它,只能猜测他们的版本可能比您使用的 PIA 旧,或者可能存在位数问题(x86 与 x64)
    【解决方案2】:

    目前它在我的 Outlook 2003 版本中运行良好 签出此代码,但我没有使用不同的 Outlook 版本进行测试。但是

    在参考中添加 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);  
      }
    }
    

    【讨论】:

    • 我想知道你有没有试过这个,如果它有效,然后投赞成票,这样它会对其他人有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2014-01-02
    • 2020-09-20
    相关资源
    最近更新 更多