正規表現文字列に基づいて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
正規表現をルールで直接使用できるかどうかはわかりませんが、ルールでスクリプトをトリガーでき、スクリプトで正規表現を使用できます。 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を停止して再起動するたびに非アクティブになります。
コード署名キーがまだない場合は、 OpenSSL で create create を使用できます。
Outlookが嫌いだと言いましたか?
Microsoft Outlookは正規表現をサポートしていません 。ワイルドカード検索は実行できますが、何らかの理由でワイルドカード文字は%
ではなく*
です。