Je ne sais pas si une regex 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 regex. Je déteste Outlook. 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é en tant que VBAProject.OTM. Développez cet élément pour révéler 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).
Ensuite, sélectionnez Outils menu | Références et activer les références RegExp appelé 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 "Démarrer à partir d'une règle vide". Cliquez sur Suivant.
Choisissez la condition "Sur cette machine uniquement" (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 faut 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 sera désactivée chaque fois que vous arrêtez et redémarrez Outlook sauf si vous signez le script avec une clé de signature de code. Si vous ne disposez pas déjà d'une clé de signature de code, vous pouvez create one avec OpenSSL. Ai-je mentionné que je déteste Outlook?
Est-ce vraiment lié à la programmation? Je veux dire, vous ne demandez pas si la regex est correcte, seulement si Outlook supporte les expressions régulières –
Je voulais dire en fait que les deux questions. Je n'ai pas beaucoup utilisé les regex, donc j'étais aussi incertain. Dans le même aspect cependant, si Outlook ne supporte même pas les expressions rationnelles, le point est discutable, alors c'était un peu ce que j'allais faire avec. – kcoppock
Je ne pense pas que cela ait de l'importance, cela semble également correspondre = "[0-9] {4} - [0-9] {2}" –