Управление файлами Outlook for Mac OLM

Contents
[ ]

OLM (Outlook for Mac Archive) — это файловый формат, связанный с Microsoft Outlook for Mac. Он используется для архивирования и хранения электронных писем, контактов, элементов календаря, задач и других данных Outlook на компьютерах Mac. Файлы OLM служат в качестве резервной копии или формата архива, позволяя пользователям сохранять свои данные Outlook for Mac для будущего использования или миграции. Важно отметить, что файлы OLM специфичны для Outlook for Mac и не совместимы с форматом PST (Personal Storage Table), используемым Outlook на Windows. Если необходимо перенести данные Outlook между разными платформами, пригодятся инструменты конвертации. Aspose.Email предлагает такие инструменты, включая открытие, чтение и другие функции для работы с файлами OLM.

Открытие файлов Outlook OLM

Файлы формата OLM можно открыть двумя способами:

  • использование конструктора
  • используя статический метод ‘from_file’

Открыть файлы Outlook OLM с помощью конструкторов Python

Чтобы открыть файл, вызовите конструктор OlmStorage класс и передайте полное имя файла или поток в качестве аргумента:

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)

Открыть файлы OLM с помощью статического метода FromFile в Python

Чтобы открыть файл, используйте статический метод ‘from_file’ класса OlmStorage класс и передайте полное имя файла или поток в качестве аргумента:

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)

Управление папками и письмами в OLM‑файлах

Рекурсивный доступ к структуре папок

API Aspose.Email позволяет визуализировать и отобразить иерархию папок, полученную из OLM‑файла, используя функцию print_all_folders. Эта функция принимает свойство folder_hierarchy класса OlmStorage класс, принимающий уровень отступа в качестве входных данных, и рекурсивно обходя иерархию, выводит название каждой папки с соответствующим отступом.

Ниже пример кода, демонстрирующий, как использовать функцию print_all_folders для отображения иерархии папок из OLM‑файла:

import aspose.email as ae


def print_all_folders(folder_hierarchy, indent):
    for folder in folder_hierarchy:
        print(f"{indent}{folder.name}")
        print_all_folders(folder.sub_folders, indent + "-")

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
print_all_folders(olm.folder_hierarchy, "")

Приведённый выше пример кода предназначен для отображения иерархии папок OLM‑файла с помощью рекурсивной функции в более структурированном и читаемом виде.

Прямой доступ к структуре папок

Aspose.Email также позволяет напрямую обращаться к структуре папок из OLM‑файла, используя метод get_folders() класса OlmStorage класс.

Ниже пример кода для прямого доступа к структуре папок:

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folders = olm.get_folders()

Получение папок по имени

Можно получить любую папку по её имени, используя метод get_folder(name, ignore_case) класса OlmStorage класс. Этот метод требует параметры имени папки и чувствительности к регистру.

Вот пример кода, иллюстрирующий, как получить папку по её имени:

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)

Список писем из файлов Outlook OLM

Библиотеку Aspose.Email можно использовать для чтения и извлечения сообщений электронной почты из файлов Outlook for Mac (OLM). Вы можете получить список писем, используя следующие методы класса OlmFolder класс, представляющий папку:

  • enumerate_messages() — перебирает каждое сообщение электронной почты в папке. Этот метод возвращает сообщения как экземпляры OlmMessageInfo класс, предоставляющий базовую информацию о каждом сообщении, такую как тема, отправитель, дата и т.д.
  • enumerate_mapi_messages() — также перебирает каждое сообщение электронной почты в папке, но в этом случае возвращает сообщения как экземпляры MapiMessage класс, представляющий сообщение электронной почты более подробно и специфично для MAPI. Он предоставляет доступ к широкому набору свойств и деталей сообщения, позволяя выполнять более продвинутую и специализированную обработку.

Приведённые ниже примеры кода демонстрируют, как извлечь базовые темы писем и сохранить детальные сообщения электронной почты из файла Outlook OLM, используя enumerate_messages() для извлечения тем и enumerate_mapi_messages() для сохранения сообщений в виде файлов .msg.

Извлечь базовую информацию о письмах с помощью метода ’enumerate_messages()’

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)

for message_info in folder.enumerate_messages():
    print(message_info.subject)

Сохранить детальные сообщения электронной почты с помощью метода ’enumerate_mapi_messages()’

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)

for msg in folder.enumerate_mapi_messages():
    msg.save(f"{msg.subject}.msg")

Получить общее количество сообщений в папке OLM

Этот OlmFolder класс предоставляет вам ещё больше возможностей с помощью следующих методов:

  • has_messages — получает значение, указывающее, содержит ли текущая папка сообщения.
  • message_count — получает количество сообщений.

Пример кода ниже демонстрирует, как использовать эти методы:

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)

if folder.has_messages:
   print(f"Message count: {folder.message_count}")

Получить или установить даты изменения сообщений Outlook OLM

Aspose.Email делает возможным получение информации о времени последнего изменения сообщения электронной почты. Свойство modified_date класса OlmMessageInfo класс представляет дату и время последнего изменения сообщения.

Вот пример, демонстрирующий использование свойства:

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)

for message_info in folder.enumerate_messages():
    modifiedDate = message_info.modified_date

Извлечение содержимого OLM

Извлечение писем из файлов Outlook OLM

Вы можете получить фактические данные MAPI‑сообщения из хранилища электронной почты, используя метод extract_mapi_message(message_info) класса OlmStorage класс. Этот метод извлекает MAPI‑сообщение из хранилища на основе предоставленного message_info.

Пример кода ниже демонстрирует, как использовать этот метод:

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)

for message_info in folder.enumerate_messages():
    msg = olm.extract_mapi_message(message_info)

Извлечение сообщений Outlook из OLM‑файлов по идентификатору

Чтобы получить доступ к данным MAPI‑сообщения, вы можете использовать свойство entry_id для получения уникального идентификатора (Entry ID) сообщения, используя OlmMessageInfo класс. Затем вы можете использовать метод extract_mapi_message(id) класса OlmStorage класс, принимающий Entry ID в качестве параметра для получения MAPI‑сообщения, связанного с этим конкретным идентификатором. Пример кода ниже демонстрирует использование этих возможностей:


import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage.from_file(fileName)
folder = olm.get_folder("Inbox", True)

for message_info in folder.enumerate_messages():
    msg = olm.extract_mapi_message(message_info.entry_id)

Управление структурой папок OLM

Получение путей к папкам в файлах Outlook OLM

Aspose.Email позволяет получить иерархический путь или расположение папки внутри Outlook OLM‑файла. API предоставляет свойство path класса OlmFolder класс, возвращающий путь к папке. Пример кода ниже демонстрирует использование этого свойства:

import aspose.email as ae


def print_path(storage, folders):
    for folder in folders:
        # print the current folder path
        print(folder.path)

        if folder.sub_folders:
            print_path(storage, folder.sub_folders)


fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
print_path(olm, olm.folder_hierarchy)

Подсчёт элементов в папках Outlook OLM

Aspose.Email предоставляет возможность подсчитать общее количество сообщений электронной почты, содержащихся в определённой папке Outlook OLM‑файла. Свойство message_count класса OlmFolder класс возвращает количество всех элементов (сообщений) в конкретной папке OLM‑файла. Пример кода ниже демонстрирует использование этого свойства:

import aspose.email as ae


def print_message_count(folders):
    for folder in folders:
        print(f"Message Count [{folder.name}]: {folder.message_count}")


fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
print_message_count(olm.folder_hierarchy)

Получить общее количество элементов в файлах Outlook OLM

Метод get_total_items_count() класса OlmStorage класс возвращает общее количество элементов сообщений, содержащихся в хранилище OLM, как показано в примере кода ниже:

import aspose.email as ae

fileName = "my.olm"
olm = ae.storage.olm.OlmStorage(fileName)
count = olm.get_total_items_count()

Управление категориями Outlook

Получение цветов категорий Outlook

С помощью Aspose.Email вы можете легко извлекать и использовать цвета категорий, связанных с элементами Outlook, хранящимися в OLM‑файлах. OlmItemCategory класс позволяет получать имена категорий и их соответствующие цвета в шестнадцатеричном формате. OlmStorage класс содержит метод GetCategories() для получения списка категорий из хранилища OLM. Реализовав приведённый ниже пример кода, вы сможете без труда получить все использованные категории из OML‑файла хранения и получить название категории вместе с её цветом.

with OlmStorage.FromFile("storage.olm") as olm:
    categories = olm.GetCategories()
    
    for category in categories:
        print(f"Category name: {category.Name}")
        
        # Color is represented as a hexadecimal value: #rrggbb
        print(f"Category color: {category.Color}")

Кроме того, вы можете получить цвет категории, связанный с конкретными сообщениями, перебирая сообщения в папке и получая соответствующий цвет категории по её имени.

for msg in olm.EnumerateMessages(folder):
    if msg.Categories is not None:
        for msgCategory in msg.Categories:
            print(f"Category name: {msgCategory}")
            categoryColor = next((c.Color for c in categories if c.Name.lower() == msgCategory.lower()), None)
            if categoryColor is not None:
                print(f"Category color: {categoryColor}")