如果内容包含大于阈值的数字,请移动Outlook邮件

时间:2011-07-07 00:49:24

标签: vba filter outlook

我每天都会在收件箱中收到数以千计的Nagios警报,但其中很多都是微不足道的(即使Nagios报告它们很关键)。我想检查这些警报的文本是否包含超过特定阈值的数字;如果数字低于该阈值,请将邮件移至垃圾邮件文件夹。我应该真的使用我的系统管理员来减少Nagios首先发送的无用警报的数量,但在我尝试创造性的解决方法时让我感到幽默。

我正在使用Outlook 2007,并且已经找到了几个关于在VB中编写Outlook宏的教程,包括this one关于以编程方式创建将邮件移动到不同文件夹的规则。该示例使用TextRuleCondition来检查主题是否包含数组中的任何关键字。

但我不想检查关键字,我想检查消息文本中的数字是大于还是小于阈值。例如,如果邮件的文本包含以下内容,则可以将其移动到垃圾邮件文件夹:

Nagios bad condition: foo = 3

但是如果一条消息包含这个消息,我会想保留它:

Nagios bad condition: foo = 157
在搜索任意文本的消息内容方面,

This example似乎更像我想要的。但它要求消息是开放的,所以我不太确定如何将其转换为规则。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您链接到的second example会让您走上正确的轨道,编写区分好垃圾邮件和垃圾邮件的代码。

然后,您需要将该代码放入收件箱项目的_ItemAdd事件中,以便每次在收件箱中弹出新内容时它都会运行。以下是Outlook VBA模块中应该包含的示例:

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

答案 1 :(得分:1)

JFC已经给你一个方法。这是另一个使用RULES来检查消息到达时。这样做。

打开VBA编辑器并将此代码粘贴到 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

现在

1)创建一个新规则(选择“当它们到达时检查消息”)

2)在(条件)中选择“来自人员或分发列表”

3)选择您收到电子邮件的相关电子邮件地址

4)在Actions中,选择“运行脚本”,然后选择上面的脚本。

5)最后点击Finish,你就完成了:)

关于此问题的最佳部分是您可以对收件箱文件夹中的现有电子邮件运行此规则:)

注意:就像我上面提到的,我没有测试过代码,所以如果你有任何错误请告诉我,我会纠正它。另外我假设消息的主题格式为“ Nagios bad condition:foo = X ”。我没有包含任何错误处理。我相信你可以照顾到:)

HTH

西特