【问题标题】:Outlook Rules - Alternative to wildcardsOutlook 规则 - 通配符的替代方案
【发布时间】:2022-01-24 05:11:35
【问题描述】:

每天我都会收到一封或多封非常特定类型的垃圾邮件到我的 xxxxx@gmail 帐户。

他们都有一个乱码且唯一的 FROM: 电子邮件地址。

TO: 和 CC: 字段的格式始终为 xxxxx[random chars]@aol.com。例如我今天买了一个

收件人:xxxxx@aol.com 抄送:xxxxxY7@aol.com

我想创建一个规则来自动将这些发送到垃圾邮件并阻止。两个可能的条件是:

  1. “收件人地址中包含 xxxxx AND @aol.com”
  2. “收件人地址中带有 xxxxx*@aol.com”(带有 * 作为通配符)。

#1 不起作用,因为它请求的“特定单词”与 OR 连接,没有使用 AND 的选项。

#2 不起作用,因为据我所知,没有办法使用通配符。

有什么建议吗?我意识到可能有一个简单的 VBA 脚本解决方案,但十多年来我没有使用过 VBA。希望可能有另一个聪明的非 VBA 解决方法。谢谢。

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    没有解决方法。您可以通过处理 Application 类的 NewMailEx 事件来处理 Outlook VBA 中的传入电子邮件。对于 Microsoft Outlook 处理的每个收到的项目,此事件都会触发一次。该项目可以是几种不同的项目类型之一,例如MailItemMeetingItemSharingItemEntryIDsCollection 字符串包含对应于该项目的条目 ID。您可以使用EntryIDCollection 参数中的Entry ID 来调用NameSpace.GetItemFromID 方法并处理该项目。

    NewMailEx 事件处理程序中,您可以检查所需的属性,例如Recipients 等,并将项目移动到您需要的地方。

    【讨论】:

    • 非常感谢。当我意识到我的问题有一个简单的解决方案(通常不是通配符或 AND 条件)时,我正要卷起袖子并使用您的建议编写 VBA 脚本。我刚刚创建了一个规则,将收件人地址中带有“xxxxx”的任何电子邮件发送到垃圾邮件文件夹,收件人地址中带有“xxxxxx@gmail.com”(我的实际电子邮件地址)的邮件除外。像魅力一样工作。
    【解决方案2】:

    如前所述,NewMailEx 可用于处理这样的一些过滤,并且我有一个正则表达式过滤器,我使用它作为标准自动规则不允许这样做(或者至少目前不允许 - 可能是未来的升级)。如果您可以使用正则表达式来识别您要处理的电子邮件,那么您可以使用以下代码:

    在这个 Outlook 会话中

    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
        On Error Resume Next
        Call RegExFilterRules(EntryIDCollection)
    End Sub
    

    在一个模块中

    Sub RegExFilterRules(ItemID As String)
        With Application.GetNamespace("MAPI")
            Dim Inbox As Outlook.MAPIFolder: Set Inbox = .GetDefaultFolder(olFolderInbox)
            Dim Junk As Outlook.MAPIFolder: Set Junk = .GetDefaultFolder(olFolderJunk)
            Dim olItem As Outlook.MailItem: Set olItem = .GetItemFromID(ItemID, Inbox.StoreID)
        End With
    
        'On Error Resume Next
        If Not olItem Is Nothing And olItem.Class = olMail Then
            If IsPatternFound(olItem.subject, "^M\d+$") Then olItem.Move Junk 'olItem.Delete 'olItem.UnRead = False
            If olItem.Sender = "cortana@microsoft.com" Then olItem.Delete
        End If
        Set olItem = Nothing
    End Sub
    
    Private Function IsPatternFound(Content As String, Pattern As String) As Boolean
        ' Requires Reference: Microsoft Scripting Runtime
        Dim RegEx As Object: Set RegEx = CreateObject("vbscript.RegExp")
        With RegEx
            .Global = True
            .IgnoreCase = True
            .MultiLine = True
            .Pattern = Pattern
            IsPatternFound = .Test(Content)
        End With
    End Function
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多