开发者

Move Outlook messages if content contains a number greater than threshold

I get thousands of Nagios alerts in my inbox daily, but many of them are actually trivial (even though Nagios reports them as critical). I want to check whether the text of these alerts contains numbers above a certain threshold; if the numbers are lower than that threshold, move the message to a junk folder. I should really work with my sysadmin to decrease the number of useless alerts Nagios sends in the first place, but humor me in my attempt at a creative workaround.

I'm using Outlook 2007 and have found several tutorials on writing Outlook macros in VB, including this one about programmatically creating a rule to move messages to different folders. That example uses a TextRuleCondition to check whether the subject contains any of the keywords in an array.

But I don't want to check for keywords, I want to check if a number in the message text is greater or less than a threshold value. For example, if the text of a message contains the following, it could be moved to a junk folder:

Nagios bad condition: foo = 3

But if a message contained this, I would want to keep it:

Nagios bad condition: foo = 157

This example seems a little more like what I want in terms of searching 开发者_StackOverflow社区the content of the message for arbitrary text. But it requires the message to be open, so I'm not quite sure how to translate it into a rule. Any help would be appreciated.


The second example you link to will put you on the right track to write code that discriminates between good and junk e-mails.

Then you will want to put that code in the _ItemAdd event for the Inbox items, such that it runs every time something new pops up in your Inbox. Here's an example of what should go in your Outlook VBA module:

Public WithEvents myOlItems As Outlook.Items

Public Sub Application_Startup()
    ' Upon starting Outlook, set reference to the items in the Inbox.
    Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub myOlItems_ItemAdd(ByVal Item As Object)
    ' Because myOlItems is declared "WithEvents",
    ' the ItemAdd event will fire anytime something new pops up in the Inbox.

    If TypeName(Item) = "MailItem" Then
        ' It's an e-mail.

        ' Here goes the code to test whether it should go to the junk folder.

    Else
        ' It's something else than an e-mail.
        ' Do nothing.
    End If
End Sub


JFC has already given you one way. Here is another using RULES to check messages as they arrive. Do this.

Open VBA Editor and paste this code in ThisOutlookSession

UNTESTED

Option Explicit

Sub Sample(MyMail As MailItem)
    Dim strID As String, olNS As Outlook.NameSpace
    Dim objInboxFolder As Outlook.MAPIFolder
    Dim objDestinationFolder As Outlook.MAPIFolder
    Dim olMail As Outlook.MailItem
    Dim strFileName As String, strSubj As String
    Dim Myarray() As String
    Dim ThrsdVal As Long

    strID = MyMail.EntryID
    Set olNS = Application.GetNamespace("MAPI")
    Set olMail = olNS.GetItemFromID(strID)

    '~~> Email Subject
    strSubj = olMail.Subject

    '~~> Threshold value
    ThrsdVal = 100

    'Nagios bad condition: foo = 3
    Myarray = Split(strSubj, "=")

    Set objInboxFolder = olNS.GetDefaultFolder(olFolderInbox)
    '~~> Destination folder
    Set objDestinationFolder = objInboxFolder.Folders("Temp")

    '~~> Check if less than threshold value
    If Val(Trim(Myarray(1))) < ThrsdVal Then
        olMail.Move objDestinationFolder
    End If

    Set olMail = Nothing
    Set olNS = Nothing
End Sub

Now

1) Create a new Rule (Select "Check Messages When they Arrive")

2) In (Condition) select "From people or Distribution List"

3) Select the relevant email address from which you are getting the emails

4) In Actions, select "run a script" and then choose the above script.

5) Finally click on Finish and you are done :)

The best part about this is that you can run this rule for existing emails in your inbox folder as well :)

NOTE: Like I mentioned above, I have not tested the code so do let me know if you get any errors and I will rectify it. Also I am assuming that the message will have a subject with the format as "Nagios bad condition: foo = X". I have not included any error handling. I am sure you can take care of that :)

HTH

Sid

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜