使用类别标记电子邮件而不创建重复类别

Tagging emails with categories without creating duplicate categories

我正在尝试编写一个规则,将一个类别应用于所有收到的邮件。

最终我想用它来标记带有“编程 - C”和“编程 - C++”标签的 C 和 C++ 相关电子邮件,但我简化了示例。

我也想 运行 对已经具有指定类别的邮件使用此规则,但我不希望它对已标记的电子邮件进行双重标记。

这是添加类别而不创建副本的子例程:

' Add a category but don't create duplicates
Sub AddCategory(ByRef Item As MailItem, strCategory As String)
    Dim exists As Boolean
    Dim arrCategories As Variant
    
    ' Initialize variables
    exists = False
    arrCategories = Split(Item.categories, ",")
    
    ' Loop through all categories
    For i = LBound(arrCategories) To UBound(arrCategories)
    
        ' Check if the specified category already exists
        If StrComp(strCategory, arrCategories(i)) = 0 Then
            exists = True
            Exit For
        End If
    Next i

    ' If the category does not exist, add it
    If Not exists Then
        Item.categories = Item.categories & "," & strCategory
    End If
End Sub

调用它的子程序:

Sub filter(Item As MailItem)
    Call AddCategory(Item, "Programming - C")
    Call AddCategory(Item, "Programming - C++")
    Item.Save
End Sub

此过滤器子例程从规则调用并应用于所有传入邮件。

如果我运行这条关于“收件箱中的所有项目”的规则,并且一封电子邮件已经被标记为“Programming -C”和“Programming - C++”,它将复制第二个标签。

因此,如果“编程 - C”是第一个标签,它将复制“编程 - C++”,反之亦然。

如何检查现有标签以避免重复?

弄清楚如何使用 VBA 逐行调试器后,我最终找到了问题...

事实证明 Item.Categories returns 类别作为字符串格式:

"Category1, Category2, ..."

每个类别由逗号 和 space.

分隔

解决方案是更改行:

arrCategories = Split(Item.categories, ",")

arrCategories = Split(Item.categories, ", ")