首页 > 解决方案 > 仅适用于原始邮件的 Outlook 规则

问题描述

我有一个搜索正文消息并查找短语的规则。如果找到该短语,则对消息进行分类。工作正常,除了我需要规则只对原始消息进行分类,而不是对该消息的回复的任何消息。

这可以通过规则实现吗?

标签: outlook

解决方案


不,规则无法识别消息是否是原始/初始消息(来自对话的第一条消息)。

但我建议改用 VBA 宏。您可以处理 Application 类的NewMailEx事件,该事件在新邮件到达收件箱时以及发生客户端规则处理之前触发。您可以使用EntryIDCollection数组中返回的条目 ID 来调用NameSpace.GetItemFromID方法并处理该项目。请谨慎使用此方法,以尽量减少对 Outlook 性能的影响。对于 Microsoft Outlook 处理的每个收到的项目,此事件都会触发一次。该项目可以是几种不同的项目类型之一,例如MailItemMeetingItemSharingItem。该EntryIDsCollection字符串包含对应于该项目的条目 ID。

因此,您可以获取该MailItem对象的一个​​实例并使用MailItem.GetConversation方法获取一个Conversation对象,该对象表示该项目所属的对话。

Sub DemoConversationTable() 
 Dim oConv As Outlook.Conversation 
 Dim oTable As Outlook.Table 
 Dim oRow As Outlook.Row 
 Dim oMail As Outlook.MailItem 
 Dim oItem As Outlook.MailItem 
 Const PR_STORE_ENTRYID As String = _ 
 "https://schemas.microsoft.com/mapi/proptag/0x0FFB0102" 
 
 On Error Resume Next 
 ' Obtain the current item for the active inspector. 
 Set oMail = Application.ActiveInspector.CurrentItem 
 
 If Not (oMail Is Nothing) Then 
 ' Obtain the Conversation object. 
 Set oConv = oMail.GetConversation 
 If Not (oConv Is Nothing) Then 
 Set oTable = oConv.GetTable 
 oTable.Columns.Add (PR_STORE_ENTRYID) 
 Do Until oTable.EndOfTable 
 Set oRow = oTable.GetNextRow 
 ' Use EntryID and StoreID to open the item. 
 Set oItem = Application.session.GetItemFromID( _ 
 oRow("EntryID"), _ 
 oRow.BinaryToString(PR_STORE_ENTRYID)) 
 Debug.Print oItem.Subject, _ 
 "Attachments.Count=" & oItem.Attachments.count 
 Loop 
 End If 
 End If 
End Sub

Conversation.GetTable方法返回一个对象,该Table对象包含表示对话中所有项目的行。所以,你可能会得到最初的。


推荐阅读