【问题标题】:Searching public Outlook contacts folder from C#从 C# 搜索公共 Outlook 联系人文件夹
【发布时间】:2011-03-09 16:20:31
【问题描述】:

我们在 Outlook 中有一个名为“全局联系人”的大型公共联系人文件夹,我希望能够通过它进行搜索并返回一些符合特定条件的结果,最好是通配符样式。

例如如果有人在“姓名”文本框中输入“je”,它将返回姓名中包含“je”的所有联系人。这可以作为 AND 与公司名称文本框耦合。

我看到的大多数示例要么是在 VB 中,要么是关注在 Web 应用程序中执行此操作 - 我正在开发一个 winforms 应用程序,并且每台机器都安装了 Outlook 2002(是的,我知道,更新时间长逾期)。

谁能指出我正确的方向?一些代码可以作为一个很好的起点。

干杯

【问题讨论】:

    标签: c# outlook contacts


    【解决方案1】:

    我最终这样做了:

                Microsoft.Office.Interop.Outlook._Application objOutlook; //declare Outlook application
                objOutlook = new Microsoft.Office.Interop.Outlook.Application(); //create it
                Microsoft.Office.Interop.Outlook._NameSpace objNS = objOutlook.Session; //create new session
                Microsoft.Office.Interop.Outlook.MAPIFolder oAllPublicFolders; //what it says on the tin
                Microsoft.Office.Interop.Outlook.MAPIFolder oPublicFolders; // as above
                Microsoft.Office.Interop.Outlook.MAPIFolder objContacts; //as above
                Microsoft.Office.Interop.Outlook.Items itmsFiltered; //the filtered items list
                oPublicFolders = objNS.Folders["Public Folders"];
                oAllPublicFolders = oPublicFolders.Folders["All Public Folders"];
                objContacts = oAllPublicFolders.Folders["Global Contacts"];
    
                itmsFiltered = objContacts.Items.Restrict(strFilter);//restrict the search to our filter terms
    

    然后只需循环通过 itmsFiltered 将其添加到 ObjectListView。希望这对希望做同样事情的其他人有用 - 我花了一段时间从各种来源拼凑起来。

    【讨论】:

      【解决方案2】:

      要查找联系人文件夹,您可以迭代 olFolderContacts 的项目。这是代码

      using System;
      using Microsoft.Office.Interop.Outlook;
      using Application = Microsoft.Office.Interop.Outlook.Application;
      
      namespace RyanCore
      {
          public class Loader
          {
              public static ContactsViewModel LoadModel(Application objOutlook)
              {
                  var viewModel = new ContactsViewModel();
      
                  MAPIFolder fldContacts = objOutlook.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
                  foreach (object obj in fldContacts.Items)
                  {
                      if (obj is _ContactItem)
                      {
                          var contact = (_ContactItem) obj;
                          viewModel.Contacts.Add(new Contact(contact.FirstName + " " + contact.LastName, contact.Email1Address));
                      }
                      else if (obj is DistListItem)
                      {
                          var distListItem = (DistListItem) obj;
                          var contactGroup = new ContactGroup(distListItem.Subject);
      
                          viewModel.Groups.Add(contactGroup);
                          for (Int32 i = 1; i <= distListItem.MemberCount; i++)
                          {
                              Recipient subMember = distListItem.GetMember(i);
                              contactGroup.Contacts.Add(new Contact(subMember.Name, subMember.AddressEntry.Address));
                          }
                      }
                  }
                  return viewModel;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 2019-08-07
        • 2015-06-02
        • 2018-04-01
        • 2012-08-19
        • 2017-12-11
        • 1970-01-01
        相关资源
        最近更新 更多