正则expression式规则在Outlook 2007中?

是否有可能基于正则expression式string在Outlook 2007中创build规则?

我试图添加一个包含string的消息filter,例如: 4000-10 ,一个四位数字后跟一个破折号,然后是一个两位数字,可以是从0000-009999-99任何东西。

我正在使用这个正则expression式: \b[0-9]{4}\-[0-9]{2}\b但filter不工作。 我已经尝试了一些其他的修改,也没有运气。 但是,我还没有find任何具体的网上关于Outlook甚至支持进入正则expression式的具体的networking,所以我想我会问在这里,以免浪费我的时间。

编辑:感谢克里斯的评论下面,我能够实现这个filter通过macros。 我想我会在下面分享我的代码,以便能够帮助其他人:

 Sub JobNumberFilter(Message As Outlook.MailItem) Dim MatchesSubject, MatchesBody Dim RegEx As New RegExp 'eg 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 

我不知道在规则中是否可以直接使用正则expression式,但是您可以使用规则触发脚本,脚本可以使用正则expression式。 我讨厌Outlook。

首先,你必须通过工具 – macros打开脚本编辑器 – 打开Visual Basic编辑器(Alt-F11是快捷键)。

编辑器将打开。 它应该在左上angular的一个小面板中包含一个项目大纲。 该项目将被列为VBAProject.OTM。 展开此项目以显示Microsoft Office Outlook对象。 展开以显示ThisOutlookSession。 双击ThisOutlookSession打开代码编辑窗格(这可能是空白的)。

接下来select工具菜单| 引用并启用RegExp引用,如“Microsoft VBScript Regular Expressions 5.5”

您现在可以创build一个子例程来执行您的过滤操作。 请注意,由规则调用的子例程必须具有types为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 

接下来,您必须创build一个规则(工具 – 规则和警报)才能触发此脚本。 点击对话框上的New Rulebutton启动向导。 为规则select一个模板。 从“从空白规则开始”类别中select“到达时检查邮件”模板。 点击下一步。

select“仅限本机”(直观不是吗?),然后单击下一步。

select“运行脚本”选项。 在向导的底部显示新规则,它应该是:

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

短语“一个脚本”是一个可点击的链接。 单击它,Outlook将显示一个对话框,列出您之前创build的子例程。 select您的子程序,然后单击确定button。

您可以单击“下一步”向规则添加例外,如果没有例外,则单击“完成”。

现在,好像这个过程没有足够的复杂性,除非您使用代码签名密钥签署脚本,否则每次停止并重新启动Outlook时,此规则都将停用。

如果您还没有代码签名密钥,则可以使用OpenSSL 创build一个 。

我提到我讨厌Outlook吗?

Microsoft Outlook不支持正则expression式 。 您可以执行通配符search,但由于某些莫名其妙的原因,通配符是% ,而不是*