使用类别标记电子邮件而不创建重复类别
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, ", ")
我正在尝试编写一个规则,将一个类别应用于所有收到的邮件。
最终我想用它来标记带有“编程 - 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, ", ")