我们在Outlook中有一个名为Global Contacts的大型公共联系人文件夹,我希望能够搜索它并返回一些符合特定条件的结果,理想情况是通配符样式。
E.g。如果有人在“名称”文本框中输入“je”,它将返回名称中包含“je”的所有联系人。这可以作为AND与公司名称文本框耦合。
我见过的大多数例子都是在VB中,或者是关注这个形成一个Web应用程序 - 我正在做一个winforms应用程序,每台机器都安装了Outlook 2002(是的,我知道,更新很长时间)过期)。
有人能指出我正确的方向吗?有些代码可以作为一个很好的起点。
干杯
答案 0 :(得分:2)
我最终这样做了:
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。希望这对那些希望做同样事情的其他人有用 - 我花了一段时间从各种来源一起拼凑这些。
答案 1 :(得分:1)
找到联系人文件夹,您可以迭代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;
}
}
}