【问题标题】:Move Outlook messages if content contains a number greater than threshold如果内容包含大于阈值的数字,则移动 Outlook 邮件
【发布时间】:2011-09-30 02:04:10
【问题描述】:

我每天在我的收件箱中收到数千条 Nagios 警报,但其中许多实际上是微不足道的(尽管 Nagios 将它们报告为严重)。我想检查这些警报的文本是否包含高于某个阈值的数字;如果数字低于该阈值,请将邮件移至垃圾文件夹。我真的应该与我的系统管理员合作,首先减少 Nagios 发送的无用警报的数量,但在我尝试创造性的解决方法时取笑我。

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

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

Nagios bad condition: foo = 3

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

Nagios bad condition: foo = 157

This example 在搜索消息内容以查找任意文本方面似乎更像我想要的。但它要求消息是开放的,所以我不太确定如何将它翻译成规则。任何帮助将不胜感激。

【问题讨论】:

  • 您链接到的这两个示例实际上与您非常相关。您只需要从每个部分中挑选相关部分并将它们组合起来。你有没有尝试过?

标签: vba filter outlook


【解决方案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

【讨论】:

    【解决方案2】:

    JFC 已经为您提供了一种方法。这是另一个使用 RULES 在消息到达时检查它们的方法。这样做。

    打开 VBA 编辑器并将此代码粘贴到 ThisOutlookSession

    未经测试

    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 中,选择“run a script”,然后选择上面的脚本。

    5) 最后点击完成就完成了:)

    最好的一点是,您也可以对收件箱文件夹中的现有电子邮件运行此规则 :)

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

    HTH

    席德

    【讨论】:

      猜你喜欢
      • 2023-01-22
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2019-01-10
      • 2015-05-15
      相关资源
      最近更新 更多