Tôi không biết liệu regex có thể được sử dụng trực tiếp trong quy tắc hay không, nhưng bạn có thể có quy tắc kích hoạt tập lệnh và tập lệnh có thể sử dụng regex. Tôi ghét Outlook.
Trước tiên, bạn phải mở trình chỉnh sửa tập lệnh thông qua Công cụ - Macro - Mở Trình chỉnh sửa Visual Basic (Alt-F11 là phím tắt).
Trình chỉnh sửa sẽ mở. Nó sẽ chứa một phác thảo dự án trong một bảng điều khiển nhỏ ở góc trên cùng bên trái. Dự án sẽ được liệt kê dưới dạng VBAProject.OTM. Mở rộng mục này để hiển thị đối tượng Microsoft Office Outlook. Mở rộng để tiết lộ ThisOutlookSession. Bấm đúp ThisOutlookSession để mở ngăn chỉnh sửa mã (có thể sẽ trống).
Tiếp theo chọn menu Công cụ | Tham khảo và bật tham chiếu RegExp được gọi là "Microsoft VBScript Regular Expressions 5.5"
Bây giờ bạn có thể tạo một chương trình con để thực hiện hành động lọc của mình. Lưu ý rằng một chương trình con được gọi bởi một quy tắc phải có một tham số duy nhất của kiểu Outlook.MailItem. Ví dụ:
' 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
Tiếp theo, bạn phải tạo quy tắc (Công cụ - Quy tắc và Cảnh báo) để kích hoạt tập lệnh này. Nhấp vào nút Quy tắc mới trên hộp thoại để khởi chạy trình hướng dẫn. Chọn mẫu cho quy tắc. Chọn mẫu "Kiểm tra thư khi họ đến" từ danh mục "Bắt đầu từ quy tắc trống". Bấm tiếp.
Chọn điều kiện "Chỉ trên máy này" (trực quan phải không?) Và nhấp vào tiếp theo.
Chọn tùy chọn "chạy tập lệnh". Ở cuối trình hướng dẫn hiển thị quy tắc mới của bạn, quy tắc phải đọc:
Apply this rule after the message arrives
on this machine only
run a script
Cụm từ "tập lệnh" là liên kết có thể nhấp. Nhấp vào nó và Outlook sẽ hiển thị một hộp thoại sẽ liệt kê chương trình con mà bạn đã tạo trước đó. Chọn chương trình con của bạn và nhấp vào nút OK.
Bạn có thể nhấp vào Tiếp theo để thêm ngoại lệ cho quy tắc hoặc nhấp vào Hoàn tất nếu bạn không có ngoại lệ.
Bây giờ, mặc dù quy trình đó không đủ phức tạp, quy tắc này sẽ hủy kích hoạt mỗi khi bạn dừng và khởi động lại Outlook trừ khi bạn ký tập lệnh bằng khóa ký mã.
Nếu bạn chưa có khóa ký mã, bạn có thể create one với OpenSSL.
Tôi có đề cập đến việc tôi ghét Outlook không?
Chương trình này có thực sự liên quan không? Tôi có nghĩa là, bạn không hỏi nếu regex là chính xác, chỉ khi triển vọng hỗ trợ regexes –
Tôi thực sự có nghĩa là nó như là cả hai câu hỏi. Tôi đã không sử dụng nhiều regex, vì vậy tôi cũng không chắc chắn về điều đó. Trong cùng một khía cạnh, nếu Outlook thậm chí không hỗ trợ regexes, điểm là tranh luận, do đó, đó là kinda nơi tôi đã đi với nó. – kcoppock
Tôi không nghĩ rằng nó quan trọng, điều này dường như phù hợp với nó cũng = "[0-9] {4} - [0-9] {2}" –