管理 Outlook for Mac OLM 文件

OLM(Outlook for Mac Archive)是与 Microsoft Outlook for Mac 关联的文件格式。它用于归档和存储电子邮件、联系人、日历项、任务以及 Outlook 在 Mac 电脑上的其他数据。OLM 文件作为备份或归档格式,允许用户将 Outlook for Mac 数据保存以备将来参考或迁移。需要注意的是,OLM 文件仅适用于 Outlook for Mac,无法与 Windows 上 Outlook 使用的 PST(个人存储表)文件格式兼容。如果需要在不同平台之间传输 Outlook 数据,转换工具将非常有用。Aspose.Email 提供了包括打开、读取等功能的工具,以便处理 OLM 文件。

打开 Outlook OLM 文件

OLM 格式文件可以通过两种方式打开:

  • 使用构造函数
  • 使用静态 ‘from_file’ 方法

使用 Python 构造函数打开 Outlook OLM 文件

要打开文件,请调用 OlmStorage 类并将完整文件名或流作为参数传入:

import aspose.email as ae

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

使用 Python 的静态方法 FromFile 打开 OLM 文件

要打开文件,请使用该类的静态方法 ‘from_file’。 OlmStorage 类并将完整文件名或流作为参数传入:

import aspose.email as ae

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

OLM 文件中的文件夹和邮件管理

递归访问文件夹结构

Aspose.Email API 允许使用 print_all_folders 函数可视化并展示从 OLM 文件检索的文件夹层次结构。该函数接受该类的 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 也可以通过该类的 get_folders() 方法直接访问 OLM 文件的文件夹结构。 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 的方式表示电子邮件消息。它提供对邮件的众多属性和细节的访问,便于更高级和专门的处理。

以下代码示例演示如何使用 enumerate_messages() 提取基本邮件主题,以及使用 enumerate_mapi_messages() 将详细邮件保存为 .msg 文件,以从 Outlook OLM 文件中提取信息并保存。

使用 ’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 文件提取电子邮件

您可以使用该类的 extract_mapi_message(message_info) 方法从电子邮件存储中检索实际的 MAPI 消息数据。 OlmStorage 类。此方法根据提供的 message_info 从存储中提取 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)

通过标识符从 OLM 文件提取 Outlook 消息

要访问 MAPI 消息数据,您可以使用 entry_id 属性获取消息的唯一标识符(Entry ID),通过该类的 OlmMessageInfo 类。然后,您可以使用该类的 extract_mapi_message(id) 方法 OlmStorage 类,传入入口 ID 作为参数,以检索与该入口 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,您可以轻松检索并利用存储在 OLM 文件中的 Outlook 项目类别关联的类别颜色。该 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}")