web-dev-qa-db-ja.com

Outlook 2007の正規表現ルール?

正規表現文字列に基づいてOutlook 2007でルールを作成することはできますか?

次のような文字列を含むメッセージにフィルターを追加しようとしています:4000-10、4桁の数字の後にダッシュ、2桁の数字が続きます。0000-00から9999-99

私はこれを正規表現として使用していました:\b[0-9]{4}\-[0-9]{2}\bしかし、フィルターは機能していません。他にもいくつかの変更を試してみましたが、運はありません。しかし、Outlookが規則への正規表現の入力をサポートしているかどうかについて、具体的なオンライン情報を見つけることができなかったので、時間を無駄にしている場合にここで質問することにしました。

編集:以下のクリスのコメントのおかげで、マクロを介してこのフィルターを実装することができました。他の人を助けることができるなら、私は以下のコードを共有すると思った:

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

正規表現をルールで直接使用できるかどうかはわかりませんが、ルールでスクリプトをトリガーでき、スクリプトで正規表現を使用できます。 Outlookが嫌いです。

まず、ツール-マクロ-Visual Basic Editorを開く(Alt-F11がショートカットです)でスクリプトエディターを開く必要があります。

エディターが開きます。左上の小さなパネルにプロジェクトのアウトラインが含まれている必要があります。プロジェクトはVBAProject.OTMとしてリストされます。この項目を展開して、Microsoft Office Outlookオブジェクトを表示します。これを展開してThisOutlookSessionを表示します。 ThisOutlookSessionをダブルクリックして、コード編集ペインを開きます(おそらく空白です)。

次に[ツール]メニューを選択します| 「Microsoft VBScript Regular Expressions 5.5」などのような名前のRegExp参照を参照して有効にします

これで、フィルタリングアクションを実行するサブルーチンを作成できます。ルールによって呼び出されるサブルーチンには、Outlook.MailItem型の単一のパラメーターが必要であることに注意してください。例えば:

' 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

次に、このスクリプトをトリガーするルール(ツール-ルールとアラート)を作成する必要があります。ダイアログの[新しいルール]ボタンをクリックして、ウィザードを起動します。ルールのテンプレートを選択します。 「空のルールから開始」カテゴリから「到着時にメッセージを確認」テンプレートを選択します。次へをクリックします。

「このマシンでのみ」条件を選択し(直感的ではないですか?)、「次へ」をクリックします。

「スクリプトを実行する」オプションを選択します。新しいルールが表示されるウィザードの下部に、次のように表示されます。

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

「スクリプト」というフレーズは、クリック可能なリンクです。クリックすると、先ほど作成したサブルーチンをリストするダイアログが表示されます。サブルーチンを選択し、[OK]ボタンをクリックします。

[次へ]をクリックしてルールに例外を追加するか、例外がない場合は[完了]をクリックします。

今では、そのプロセスが十分に複雑ではないかのように、コード署名キーでスクリプトに署名しない限り、このルールはOutlookを停止して再起動するたびに非アクティブになります。

コード署名キーがまだない場合は、 OpenSSLcreate create を使用できます。

Outlookが嫌いだと言いましたか?

49
Chris Judge

Microsoft Outlookは正規表現をサポートしていません 。ワイルドカード検索は実行できますが、何らかの理由でワイルドカード文字は%ではなく*です。

17
Ether