C# 从C中搜索公共Outlook联系人文件夹#

C# 从C中搜索公共Outlook联系人文件夹#,c#,outlook,contacts,C#,Outlook,Contacts,我们在Outlook中有一个名为“全局联系人”的大型公共联系人文件夹,我希望能够在其中搜索并返回符合特定条件的大量结果,最好是通配符样式 例如,如果有人在“姓名”文本框中输入“je”,它将返回所有姓名中包含“je”的联系人。这可以作为AND与companyname文本框耦合 我看到的大多数例子要么是在VB中,要么是关于做这个表单的web应用程序——我在做一个winforms应用程序,每台机器都安装了Outlook 2002(是的,我知道,更新早就应该了) 谁能给我指出正确的方向吗?一些代码将是一

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

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

我看到的大多数例子要么是在VB中,要么是关于做这个表单的web应用程序——我在做一个winforms应用程序,每台机器都安装了Outlook 2002(是的,我知道,更新早就应该了)

谁能给我指出正确的方向吗?一些代码将是一个很好的起点

干杯

我终于做到了:

            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。希望这对其他希望这样做的人有用——我花了一些时间从各种来源拼凑起来。

要查找联系人文件夹,您可以迭代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;
        }
    }
}
使用系统;
使用Microsoft.Office.Interop.Outlook;
使用Application=Microsoft.Office.Interop.Outlook.Application;
名称空间RyanCore
{
公共类加载器
{
公共静态联系人VIEWMODEL LoadModel(应用程序对象簿)
{
var viewModel=新联系人viewModel();
MAPIFolder fldContacts=objOutlook.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
foreach(fldContacts.Items中的对象对象对象)
{
如果(obj是_ContactItem)
{
var触点=(_ContactItem)obj;
viewModel.Contacts.Add(新联系人(Contact.FirstName+“”+Contact.LastName,Contact.Email1Address));
}
else if(obj是DistListItem)
{
var distListItem=(distListItem)obj;
var contactGroup=新联系人组(distListItem.Subject);
viewModel.Groups.Add(联系人组);
对于(Int32 i=1;i