Поделиться через


Фильтрация текста почтового элемента

В примере кода в этом разделе показано, как использовать индексирование содержимого в запросе DASL для поиска почтовых элементов, содержащих определенное слово в тексте.

Пример кода настраивает фильтр DASL для свойства urn:schemas:httpmail:textdescription (свойство Body , на которое ссылается его пространство имен DAV) и использует ключевое слово индексатора контента ci_phrasematch для поиска слова "office" в тексте. Затем фильтр применяется к элементам в текущей папке. Для доступа к результатам фильтра используется объект Table и выводится строка темы каждого элемента.

Обратите внимание, что в этом примере выводится тема каждой строки в возвращаемой таблице. Свойство Subject включается в таблицу, возвращаемую при поиске в любой папке. Но обычно папка в Outlook может содержать разнородные элементы и не ограничивается одним типом элементов. Если вы хотите получить доступ к свойству, относящееся к типу элемента, используйте Columns.Add , чтобы включить это свойство и обновить таблицу, а для каждой строки, возвращаемой в таблице, проверьте тип сообщения элемента перед доступом к свойству.

Примечание Индексирование содержимого в запросе DASL обеспечивает лучшую производительность, чем ключевое слово like . Однако фильтровать можно только по тексту текста элемента; Если текст содержит теги HTML, как в почтовом элементе в формате HTML, теги не будут фильтроваться. Совпадение не учитывает регистр, поэтому, например, любой элемент, содержащий "Office" или "office" в тексте, будет возвращен Folder.GetTable. Вы также можете вернуть до первых 255 символов текста в столбце таблицы, добавив столбец (обозначенный urn:schemas:httpmail:textdescription) в таблицу. Нельзя использовать запрос Jet для фильтрации по свойству Body .

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 и обратная связь.