Exchange - Подключение к Exchange через MAPI библиотеки

Реклама:
Записка от 24.04.2014

Существует способ работы с почтовым ящиком MS Exchnage с сервера MS Windows 2008 без установки MS Outlook на сервер. Для обращения к почтовому серверу по MAPI протоколу можно использовать библиотеки Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1, которые позволяют создавать сессии к почтовому серверу из программных средств через COM-объекты CDO. Это удобно и более совершенно, чем использовать на сервере MS Outlook, который не позволяет автоматизировать работу из-за политик безопасности программы - происходит блокировка запросов из внешних программ при обращении к COM-объектам Outlook.

Для того, чтобы работать с почтовым ящиком MS Exchange с сервера необходимо выполнить несколько подготовительных шагов:

  1. Убедиться, что на сервере нет MS Outlook.
  2. Установить библиотеки Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1.
  3. Создать профиль (или несколько профилей) подключения к почтовому серверу через программу MFCMAPI. (Инструкцию по созданию профиля можно посмотреть на сайте Microsoft, а сам профиль можно найти в реестре по пути HCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\MS Exchange Settings).

После подготовительных шагов можно приступать к программированию. Например, можно обрабатывать почтовый ящик с помощью VB.NET или VBScript.

Пример программы на VB.NET

Module Module1

    Sub Main()
        Dim oMAPISession As New MAPI.Session
        Dim oFolder As MAPI.Folder
        Dim oMessages As MAPI.Messages
        Dim oMessage As MAPI.Message
        Dim iUnread, iRead As Integer

        ' вход в почтовый ящик по имени настроенного профиля
        oMAPISession.Logon("MS Exchange Settings")

        ' открытие папки Inbox
        oFolder = oMAPISession.Inbox
        Console.WriteLine("Folder name: " & oFolder.Name)

        ' получение количества сообщений в папке
        Try
            oMessages = oFolder.Messages
            Console.WriteLine("Number of messages: " & oMessages.Count)
            iUnread = 0
            iRead = 0
            oMessage = oMessages.GetFirst
            While Not oMessage Is Nothing
                If oMessage.Unread = True Then
                    iUnread = iUnread + 1
                Else
                    iRead = iRead + 1
                End If
                oMessage = oMessages.GetNext
            End While
            Console.WriteLine("Number of unread messages = " & iUnread)
            Console.WriteLine("Number of read messages = " & iRead)
        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)
        End Try

        Console.WriteLine()
        Console.WriteLine("Press ENTER to continue")
        Console.ReadLine()

        ' получение текста последнего сообщения
        Try
            oMessages = oFolder.Messages
            oMessage = oMessages.GetLast
            Console.WriteLine("The message text: " & oMessage.Text)
        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)
        End Try

        Console.WriteLine()
        Console.WriteLine("Press ENTER to continue")
        Console.ReadLine()

        ' выход из почтового ящика
        oMAPISession.Logoff()

    End Sub

End Module
Примечание. В ссылки библиотек проекта необходимо добавить библиотеку Microsoft CDO 1.21 Library.

Пример сценария на VBScript

Set oMAPISession = CreateObject("MAPI.Session")
' вход в почтовый ящик по имени настроенного профиля
oMAPISession.Logon("MS Exchange Settings")
' открытие папки Inbox
Set oFolder = oMAPISession.GetDefaultFolder(1)
wscript.echo "Folder name: " & oFolder.Name
' получение количества сообщений в папке
Set oMessages = oFolder.Messages
wscript.echo "Number of messages: " & oMessages.Count
' выход из почтового ящика
oMAPISession.Logoff
Внимание! Обработчик VBS надо запускать в 32-битном режиме. То есть использовать исполняемый файл из C:\Windows\SysWOW64\cscript.exe.
Вверх