И - в очередной же раз - излагаю проблему, с которой пришлось столкнуться.
Преамбула.
На рабочей машине установлен MS Outlook 2003, который получает почту с корпоративного Exchange сервера. Задача стоит следующая - брать все непрочитанные письма в папке Inbox (в идеале - ПОСЛЕ отработки всех заведеных правил, не в идеале - уж как получится) и сохранять их в виде файлов *.msg в определенную папку на винте.
Амбула.
Поскольку готовых решений не нашел, начал шмонать MSDN, в результате шмона получил следующее решение:
Модуль ThisOutlookSession
- Код: Выделить всё
Private Sub Application_NewMail()
Call My
End Sub
Модуль Module1
- Код: Выделить всё
Dim WrongName As Long, isSaving As Boolean
Sub My()
If isSaving Then
Dim myNms As Outlook.NameSpace
Dim myFolder As Outlook.MAPIFolder
On Error Resume Next
Dim mItem As Outlook.mailItem
Set myNms = Application.GetNamespace("MAPI")
Set myFolder = myNms.GetDefaultFolder(olFolderInbox)
For Each mItem In myFolder.Items
If mItem.UnRead Then
mItem.SaveAs "Z:\" & mItem & ".msg", olMSG
If Err.Number <> 0 Then
mItem.SaveAs "Z:\" & "NoIdeaWhatItIs" & WrongName & ".msg", olMSG
WrongName = WrongName + 1
Err.Number = 0
End If
mItem.UnRead = False
End If
Next mItem
End If
End Sub
Sub MyChMode()
isSaving = Not isSaving
Debug.Print isSaving
End Sub
То есть нарисовал свои процедуры в Module1 и запускаю главную процедуру в момент когда приходят новые письма. Процедура MyChMode() выведена на таскбар для переключения режима работы - выполнять или не выполнять главный код (в идеале конечно видеть по статусу кнопки режим работы, а не лазить в Immediate Window, но это с этим уже потом разбираться буду).
Проблем собственно 2.
1. Выполнение процедуры иногда начинается даже ДО того, как письмо получено полностью (к сожалению коннект с почтовым серваком идет через VPN, а файлы бывают и по нескольку мегабайт) - соответственно сохраняется черт-те что.
2. Если клиент использует кодировку, отличную от Win1251, в имени сохраненного файла, в топике и в именах аттачментов в письме оказываются нечитаемые символы со всеми вытекающими.
Ну и даже не проблема, а мелкое неудобство (по сравнению с перечисленным выше) - процедура запускается ДО отработки правил.
Есть ли у уважаемого All какие-либо идеи, как преодолеть сии преграды?
Частичное решение пункта 2 уже нашел, буду пытаться его прикрутить - но может у кого-то есть более изящные решения?