C#/ Outlook - 检索特定的全局联系人

时间:2011-04-15 16:06:01

标签: c# outlook exchange-server contacts

我有两个问题:

1:我们有一个名为全球联系人的公共Outlook文件夹,其中包含(您猜对了)服务器上拥有帐户的每个人都可以使用的大量联系人。

我可以使用以下代码访问它:

            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

            for (int i = 1; i <= itmsFiltered.Count; i++) //loop through filtered items
            {
                 //do stuff
            }

这一切都很好,花花公子。我还想做的是这个版本的一个版本来检索基于某种唯一ID的一个特定联系人...我该怎么做?

我可以使用某种唯一ID字段来检索联系人吗?比Restrict()更快的方法(可能很慢 - 我们有成千上万的联系人)?

2:有没有办法绕过Outlook 2003“一个程序试图访问你存储在Outlook中的电子邮件地址。你想允许这个吗?”每次运行此代码时都会抛出的对话框?我知道这是一个安全功能,所以我猜这个答案很可能是'不',但我想我还是会问。

3 个答案:

答案 0 :(得分:0)

使用暴力从客户端浏览公共联系人列表永远不会很快。我建议您查看Exchange Web Service (EWS) API,以便通过服务器上的Web服务实现您想要的功能。

您还可以使用EWS绕过来自Outlook的恼人信息。

绕过邮件的另一种方法是直接使用MAPI和there are many examples。但是,MAPI遇到了我之前提到的同样的问题:使用强力从客户端完成任务是不可能的。

答案 1 :(得分:0)

  1. 如果您知道条目ID,则只需调用Namespace.GetItemFromID即可。否则,根据您的自定义唯一ID进行搜索即可。
  2. 您可以使用扩展MAPI(仅限C ++或Delphi)或Redemption(任何语言)

答案 2 :(得分:0)

Jez,

我知道我遇到的问题是“程序正在尝试访问您存储在Outlook中的电子邮件地址。您要允许这样做吗?”错误消息,我认为您的问题是以下代码行:

objOutlook = new Microsoft.Office.Interop.Outlook.Application(); //create it

相反,请尝试将其更改为以下

objOutlook = Globals.ThisAddIn.Application(); //get current Outlook object

我认为这应该可以帮助您避免错误消息,或者至少,这就是为我修复它的原因! : - )

祝你好运! : - )