Jak filtrować wiadomości e-mail programu Outlook za pomocą reguły ze skryptem VBA?

13

Niektóre rzeczy nie są możliwe przy użyciu domyślnych reguł e-mail, takich jak wyszukiwanie tematów lub treści wiadomości za pomocą symboli wieloznacznych. Możesz zrobić wiele słów, ale to nie to samo, jeśli potrzebujesz słów oddalonych od siebie o jeden znak. Jak napisać własny kod Visual Basic for Applications w celu filtrowania wiadomości e-mail programu Outlook?

Grant Bowman
źródło

Odpowiedzi:

11

Spojrzałem wysoko i nisko na wszystkie te części potrzebne do tego prostego filtra. Dla porównania, uniksowe filtry procmail są tak łatwe w użyciu. Wszystkie kreatory Microsoft Outlook stają na drodze do prostego filtra za pomocą symboli wieloznacznych. Podczas gdy wiele warunków filtrowania wiadomości e-mail Microsoft domyślnie jest użytecznych, nic nie może przebić elastyczności i możliwości dostosowania działającego kodu.

  1. Napisz swój kod.

Alt-F11 wywołuje edytor kodu VBA. Kliknij dwukrotnie ThisOutlookSession. Napisz swój kod. W moim przypadku używa wyrażenia regularnego w wierszu tematu i przenosi go nie do DefaultFolder, ale mój własny plik pst w podfolderze.

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. Uruchom kod dla każdej przychodzącej wiadomości e-mail za pomocą reguły.

Zgodnie z regułami wybierz „Zarządzaj regułami i alertami ...”. Nowa zasada będzie wyglądać

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

Aby to zrobić, w kroku 1: Wybierz warunki: kliknij przycisk Dalej. Potwierdź, że dotyczy wszystkich wiadomości, klikając OK. W polu Wybierz akcję zaznacz „uruchom skrypt”, a następnie kliknij, aby wybrać skrypt filtru i wybierz Dalej lub Zakończ. W polu Wybierz wyjątki kliknij przycisk Dalej lub Zakończ. Nadaj mu dobrą nazwę, np. Vba-filter i zaznacz Włącz tę regułę. kliknij Zakończ. Ponieważ program kopiuje się do folderu lokalnego, kliknij przycisk OK, gdy pojawi się monit o potwierdzenie, że reguła nie będzie działać w przypadku wiadomości e-mail sprawdzanych online lub z innego urządzenia. Kliknij przycisk OK w oknie dialogowym Reguły i alerty.

  1. Outlook nie lubi, gdy makra nie są podpisane. Aby samodzielnie podpisać makra, utwórz certyfikat i użyj go .
Grant Bowman
źródło
Czytałem o wielu innych rozwiązaniach częściowych, takich jak makra i tworzenie kolumn zdefiniowanych przez użytkownika. Pozwala to na sortowanie w interfejsie użytkownika lub filtrowanie widoków, ale spowoduje to edycję wszystkich wiadomości w momencie ich otrzymania, co nie jest tym, co chciałem zrobić.
Grant Bowman
1
Mój klient programu Outlook niekonsekwentnie wyłączałby regułę, aby uruchomić vbscript vba-filter podczas uruchamiania programu Outlook. To spowodowało problemy. Istnieje także limit znaków w skrypcie vbscript, który można dodać do każdej reguły. Aby działały konsekwentnie, choć z mniejszą elastycznością, przepisałem filtry przy użyciu standardowych filtrów programu Outlook, aby działały przez cały czas.
Grant Bowman,
2
Brakowało opcji uruchomienia skryptu. Znalazłem powiązany link tutaj: slipstick.com/outlook/rules/outlook-2016-run-a-script-rules
Jayan
Powyższy kod nie działa dla mnie. Umieszczam Abc.20 w pliku tematu, ale wiadomości nigdy nie wychodzą ze skrzynki odbiorczej.
Tensigh
1
Za pomocą okna debugowania udało mi się uruchomić wyrażenie regularne. Teraz wystarczy przejść do odpowiednich folderów. Myślę, że mogę to rozgryźć. Dzięki za pomoc.
Tensigh