Существует способ работы с почтовым ящиком 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 с сервера необходимо выполнить несколько подготовительных шагов:
- Убедиться, что на сервере нет MS Outlook.
- Установить библиотеки Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1.
- Создать профиль (или несколько профилей) подключения к почтовому серверу через программу 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
Пример сценария на 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