Фильтрация текста почтового элемента
В примере кода в этом разделе показано, как использовать индексирование содержимого в запросе 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 и обратная связь.