Как получить доступ к частным (контактным) элементам Exchange 2003 программным способом
Я ищу способ программного (.Net) доступа к личным папкам контактов на сервере Exchange 2003, чтобы создать подпапку, в которой можно создавать контакты из базы данных.
Решения, которые я нашел до сих пор, основаны на EWS, например, https://social.msdn.microsoft.com/Forums/en-US/aec6c998-f304-439c-9fa7-27bb9a4c4b45/problem-accessing-folders-in-another-mailbox?forum=exchangesvrdevelopment - такие примеры работают на 2007+, сервер Exchange, на который я нацелен, - 2003.
Другими примерами являются Outlook Addins.
Мне нужно автономное решение (исполняемый файл), которое при каждом запуске создает контакты из БД в определенную подпапку в папке "Контакты" пользователя.
Я также искал некоторые примеры кода MAPI (.Net) без особой удачи.
Не могли бы вы предоставить код (VB.NET или C#), иллюстрирующий, как получить доступ к личной папке контактов почтового ящика (или подпапке), чтобы написать там новый элемент контакта?
2 ответа
[Повышено из комментария]
Полностью автономно будет проблематично, но взгляните на объекты данных погашения, которые раскрывают механизм CDO/RDO, используемый outlook. Он требует установки Outlook, но не требует его запуска (он использует библиотеки, но не работает за счет автоматизации Outlook).
Мы недавно начали использовать RDO и получаем гораздо лучшую производительность, чем EWS.
Даже если вы этим не пользуетесь, возьмите (бесплатную) копию OutlookSpy той же компанией. Он предоставит много информации о том, как Exchange работает внутри компании, особенно о том, какие структуры данных используются (он добавляет панель инструментов в Outlook, она не одинока).
Если вы пытаетесь сделать это из.Net, то вам, вероятно, потребуется использовать объект Outlook, как описано в заключении к статье "Использование MAPI для создания элементов Outlook 2007" на MSDN. CDO и RDO предназначены для использования с VBscript и другим неуправляемым кодом.
Используя этот метод, вы используете C# для использования автоматизации Outlook 2007 (или лучше) в указанном почтовом ящике. Да, для этого потребуется учетная запись, которая будет иметь соответствующие права доступа к целевому почтовому ящику, и вам придется перебирать почтовые ящики и самостоятельно перемещаться по дереву папок.
Вот пример, который они приводят:
private void AddContact()
{
try
{
Outlook.ContactItem oContact =
Application.CreateItem(
Outlook.OlItemType.olContactItem)
as Outlook.ContactItem;
oContact.FirstName = "Jacqueline";
oContact.LastName = "Haddad";
oContact.Initials = "J.H.";
oContact.CompanyName = "Microsoft";
oContact.Email1Address = "someone@example.com";
oContact.Email1AddressType = "SMTP";
oContact.Email1DisplayName =
"Jacqueline Haddad (someone@example.com)";
oContact.BusinessAddressStreet = "1 Microsoft Way";
oContact.BusinessAddressCity = "Redmond";
oContact.BusinessAddressState = "WA";
oContact.BusinessAddressPostalCode = "95802";
oContact.BusinessAddressCountry = "USA";
oContact.BusinessTelephoneNumber = "800-555-1212";
oContact.WebPage = "http://www.codeplex.com/mfcmapi";
oContact.Body = "This is a sample note.";
oContact.Save();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}