Существует способ работы с почтовым ящиком 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
