我有两个问题:
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中的电子邮件地址。你想允许这个吗?”每次运行此代码时都会抛出的对话框?我知道这是一个安全功能,所以我猜这个答案很可能是'不',但我想我还是会问。
答案 0 :(得分:0)
使用暴力从客户端浏览公共联系人列表永远不会很快。我建议您查看Exchange Web Service (EWS) API,以便通过服务器上的Web服务实现您想要的功能。
您还可以使用EWS绕过来自Outlook的恼人信息。
绕过邮件的另一种方法是直接使用MAPI和there are many examples。但是,MAPI遇到了我之前提到的同样的问题:使用强力从客户端完成任务是不可能的。
答案 1 :(得分:0)
答案 2 :(得分:0)
Jez,
我知道我遇到的问题是“程序正在尝试访问您存储在Outlook中的电子邮件地址。您要允许这样做吗?”错误消息,我认为您的问题是以下代码行:
objOutlook = new Microsoft.Office.Interop.Outlook.Application(); //create it
相反,请尝试将其更改为以下
objOutlook = Globals.ThisAddIn.Application(); //get current Outlook object
我认为这应该可以帮助您避免错误消息,或者至少,这就是为我修复它的原因! : - )
祝你好运! : - )