outlook - 仅适用于原始邮件的 Outlook 规则
问题描述
我有一个搜索正文消息并查找短语的规则。如果找到该短语,则对消息进行分类。工作正常,除了我需要规则只对原始消息进行分类,而不是对该消息的回复的任何消息。
这可以通过规则实现吗?
解决方案
不,规则无法识别消息是否是原始/初始消息(来自对话的第一条消息)。
但我建议改用 VBA 宏。您可以处理 Application 类的NewMailEx事件,该事件在新邮件到达收件箱时以及发生客户端规则处理之前触发。您可以使用EntryIDCollection
数组中返回的条目 ID 来调用NameSpace.GetItemFromID方法并处理该项目。请谨慎使用此方法,以尽量减少对 Outlook 性能的影响。对于 Microsoft Outlook 处理的每个收到的项目,此事件都会触发一次。该项目可以是几种不同的项目类型之一,例如MailItem
、MeetingItem
或SharingItem
。该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
对象包含表示对话中所有项目的行。所以,你可能会得到最初的。
推荐阅读
- python - 在 Linux 中启动 Jupyterlab
- python - 简单的 Flask 显示空白页
- python - 使用 Big (O) 进行时间复杂度分析
- arrays - Excel/Sheets 结合行列内容并找到尊重的价值
- google-cloud-platform - GKE 节点池升级最初因配额而停滞;无法回滚、取消或重试
- c - 如何找到源代码的依赖关系?
- swift - SwiftUI 工作表上的圆角
- django - 在 apache 和 daphne 上托管 django 频道
- java - Swing–JavaFX 互操作性 ConcurrentModificationException 错误
- python - 如何将 pyarrow 时间戳 dtype 转换为 time64 类型?