web-dev-qa-db-fra.com

Règles d'expression régulière dans Outlook 2007?

Est-il possible de créer des règles dans Outlook 2007 sur la base d'une chaîne d'expression régulière?

J'essaie d'ajouter un filtre pour les messages contenant une chaîne telle que: 4000-10, un nombre à quatre chiffres suivi d'un tiret, puis un nombre à deux chiffres, qui peut être n'importe quoi de 0000-00 à 9999-99.

J'utilisais ceci comme expression régulière: \b[0-9]{4}\-[0-9]{2}\b mais le filtre ne fonctionne pas. J'ai également essayé quelques autres modifications sans succès. Je n'ai pas pu trouver quoi que ce soit de concret en ligne sur la question de savoir si Outlook prend en charge la saisie de regex dans une règle, alors j'ai pensé que je demanderais ici au cas où je perdrais mon temps.

EDIT: Grâce au commentaire de Chris ci-dessous, j'ai pu implémenter ce filtre via une macro. J'ai pensé partager mon code ci-dessous au cas où il pourrait aider quelqu'un d'autre:

Sub JobNumberFilter(Message As Outlook.MailItem)
    Dim MatchesSubject, MatchesBody
    Dim RegEx As New RegExp

    'e.g. 1000-10'
    RegEx.Pattern = "([0-9]{4}-[0-9]{2})"

    'Check for pattern in subject and body'
    If (RegEx.Test(Message.Subject) Or RegEx.Test(Message.Body)) Then
        Set MatchesSubject = RegEx.Execute(Message.Subject)
        Set MatchesBody = RegEx.Execute(Message.Body)
        If Not (MatchesSubject Is Nothing And MatchesBody Is Nothing) Then
            'Assign "Job Number" category'
            Message.Categories = "Job Number"
            Message.Save
        End If
    End If
End Sub
46
kcoppock

Je ne sais pas si une expression régulière peut être utilisée directement dans une règle, mais vous pouvez avoir une règle qui déclenche un script et le script peut utiliser des expressions régulières. Je déteste Outlook.

Tout d'abord, vous devez ouvrir l'éditeur de script via Outils - Macro - Ouvrir Visual Basic Editor (Alt-F11 est le raccourci).

L'éditeur s'ouvrira. Il doit contenir un plan de projet dans un petit panneau dans le coin supérieur gauche. Le projet sera répertorié comme VBAProject.OTM. Développez cet élément pour afficher les objets Microsoft Office Outlook. Développez cela pour révéler ThisOutlookSession. Double-cliquez sur ThisOutlookSession pour ouvrir le volet d'édition de code (qui sera probablement vide).

Sélectionnez ensuite le menu Outils | Références et activer les références RegExp appelées quelque chose comme "Microsoft VBScript Regular Expressions 5.5"

Vous pouvez maintenant créer un sous-programme pour effectuer votre action de filtrage. Notez qu'un sous-programme appelé par une règle doit avoir un seul paramètre de type Outlook.MailItem. Par exemple:

' note that Stack Overflow's syntax highlighting doesn't understand VBScript's
' comment character (the single quote) - it treats it as a string delimiter.  To
' make the code appear correctly, each comment must be closed with another single
' quote so that the syntax highlighter will stop coloring everything as a string.'

Public Enum Actions
    ACT_DELIVER = 0
    ACT_DELETE = 1
    ACT_QUARANTINE = 2
End Enum

Sub MyNiftyFilter(Item As Outlook.MailItem)
    Dim Matches, Match
    Dim RegEx As New RegExp
    RegEx.IgnoreCase = True

    ' assume mail is good'
    Dim Message As String: Message = ""
    Dim Action As Actions: Action = ACT_DELIVER

    ' SPAM TEST: Illegal Word in subject'
    RegEx.Pattern = "(v\|agra|erection|penis|boner|pharmacy|painkiller|vicodin|valium|adderol|sex med|pills|pilules|viagra|cialis|levitra|rolex|diploma)"
    If Action = ACT_DELIVER Then
        If RegEx.Test(Item.Subject) Then
            Action = ACT_QUARANTINE
            Set Matches = RegEx.Execute(Item.Subject)
            Message = "SPAM: Subject contains restricted Word(s): " & JoinMatches(Matches, ",")
        End If
    End If

    ' other tests'

    Select Case Action
        Case Actions.ACT_QUARANTINE
            Dim ns As Outlook.NameSpace
            Set ns = Application.GetNamespace("MAPI")

            Dim junk As Outlook.Folder
            Set junk = ns.GetDefaultFolder(olFolderJunk)

            Item.Subject = "SPAM: " & Item.Subject
            If Item.BodyFormat = olFormatHTML Then
                Item.HTMLBody = "<h2>" & Message & "</h2>" & Item.HTMLBody
            Else
                Item.Body = Message & vbCrLf & vbCrLf & Item.Body
            End If

            Item.Save
            Item.Move junk

        Case Actions.ACT_DELETE
            ' similar to above, but grab Deleted Items folder as destination of move'

        Case Actions.ACT_DELIVER
            ' do nothing'
    End Select
End Sub


Private Function JoinMatches(Matches, Delimeter)
    Dim RVal: RVal = ""

    For Each Match In Matches
        If Len(RVal) <> 0 Then
            RVal = RVal & ", " & Match.Value
        Else
            RVal = RVal & Match.Value
        End If
    Next

    JoinMatches = RVal
End Function

Ensuite, vous devez créer une règle (Outils - Règles et alertes) pour déclencher ce script. Cliquez sur le bouton Nouvelle règle dans la boîte de dialogue pour lancer l'assistant. Sélectionnez un modèle pour la règle. Choisissez le modèle "Vérifier les messages à leur arrivée" dans la catégorie "Commencer à partir d'une règle vierge". Cliquez sur Suivant.

Choisissez la condition "Sur cette machine uniquement" (intuitive n'est-ce pas?) Et cliquez sur Suivant.

Choisissez l'option "exécuter un script". Au bas de l'assistant où il montre votre nouvelle règle, il devrait lire:

Apply this rule after the message arrives
on this machine only
run a script

L'expression "un script" est un lien cliquable. Cliquez dessus et Outlook affichera une boîte de dialogue qui devrait répertorier le sous-programme que vous avez créé précédemment. Sélectionnez votre sous-programme et cliquez sur le bouton OK.

Vous pouvez cliquer sur Suivant pour ajouter des exceptions à la règle ou sur Terminer si vous n'avez aucune exception.

Maintenant, comme si ce processus n'était pas assez compliqué, cette règle se désactivera chaque fois que vous arrêterez et redémarrerez Outlook, sauf si vous signez le script avec une clé de signature de code.

Si vous n'avez pas encore de clé de signature de code, vous pouvez en créer une avec OpenSSL .

Ai-je mentionné que je déteste Outlook?

49
Chris Judge

Microsoft Outlook ne prend pas en charge les expressions régulières . Vous pouvez effectuer des recherches génériques, bien que, pour une raison inexplicable, le caractère générique soit %, ne pas *.

17
Ether