Чтение файлов Outlook PST, получение информации о папках и подпапках

Aspose.Email для .NET предоставляет API для чтения файлов Microsoft Outlook PST. Вы можете загрузить PST‑файл с диска или из потока в экземпляр PersonalStorage class для доступа к подробной информации о содержимом, такой как папки, подпапки и сообщения. Кроме того, API предоставляет возможность включать поисковые папки при получении сообщений из папок PST.

Загрузка PST‑файла

Файл Outlook PST можно загрузить в экземпляре PersonalStorage class. Следующий фрагмент кода показывает, как загрузить PST‑файл.

Отображение информации о PST

После загрузка PST‑файла, вы можете получить информацию о отображаемом имени файла, корневой папке, подпапках и количестве сообщений. Следующий фрагмент кода показывает, как вывести имя PST‑файла, папок и количество сообщений в папках:

Получать только пользовательские папки

Файлы PST/OST могут содержать папки, созданные пользователем, то есть исключая все стандартные IPM‑папки. Aspose.Email предоставляет возможность доступа только к пользовательским папкам с помощью свойства only_folders_created_by_user класса PersonalStorageQueryBuilder class. Вы можете установить это свойство в True, чтобы получать только пользовательские папки. Следующий фрагмент кода демонстрирует, как использовать свойство only_folders_created_by_user в вашем проекте:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

query_builder = ae.storage.pst.PersonalStorageQueryBuilder()
query_builder.only_folders_created_by_user.equals(True)

folders = pst.root_folder.get_sub_folders(query_builder.get_query())

for folder in folders:
    print(f"Folder: {folder.display_name}")

Определение предопределённых папок

Чтобы определить, является ли папка в PST‑файле стандартной, используйте метод get_predefined_type класса FolderInfo class. Стандартные (или предопределённые) папки, в отличие от созданных пользователем, создаются Outlook при добавлении учётной записи электронной почты, такие как Входящие, Отправленные, Черновики, Удалённые, Календарь, Задачи, Заметки и т.д.

Ниже приведён пример кода, демонстрирующий, как использовать этот метод в проекте. Если установить значение True, он возвращает предопределённый тип для родительской папки верхнего уровня, определяя, является ли текущая папка подпапкой предопределённой папки. Если установить False, он возвращает предопределённый тип для текущей папки.

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

folders = pst.root_folder.get_sub_folders()

for folder in folders:
    print(f"Folder: {folder.display_name}")
    print(f"Is predefined: {folder.get_predefined_type(False) != ae.storage.pst.StandardIpmFolder.UNSPECIFIED}")
    print("-----------------------------------")

Управление RSS‑лентами в PersonalStorage

Aspose.Email предоставляет возможность получить ссылку на предопределённую папку RSS‑ленты, позволяя разработчикам программно получать доступ к RSS‑лентам, хранящимся в файле Outlook PST, и управлять ими. Получив ссылку на папку "RSS Feeds", разработчики могут работать с данными RSS‑ленты, включая подписку на новые ленты, обновление существующих или извлечение информации из лент.

Значение RssFeeds в StandardIpmFolder enum обычно представляет предопределённый тип папки, специально предназначенной для хранения RSS‑лент в файле Outlook PST. Используя это значение enum, разработчики могут программно обращаться к папке "RSS Feeds". Ниже приведены примеры кода, демонстрирующие, как реализовать эту функцию в вашем проекте:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

rss_folder = pst.get_predefined_folder(ae.storage.pst.StandardIpmFolder.RSS_FEEDS)

Чтобы добавить папку RSS‑ленты, используйте следующий фрагмент кода:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

rss_folder = pst.create_predefined_folder("RSS Feeds", ae.storage.pst.StandardIpmFolder.RSS_FEEDS)

Разбор поисковых папок

Aspose.Email предоставляет FolderKind перечисление для работы с различными типами PST‑папок. Помимо обычных (NORMAL) папок, оно работает с поисковыми (SEARCH) папками. Папка SEARCH — это виртуальная папка, предоставляющая представление всех электронных сообщений, соответствующих заданным критериям поиска. Чтобы разобрать SEARCH‑папки, используйте следующий фрагмент кода:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

folders = pst.root_folder.get_sub_folders(ae.storage.pst.FolderKind.SEARCH | ae.storage.pst.FolderKind.NORMAL)

# Browse through each folder to display folder name and number of messages
for folder in folders:
    print(f"Folder: {folder.display_name}")
    sub_folders = folder.get_sub_folders(ae.storage.pst.FolderKind.SEARCH | ae.storage.pst.FolderKind.NORMAL)
    for sub_folder in sub_folders:
        print(f"Sub-folder: {folder.display_name}")

Получение информации о родительской папке

Следующий пример кода показывает, как получить информацию о родительской папке из MessageInfo.

Получение подпапки PST по пути

Чтобы получить подпапку PST по пути, используйте метод get_sub_folder класса FolderInfo class. Получает конкретную подпапку в директории или файловой системе.

Метод принимает следующие параметры:

  • name — представляет имя подпапки, которую необходимо получить. Используется для указания названия или идентификатора подпапки, которую метод должен искать.

  • ignore_case — логическое значение, определяющее, будет ли метод игнорировать регистр при сравнении имени подпапки. Если True, сравнение будет без учёта регистра (например, "folder" и "Folder" будут считаться одинаковыми). Если False, сравнение будет регистрозависимым.

  • handle_path_separator — логическое значение, указывающее, следует ли методу обрабатывать разделитель пути при поиске подпапки. Разделители пути — это символы, использующиеся для разделения папок в пути (например, "\" в Windows или "/" в Unix). Если установить True, метод автоматически обрабатывает разделитель пути, обеспечивая корректное совпадение папок. Если установить False, разделитель будет рассматриваться как часть имени подпапки, что изменит поведение поиска.

Следующий пример кода показывает, как получить подпапку PST по пути:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

# In this sample, the method will return a ‘Jan’ named folder
# that is located at the Inbox\Reports\ path 
# relative to the root folder.
folder = pst.root_folder.get_sub_folder("Inbox\Reports\Jan", True, True)