Comment filtrer les e-mails Outlook à l'aide d'une règle avec un script VBA?

14

Certaines choses ne sont pas possibles en utilisant les règles de messagerie par défaut comme la recherche de sujets ou de corps de message avec des caractères génériques. Vous pouvez faire plusieurs mots mais ce n'est pas la même chose si vous avez besoin que les mots soient séparés d'un caractère. Comment puis-je écrire mon propre code Visual Basic pour Applications pour filtrer la messagerie Outlook?

Grant Bowman
la source

Réponses:

12

J'ai regardé haut et bas pour toutes ces pièces nécessaires à la réalisation de ce simple filtre. Les filtres procmail Unix sont si faciles à utiliser en comparaison. Tous les assistants Microsoft Outlook gênent un simple filtre à l'aide de caractères génériques. Bien que de nombreuses conditions de filtrage des e-mails fournies par Microsoft par défaut soient utiles, rien ne peut battre la flexibilité et la personnalisation du code en cours d'exécution.

  1. Écrivez votre code.

Alt-F11 affiche l'éditeur de code VBA. Double-cliquez sur ThisOutlookSession. Écrivez votre code. Dans mon cas, il utilise une expression régulière sur la ligne d'objet et la déplace non pas vers le DefaultFolder mais mon propre pst dans un sous-dossier.

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. Exécutez le code pour chaque e-mail entrant avec une règle.

Sous les règles, sélectionnez "Gérer les règles et les alertes ...". La nouvelle règle ressemblera à

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

Pour l'obtenir, pour l'étape 1: Sélectionnez la ou les conditions: cliquez simplement sur suivant. Confirmez qu'il s'applique à tous les messages en cliquant sur OK. Pour Sélectionner une ou plusieurs actions, cochez «exécuter un script», puis cliquez pour choisir le script de filtre et sélectionnez Suivant ou Terminer. Pour Sélectionner une ou des exceptions, cliquez sur Suivant ou sur Terminer. Donnez-lui un bon nom comme vba-filter et cochez Activer cette règle. cliquez sur Terminer. Puisqu'il copie dans un dossier local, cliquez sur OK lorsqu'il vous demande de confirmer que cette règle ne fonctionnera pas pour les e-mails que vous vérifiez en ligne ou à partir d'un autre appareil. Cliquez sur OK dans la boîte de dialogue Règles et alertes.

  1. Outlook ne l'aime pas lorsque les macros ne sont pas signées. Pour signer automatiquement vos macros, créez un certificat et utilisez-le .
Grant Bowman
la source
J'ai lu beaucoup d'autres solutions partielles comme les macros et la création de colonnes définies par l'utilisateur. Cela permet le tri de l'interface utilisateur ou le filtrage des vues, mais cela modifiera tous les messages au fur et à mesure, ce qui n'est pas ce que je voulais faire.
Grant Bowman,
1
Mon client Outlook désactiverait de manière incohérente la règle pour exécuter vbscript vba-filter au démarrage d'Outlook. Cela a causé des problèmes. Il existe également une limite de caractères sur le vbscript à ajouter à chaque règle. Pour qu'ils fonctionnent de manière cohérente, mais avec moins de flexibilité, j'ai réécrit les filtres à l'aide des filtres Outlook standard afin qu'ils fonctionnent tout le temps.
Grant Bowman
2
Cette option pour exécuter un script était manquante. Trouvé un lien connexe ici: slipstick.com/outlook/rules/outlook-2016-run-a-script-rules
Jayan
Le code ci-dessus ne fonctionne pas pour moi. J'ai mis Abc.20 dans le fichier sujet mais les messages ne sortent jamais de la boîte de réception.
Tensigh
1
En utilisant la fenêtre de débogage, j'ai réussi à faire fonctionner l'expression régulière. Maintenant, il suffit de passer aux bons dossiers. Je pense que je peux le comprendre. Merci de votre aide.
Tensigh