Regular Expression Regole in Outlook 2007?
-
28-09-2019 - |
Domanda
E 'possibile creare delle regole in Outlook 2007 in base a una stringa regex?
Sto cercando di aggiungere un filtro per i messaggi che contengono una stringa come ad esempio: 4000-10
, un numero di quattro cifre seguito da un trattino e poi un numero a due cifre, che può essere qualsiasi cosa, da 0000-00
a 9999-99
.
Io sto usando questo come un'espressione regolare: \b[0-9]{4}\-[0-9]{2}\b
ma il filtro non funziona. Ho provato un paio di altre modifiche come pure senza fortuna. Io non sono riuscito a trovare nulla di concreto in linea circa se Outlook supporta anche entrare regex in una regola, però, così ho pensato che vorrei chiedere qui a caso sto sprecando il mio tempo.
EDIT: Grazie al commento di Chris di seguito, sono stato in grado di implementare questo filtro grazie ad una macro. Ho pensato di condividere il mio codice qui sotto nel caso in cui esso è in grado di aiutare chiunque altro:
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
Soluzione
Non so se una regex può essere utilizzato direttamente in una regola, ma è possibile avere una regola trigger di uno script e lo script può utilizzare regex. Odio Outlook.
In primo luogo, è necessario aprire l'editor di script tramite Strumenti - Macro - Aprire Visual Basic Editor (Alt-F11 è la scorciatoia)
.L'editor si aprirà. Dovrebbe contenere una bozza di progetto in un piccolo pannello nell'angolo in alto a sinistra. Il progetto sarà elencato come VBAProject.OTM. Espandere questa voce per rivelare oggetti di Microsoft Office Outlook. Espandere che a rivelare ThisOutlookSession. Fare doppio clic ThisOutlookSession per aprire il riquadro di modifica del codice (che probabilmente sarà vuoto).
Avanti menù selezionare Strumenti | Riferimenti e abilitare i riferimenti RegExp chiamato qualcosa come "Microsoft VBScript Regular Expressions 5.5"
È ora possibile creare una subroutine per eseguire l'azione di filtraggio. Si noti che una subroutine chiamata da una regola deve avere un solo parametro di tipo Outlook.MailItem. Ad esempio:
' 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
Successivamente, è necessario creare una regola (Strumenti - Regole e avvisi) per attivare questo script. Fare clic sul pulsante Nuova regola nella finestra di dialogo per avviare la procedura guidata. Selezionare un modello per la regola. Scegliere il "Controlla i messaggi in arrivo" modello dalla "Start da un vuoto regola" categoria. Fare clic su Avanti.
Scegliere il "Su questa macchina unica" condizione (intuitiva non è vero?) E cliccate su Avanti.
Scegliere l'opzione "eseguire uno script". Nella parte inferiore della procedura guidata in cui mostra la nuova regola, si dovrebbe leggere:
Apply this rule after the message arrives
on this machine only
run a script
La frase "uno script" è un link cliccabile. Clic su di esso e Outlook verrà visualizzata una finestra di dialogo che dovrebbe elencare la subroutine creato in precedenza. Selezionare la subroutine e fare clic sul pulsante OK.
È possibile fare clic su Avanti per aggiungere eccezioni alla regola o fare clic su Fine se si dispone di nessuna eccezione.
Ora, come se questo processo non è stato contorto abbastanza, questa regola si disattiva ogni volta che si arresta e si riavvia Outlook a meno che non si firma lo script con una chiave di firma codice.
Se non si dispone già di una chiave di firma codice, è possibile crearne uno con OpenSSL .
Ho già detto che io odio Outlook?
Altri suggerimenti
Microsoft Outlook non supporta le espressioni regolari . È possibile eseguire ricerche con caratteri jolly, anche se per qualche motivo inspiegabile il carattere jolly è %
, non *
.