C # / Outlook - получение определенного глобального контакта - PullRequest
2 голосов
/ 15 апреля 2011

У меня два вопроса:

1: у нас есть общедоступная папка Outlook под названием Global Contacts, которая содержит (как вы уже догадались) множество контактов, доступных каждому, имеющему учетную запись на сервере.

Я могу получить к нему доступ с помощью этого кода:

            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
            }

Все хорошо и прекрасно.То, что я хотел бы также сделать, - это версия этого, чтобы получить один определенный контакт, основанный на каком-то уникальном идентификаторе ... как бы я это сделал?

Есть ли какое-то поле уникального идентификатора, которое я могу использовать для получения контактов?И более быстрый метод, чем Restrict () (который может быть довольно медленным - у нас тысячи контактов)?

2: есть ли способ обойти Outlook 2003 "Программа пытается получить доступ к адресам электронной почтыВы сохранили в Outlook. Вы хотите разрешить это? "диалоговое окно, которое появляется каждый раз, когда я запускаю этот код?Я знаю, что это должна быть функция безопасности, поэтому я предполагаю, что ответом может быть «нет», но я все равно решил спросить.

Ответы [ 3 ]

0 голосов
/ 19 апреля 2011
  1. Если вы знаете идентификатор записи, вы можете просто вызвать Namespace.GetItemFromID. В противном случае поиск, основанный на вашем уникальном идентификаторе, - это путь.
  2. Вы можете использовать Extended MAPI (только C ++ или Delphi) или Погашение (любой язык)
0 голосов
/ 24 июня 2011

Джез,

Я знаю, что у меня возникла та же проблема с «Программа пытается получить доступ к адресам электронной почты, которые вы сохранили в Outlook. Вы хотите разрешить это?» сообщение об ошибке, и я думаю, что ваша проблема заключается в следующей строке кода:

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

Вместо этого попробуйте изменить его на следующее

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

Я думаю, это должно помочь вам избежать этого сообщения об ошибке, или, по крайней мере, это то, что исправило его для меня! : -)

Удачи! : -)

0 голосов
/ 15 апреля 2011

Навигация по общедоступному списку контактов со стороны клиента с использованием грубой силы никогда не может быть быстрой. Я бы посоветовал взглянуть на API веб-службы Exchange (EWS) , чтобы достичь желаемой функциональности через веб-службу с сервера.

Вы также можете обойти раздражающее сообщение из Outlook, используя EWS.

Другой способ обойти сообщение - использовать MAPI напрямую, и есть много примеров . Тем не менее, MAPI имеет ту же проблему, о которой я упоминал ранее: это не может быть быстро, чтобы добиться цели со стороны клиента, используя грубую силу.

...