MS Outlook 2003 - сохранение писем в папку на HDD

Программирование на Visual Basic for Applications
ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

MS Outlook 2003 - сохранение писем в папку на HDD

Сообщение ZlydenGL » 01.12.2005 (Чт) 18:26

В очередной раз добрый всем день после долгого перебоя :)

И - в очередной же раз - излагаю проблему, с которой пришлось столкнуться.

Преамбула.
На рабочей машине установлен 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 уже нашел, буду пытаться его прикрутить - но может у кого-то есть более изящные решения?
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 22.12.2005 (Чт) 18:45

Проблема №1 решилась очень просто - нужно было досетапить региональные настройки. Проблема №2 вообще неактуальная - письмо сохраняется целиком.

Появилась следующая проблема: понадобилось сделать такой финт ушами, чтобы процедура сохранения отрабатывалась только если письмо приходит на адрес 123@456.ru (а письма 12@456.ru, smth@456.ru не затрагивались). Единственный способ, который сие можно сделать - AFFAIN это прочитать header письма. Проблема - Outlook 2003 не дает прочитать это свойство без нажатия на кнопотень ОК.

Курение MSDN + Google принесло как вариант решение с Redemption, но ставить "лишний" компонент на машину как-то стремновато. То бишь такой способ конечно работает... Но хотелось бы найти более "элегантный" способ. Заморачиваться с API нажатием данной кнопки просто не хочется.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 90

    TopList