Как отфильтровать электронную почту Outlook, используя правило со сценарием VBA?

13

Определенные вещи невозможны при использовании правил электронной почты по умолчанию, таких как поиск по темам или телам сообщений с подстановочными знаками. Вы можете сделать несколько слов, но это не то же самое, если вам нужны слова на расстоянии одного символа друг от друга. Как я могу написать свой собственный код Visual Basic для приложений для фильтрации электронной почты Outlook?

Грант Боуман
источник

Ответы:

11

Я посмотрел высоко и низко для всех этих частей, необходимых для создания этого простого фильтра. Фильтры Unix procmail настолько просты в использовании. Все мастера Microsoft Outlook мешают простому фильтру с использованием подстановочных знаков. Хотя многие условия фильтрации электронной почты, которые Microsoft предоставляет по умолчанию, полезны, ничто не может сравниться с гибкостью и настройкой выполняемого кода.

  1. Напиши свой код.

Alt-F11 вызывает редактор кода VBA. Дважды щелкните по ThisOutlookSession. Напиши свой код. В моем случае он использует регулярное выражение в строке темы и перемещает его не в DefaultFolder, а в мой собственный pst в подпапке.

Sub filter(Item As Outlook.MailItem)
    Dim ns As Outlook.NameSpace
    Dim MailDest As Outlook.Folder
    Set ns = Application.GetNamespace("MAPI")
    Set Reg1 = CreateObject("VBScript.RegExp")
    Reg1.Global = True
    Reg1.Pattern = "(.*Abc.20.*)"
    If Reg1.Test(Item.Subject) Then
        Set MailDest = ns.Folders("Personal Folders").Folders("one").Folders("a")
        Item.Move MailDest
    End If
End Sub
  1. Запустите код для каждого входящего письма с правилом.

Под правилами выберите «Управление правилами и оповещениями ...». Новое правило будет выглядеть

Apply this rule after the message arrives run Project1.ThisOutlookSession.filter

Чтобы получить это, для шага 1: выберите условия: просто нажмите «Далее». Подтвердите, что это относится ко всем сообщениям, нажав OK. В поле «Выберите действие (я)» установите флажок «запустить сценарий», затем щелкните, чтобы выбрать сценарий фильтра, и нажмите «Далее» или «Готово». Для выбора исключений нажмите кнопку «Далее» или «Готово». Дайте ему хорошее имя, например, vba-filter, и установите флажок Включить это правило. нажмите Готово. Так как он справляется с локальной папкой, нажмите OK, когда он попросит подтвердить, что это правило не будет работать для электронной почты, которую вы проверяете онлайн или с другого устройства. Нажмите кнопку ОК в диалоговом окне «Правила и предупреждения».

  1. Outlook не нравится, когда макросы не подписаны. Чтобы самостоятельно подписать свои макросы, создайте сертификат и используйте его .
Грант Боуман
источник
Я читал о многих других частичных решениях, таких как макросы и создание пользовательских столбцов. Это позволяет сортировать пользовательский интерфейс или просматривать фильтрацию, но при этом будут редактироваться все сообщения по мере их поступления, что я не хотел делать.
Грант Боуман
1
Мой клиент outlook непоследовательно отключил бы правило для запуска vbscript vba-filter при запуске outlook. Это вызвало проблемы. Существует также ограничение на количество символов в VBScript для добавления к каждому правилу. Чтобы они работали согласованно, хотя и с меньшей гибкостью, я переписал фильтры, используя стандартные фильтры Outlook, чтобы они работали постоянно.
Грант Боуман
2
Эта опция для запуска скрипта отсутствовала. Нашел ссылку , относящуюся здесь: slipstick.com/outlook/rules/outlook-2016-run-a-script-rules
Джаяна
Код выше не работает для меня. Я помещаю Abc.20 в файл темы, но сообщения никогда не удаляются из папки «Входящие».
Tensigh
1
С помощью окна отладки мне удалось заставить регулярное выражение работать. Теперь это просто вопрос перехода к нужным папкам. Я думаю, что я могу понять это. Спасибо за вашу помощь.
Тенси