Когда количество писем в день перевалила за 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. Настроить правило
Разрешение использования макроса.
2. В открывшемся окне выберите в левой части пункт «Центр
управления безопасностью» и в правой части нажмите кнопку «Параметры центра
управления безопасностью»
3. В открывшемся окне выберите в левой части пункт «Параметры
макросов» и выберите пункт «Уведомление для всех макросов». При этом варианте Outlook будет
спрашивать разрешение на запуск всех макросов. Если выбрать «Включить все
макросы» - то спрашивать не будет и будет запускать автоматически – а это очень
плохо.
4. Нажимайте во всех окнах кнопку «Ок».
Добавляем код макроса
2. В открывшемся окне выберите в левой части пункт «Настройка
ленты» и в правой части поставьте галочку слева от слова «Разработчик» и
нажмите кнопку «Ок».
6. В результате откроется окно редактора «Microsoft Visual Basic for Applications». У вас это
окно может выглядеть иначе. Но это не важно.
7. Щёлкните правой кнопкой на проекте и в открывшемся
контекстом меню выберите пункт «Insert».
В открывшемся подменю выберите пункт «Module».
10. Закройте окно «Microsoft Visual Basic for Applications» нажав красный крестик. Система
сама всё сохранит автоматически.
Настроить правило
1. В outlook на закладке «Главная» выберите пункт «Правила» и в
открывшемся меню выберите пункт «Управление правилами и оповещениями». Если такой кнопки не можете найти – разверните окно Outlook на весь
экран.
3. В открывшемся окне выберите пункт «Применение правила к
полученным мною сообщениям» и нажмите кнопку «Далее».
4. В открывшемся окне ничего не отмечайте и сразу нажимайте
кнопку «Далее». Система запросит у Вас уверены ли что правило будет для всех
писем. Отвечайте «Да». При необходимости настройте необходимые правила.
5. В открывшемся окне поставьте галочку у пункта «Запустить
скрипт»
Затем в нижней части окна нажмите на слово «скрипт» и в открывшемся диалоговом окне выберите «SaveAttachments». Нажмите кнопку «Далее».
Затем в нижней части окна нажмите на слово «скрипт» и в открывшемся диалоговом окне выберите «SaveAttachments». Нажмите кнопку «Далее».
6. В открывшемся окне
нажмите кнопку «Далее»
7. В открывшемся окне укажите имя правила – «Сохранение все
вложений». Если Вам необходимо, что бы правило сразу отработало – поставьте галочку
у первого пункта в шаге №2. Нажмите кнопку «Готово». Outlook сообщит
о том, что это правило будет работать только на этом компьютере - жмите «Ок».
8. В результате файлы
будут сохраняться на диск компьютера каждый раз, когда будет приходить письмо с
вложением.
Возможные проблемы
Если у Ваша проблема тут не указана, пожалуйста напишите в
комментариях о ней, что бы я мог помочь Вам с ней.
Не сохраняются вложения.
1. Проверьте наличие созданного каталога. По умолчанию это «C:\Temp\OutlookAttach».
Или создайте эти две папки или измените этот путь в скрипте в переменной «base_path»
Сохраняются не все вложения
1. Проверьте в скрипте в переменной «file_ext» что указано
расширение требуемого файла. Добавьте требуемое расширение в строку в
переменную.
Комментариев нет:
Отправить комментарий