Как получить доступ к частным (контактным) элементам 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);
    }
}
Другие вопросы по тегам