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
È stato utile?

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 *.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top