понедельник, 1 декабря 2014 г.

Учим Outlook автоматически при получении письма сохранять вложения на компьютере

Когда количество писем в день перевалила за 50 и при этом половина из них с всякими полезными и не очень вложениями, я начал  испытывать дискомфорт с поиском файлов. У меня было как минимум два варианта. Первый – сохранять файлы сразу после получения письма. У этого варианта один минус – нужно потратить время, что бы понять, что же за файл прислали и только  после этого выполнить сохранение. Второй вариант – сохранять все вложения автоматически при получении письма.  Вот про второй вариант я и расскажу.


Вступление

Я делал несколько попыток, но у меня так и не получалось настроить Outlook 2010 для выполнения этой операции. Было понятно одно – стандартного функционала сохранения нет и нужно будет лезть в VBA

Вся задача состояла из двух блоков. Первый – какую иерархию использовать. Второй – кодирование.

Структура

Иерархия. Я отмечал в блокноте способ поиска каждый раз, когда искал какой-то файл в почте. В результате получилась иерархия вида «Год – Месяц – Автор письма – Вложение». Иным словами я помнил  примерно, когда и от кого я получал тот или иной файл.  Соответственно код  должен был сохранять в структуры именно в таком виде.  Конечно же у Вас может быть по другому и тогда Вам придётся поменять код приведённый ниже.  Если потребуется помощь – пишите.

Кодирование

С кодирование все сложнее. Опыта в VBA у меня мало. Благо в интернете статей много. В итоге получилось вот такой код.
Обратите внимание на две  переменные:
base_path – это путь, куда будут сохраняться файлы. Все эти папки должны быть созданы.
file_ext – содержит перечисление всех расширений файлов, которые будут сохраняться. При необходимости добавьте требуемое расширение.

Public Sub SaveAttachments(msg As MailItem)
    Dim att As Attachment
    Dim base_path As String
        base_path = "C:\temp\OutlookAttach\"
    Dim file_ext As String
        file_ext = "docx_xlsx_xls_doc_txt_img_pdf_ppt_pptx_mpp_zip_7z_rar_"
    Dim path_att As String
    Dim v_dateFormat
    v_dateFormat = Format(Now, " yyyy-mm-dd HH-mm-ss")
    Dim v_year
    v_year = Format(msg.ReceivedTime, "yyyy")
    Dim v_month
    v_month = Format(msg.ReceivedTime, "mm")

    For Each att In msg.Attachments
        v_dateFormat = Format(Now, " yyyy-mm-dd HH-mm-ss")
        Dim s As String
        s = att.FileName
        Dim pd As Integer
        pd = InStrRev(s, ".")
        Dim n As String, w As String
        n = Left(s, pd - 1)
        w = Right(s, Len(s) - pd)
        If InStr(1, file_ext, w) > 0 Then
            path_att = base_path & v_year
            If Not Dir(path_att, vbDirectory) <> "" Then
                MkDir (path_att)
            End If

            path_att = path_att & "\" & v_month
            If Not Dir(path_att, vbDirectory) <> "" Then
                MkDir (path_att)
            End If

            path_att = path_att & "\" & msg.SenderName
            If Not Dir(path_att, vbDirectory) <> "" Then
                MkDir (path_att)
            End If
        
            Do
                v_dateFormat = Format(Now, " yyyy-mm-dd HH-mm-ss")
            Loop Until Not Dir(path_att & "\" & n & v_dateFormat & "." & w) <> ""
           
            att.SaveAsFile path_att & "\" & n & v_dateFormat & "." & w
        End If
    Next
End Sub

Подключение и настройка.

Нужно выполнить три шага:
1. Разрешить использование макросов
2. Добавить код макроса
3. Настроить правило

Разрешение использования макроса.

1. В Outlook 2010 выберите меню «Файл» и в нём пункт «Параметры»

2. В открывшемся окне выберите в левой части пункт «Центр управления безопасностью» и в правой части нажмите кнопку «Параметры центра управления безопасностью»

3. В открывшемся окне выберите в левой части пункт «Параметры макросов» и выберите пункт «Уведомление для всех макросов».  При этом варианте Outlook будет спрашивать разрешение на запуск всех макросов. Если выбрать «Включить все макросы» - то спрашивать не будет и будет запускать автоматически – а это очень плохо.


4. Нажимайте во всех окнах кнопку «Ок».

Добавляем код макроса


1. В Outlook 2010 выберите меню «Файл» и в нём пункт «Параметры».

2. В открывшемся окне выберите в левой части пункт «Настройка ленты» и в правой части поставьте галочку слева от слова «Разработчик» и нажмите кнопку «Ок».

4. В результате у вас появиться закладка «Разработчик».

5. Откройте закладку «Разработчик» и нажмите самую первую кнопку «Visual Basic».

6. В результате откроется окно редактора «Microsoft Visual Basic for Applications». У вас это окно может выглядеть иначе. Но это не важно. 

7. Щёлкните правой кнопкой на проекте и в открывшемся контекстом меню выберите пункт «Insert». В открывшемся подменю выберите пункт «Module».

8. В результате откроется окно ввода кода.

9 Скопируйте код выше и вставьте его в окно ввода.

10. Закройте окно «Microsoft Visual Basic for Applications» нажав красный крестик. Система сама всё сохранит автоматически.


Настроить правило

1. В outlook на закладке «Главная» выберите пункт «Правила» и в открывшемся меню выберите пункт «Управление правилами и оповещениями». Если такой кнопки не можете найти – разверните окно Outlook на весь экран.

2. В открывшемся окне нажмите кнопку «Новое».

3. В открывшемся окне выберите пункт «Применение правила к полученным мною сообщениям» и нажмите кнопку «Далее».

4. В открывшемся окне ничего не отмечайте и сразу нажимайте кнопку «Далее». Система запросит у Вас уверены ли что правило будет для всех писем. Отвечайте «Да». При необходимости настройте необходимые правила.

5. В открывшемся окне поставьте галочку у пункта «Запустить скрипт»

Затем в нижней части окна нажмите на слово «скрипт» и в открывшемся диалоговом окне выберите «SaveAttachments». Нажмите кнопку «Далее».

6. В открывшемся  окне нажмите кнопку «Далее»
7. В открывшемся окне укажите имя правила – «Сохранение все вложений». Если Вам необходимо, что бы правило сразу отработало – поставьте галочку у первого пункта в шаге №2. Нажмите кнопку «Готово». Outlook сообщит о том, что это правило будет работать только на этом компьютере  - жмите «Ок».

8. В результате  файлы будут сохраняться на диск компьютера каждый раз, когда будет приходить письмо с вложением.



Возможные проблемы

Если у Ваша проблема тут не указана, пожалуйста напишите в комментариях о ней, что бы я мог помочь Вам с ней.

Не сохраняются вложения.

1. Проверьте наличие созданного каталога. По умолчанию это «C:\Temp\OutlookAttach». Или создайте эти две папки или измените этот путь в скрипте в переменной «base_path»

Сохраняются не все вложения

1. Проверьте в скрипте в переменной «file_ext» что указано расширение требуемого файла. Добавьте требуемое расширение в строку в переменную.



Комментариев нет: