Прежде всего, метод Restrict
класса Items
возвращает коллекцию Items
, которая представляет элементы из исходной коллекции Items, которые соответствуют фильтру. Итак, вам нужно перебрать все элементы в коллекции и сохранить вложения.
Чтобы охватить все папки (с подпапками), вы должны рекурсивно перебирать все папки в Outlook (необработанный эскиз в VBA):
Private Sub processFolder(ByVal oParent As Outlook.MAPIFolder)
Dim oFolder As Outlook.MAPIFolder
Dim oMail As Outlook.MailItem
For Each oMail In oParent.Items
'Get your data here ...
Next
If (oParent.Folders.Count > 0) Then
For Each oFolder In oParent.Folders
processFolder oFolder
Next
End If
End Sub
Но лучший способ - использовать метод AdvancedSearch
класса Application, чтобы найти все элементы, к которым прикреплены файлы, и затем обрабатывать их только путем сохранения прикрепленных файлов на диске. Ключевые преимущества использования метода AdvancedSearch в Outlook:
- Поиск выполняется в другом потоке. Вам не нужно запускать другой поток вручную, поскольку метод AdvancedSearch запускает его автоматически в фоновом режиме.
- Возможность поиска любых типов элементов: почта, встреча, календарь, заметки и c. в любом месте, т.е. за пределами определенной папки. Методы
Restrict
и Find
/ FindNext
могут применяться к конкретной коллекции Items
(см. Свойство Items
класса Folder
в Outlook). - Полная поддержка DASL запросы (для поиска также можно использовать настраиваемые свойства). Подробнее об этом можно прочитать в статье Filtering в MSDN. Чтобы повысить эффективность поиска, можно использовать ключевые слова мгновенного поиска, если для магазина включен мгновенный поиск (см. Свойство
IsInstantSearchEnabled
класса Store). - Вы можете остановить процесс поиска в любой момент, используя
Stop
метод класса Search
.
Чтобы найти все элементы, у которых есть вложения, вы можете использовать следующее условие (например, строка предназначена для макросов VBA, но свойство такое же для всех языков программирования):
query ="@SQL=" & chr(34) & "urn:schemas:httpmail:hasattachment" & chr(34) & "=1"