筛选邮件项的正文

本主题中的代码示例演示如何在 DASL 查询中使用内容索引来搜索正文中包含特定单词的邮件项目。

该代码示例对属性 urn:schemas:httpmail:textdescription(按其 DAV 命名空间引用的 Body 属性)设置一个 DASL 筛选器,并使用内容索引器关键字 ci_phrasematch 在正文中搜索词语“office”。 然后该示例将该筛选器应用到当前文件夹中的项目。 若要访问筛选器结果,它使用 Table 对象并打印每个项目的主题行。

请注意,本示例将打印返回的 Table 中每一行的主题;Subject 属性包含在由任一文件夹上的搜索返回的 Table 中。 但通常,Outlook 中的文件夹可以包含异类项目,并且不局限于单个项目类型。 如果要访问特定于项类型的属性,请使用 Columns.Add 包含该属性并更新 Table,并且对于 Table 中返回的每一行,请在访问属性之前检查该项的消息类型。

注意 DASL 查询中的内容索引比 like 关键字提供更好的性能。 但是,只能对项目正文中的文本进行筛选;如果正文包含 HTML 标记(如果在 HTML 格式的邮件项目中),则不会筛选标记。 该匹配操作不区分大小写,例如, Folder.GetTable 将返回正文中包含"Office"或"office"的任何项目。 通过在 Table 中添加列(由 urn:schemas:httpmail:textdescription 指示),最多可以在 Table 的列中返回正文的前 255 个字符。 不能对 Body 属性使用 Jet 查询进行筛选。

Sub RestrictUsingBody() 
 Dim strFilter As String 
 Dim oT As Table 
 Dim oRow as Row 
 
 'Create DASL query for Body using content indexing phrase match for 'office' 
 strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:textdescription" _ 
 & Chr(34) & " ci_phrasematch 'office'" 
 'Obtain Table by applying the filter on the current folder 
 Set oT = Application.ActiveExplorer.CurrentFolder.GetTable(strFilter) 
 'Print subject line of each mail item in current folder that contains 'office' in the body 
 Do Until oT.EndOfTable 
 Set oRow = oT.GetNextRow 
 Debug.Print oRow("Subject") 
 Loop 
End Sub

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。