【问题标题】:How do I check for "Test Email" in the subject?如何检查主题中的“测试电子邮件”?
【发布时间】:2021-04-20 02:42:00
【问题描述】:

我尝试在 Outlook 中设置规则只是为了得知规则不区分大小写。

如果收到一封电子邮件并且主题包含“测试电子邮件”(例如这是一封测试电子邮件),我想要,然后检查正文。
如果正文包含单词 NO,大写字母(不是单词的一部分),则将电子邮件移至特定文件夹。

我发现以下脚本用于正文中包含 NO 的传入电子邮件。

如何首先检查标题中的“测试电子邮件”?

Private WithEvents InboxItems As Outlook.Items
Private m_Rules As Variant
    
Sub Application_Startup()
    Dim i As Long
    i = -1: ReDim m_Rules(1000)
    i = i + 1: m_Rules(i) = Array("NO", "No Folder")
    ReDim Preserve m_Rules(i)
    Set InboxItems = Application.Session.GetDefaultFolder(olFolderInbox).Items
End Sub
    
Private Sub InboxItems_ItemAdd(ByVal Item As Object)
    Dim Folder As Outlook.MAPIFolder
    Dim i As Long, Find As String
    'Find = Item.Subject
    Find = Item.Body
    For i = 0 To UBound(m_Rules)
        If InStr(1, Find, m_Rules(i)(0), vbBinaryCompare) Then
            Set Folder = Application.Session.GetDefaultFolder(olFolderInbox)
            Set Folder = Folder.Folders(m_Rules(i)(1))
            Item.Move Folder
            Exit For
        End If
    Next
End Sub

【问题讨论】:

  • 你所指的title就是Subject。您似乎知道如何在 Body 中使用InStr。我不知道为什么你也不能在 Subject 中使用它。
  • 所以我尝试更改它以查找主题 - 想我会从那个开始 - 我认为它会检查所有电子邮件,因为它会进入收件箱,但它似乎没有做任何事情。我不确定如何将我的代码添加到此评论字段中,抱歉:(
  • 您没有将代码添加到注释字段中。您edit您的帖子将其放入问题中。 :-)

标签: vba outlook rules case-sensitive


【解决方案1】:

这是我用来过滤收到的电子邮件的正则表达式搜索功能。应该可以根据您的需要进行编辑

在此 Outlook 会话中

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

在一个模块中

Sub RegExFilterRules(ItemID As String)
    Dim ThisNamespace As Outlook.NameSpace: Set ThisNamespace = Application.GetNamespace("MAPI")
    Dim Inbox As Outlook.MAPIFolder: Set Inbox = ThisNamespace.GetDefaultFolder(olFolderInbox)
    Dim Junk As Outlook.MAPIFolder: Set Junk = ThisNamespace.GetDefaultFolder(olFolderJunk)
    
    Dim oMsg As Outlook.MailItem: Set oMsg = ThisNamespace.GetItemFromID(ItemID, Inbox.StoreID)
    
    If Not oMsg Is Nothing And oMsg.Class = olMail Then
        If FindPattern(oMsg.Subject, "^M\d+$") Then oMsg.Move Junk ' oMsg.Delete
    End If
End Sub

Private Function FindPattern(Str 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
        FindPattern = .Test(Str)
    End With
End Function

【讨论】:

  • 谢谢。我会试一试,看看我会怎么做。了解这一切,感谢您的帮助,我将尝试遵循并理解您的代码:)
猜你喜欢
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 2013-08-11
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
相关资源
最近更新 更多