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