Mbox 存储文件

本文的主要目的是帮助您深入研究 mbox 格式,并为您提供可帮助您读取 mbox 文件的代码片段。您将了解如何解析 mbox 文件,以及如何访问、查看和存储它们包含的消息。

关于 Mbox 格式

mbox 格式因其悠久的历史和作为存储电子邮件消息的标准化格式而被广泛接受而具有重要意义。它是一种纯文本文件格式,允许将多封电子邮件连接并存储在一个文件中。这种格式的简单性以及跨各种电子邮件客户端和系统的兼容性使其成为归档和传输电子邮件数据的流行选择。此外,mbox 格式保留重要的元数据,例如发件人、收件人、主题和时间戳,确保保留消息的完整性。

与此格式兼容的最流行的电子邮件客户端是:

  • Thunderbird - 一种广泛使用的开源电子邮件客户端,使用 mbox 格式存储电子邮件。它将文件夹中的所有消息存储在扩展名为“.mbox”的单个文件中。为了方便用户和易于管理,为邮箱内的每个文件夹创建单独的文件。它允许用户无缝导入和导出 mbox 文件,从而轻松在 Thunderbird 和其他 mbox 兼容应用程序之间迁移电子邮件数据。

  • Apple Mail - macOS 和 iOS 设备上的默认电子邮件客户端,提供对 mbox 格式的内置支持。它允许用户通过将每个邮箱文件夹存储为单独的文件来轻松访问、导入或传输 Apple Mail 中的 mbox 文件。 Apple Mail 文件通常以扩展名“.mbox”或“.mbox.plist”存储。

  • Evolution - 一款功能丰富的 Linux 电子邮件和个人信息管理应用程序,也支持 mbox 格式。它允许用户导入 mbox 文件,从而将电子邮件数据顺利集成到 Evolution 的综合平台中。

这些只是使用 mbox 格式的电子邮件客户端的几个示例。以编程方式处理此类文件时,了解格式及其在不同电子邮件客户端中的用法至关重要,因为它有助于确保电子邮件数据的兼容性和准确解析。

该格式有不同的变体,每种都有其自己的实现细节。一些常见的 mbox 格式包括“mboxrd”、“mboxo”、“mboxcl”、“mboxcl2”。这些变体主要在处理某些方面(例如消息分隔符和元数据)的方式上有所不同。使用 mbox 文件时了解这些差异非常重要,因为它们会影响电子邮件数据的兼容性和解析。

用于读取 Mbox 文件的 Python API

使用我们的 Aspose.Email for Python 库,可以轻松地在 Python 中使用 mbox 文件。这个强大且功能丰富的 API 提供了一组广泛的电子邮件处理功能,例如读取 mbox 文件、提取消息和操作电子邮件数据的能力。

值得一提的是,Aspose.Email for Python 还提供对各种 mbox 格式的全面支持,包括前面提到的那些格式。这意味着您可以无缝地使用来自不同电子邮件客户端的这些文件,无论 mbox 格式的具体实现细节如何。要利用 API 的强大功能,可以使用以下命令下载其 DLL 或从 PyPI 安装它:

> pip install Aspose.Email-for-Python-via-NET

打开 Mbox 文件

要开始使用 mbox 格式的文件,我们应该首先打开它。 Aspose.Email 库将帮助我们实现这一点。

在我们的代码中,我们将遵循以下步骤:

  • 该代码首先从 Aspose.Email 库导入所需的模块:MboxStorageReaderMboxLoadOptions 类。

  • 然后,我们创建 MboxLoadOptions 的实例来指定加载文件所需的选项。

  • 然后,我们将leaveopen设置为False,表示读取后应关闭文件,并指定UTF8作为首选文本编码。

  • 最后,我们通过调用 createreader 静态方法创建 MboxStorageReader 类的实例,并传入源文件名和 MboxLoadOptions 实例。

以下代码片段演示了如何打开 mbox 文件:

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

mbox_reader = MboxStorageReader.create_reader(file_name, mbox_load_options)

列出 Mbox 文件中的消息

由于文件已打开,我们可以探索其中存储的消息。下面的代码片段代表了从 mbox 文件列出消息的两种方法。

方法一:EnumerateMessageInfo方法

列出 mbox 文件中消息的第一种方法是使用 MboxStorageReader 类的 enumeratemessageinfo 方法。它迭代消息并查看基本消息信息,例如主题、字段从、到和日期。它还返回一个消息标识符(条目 ID),稍后使用该标识符来读取完整的消息内容。该方法具有以下特点:

  • 性能:与其他方法相比,它更快,因为它专注于读取和查看基本消息信息,避免在迭代期间解析和加载消息正文。

  • 效率:通过仅针对基本信息,最大限度地减少内存消耗和处理时间。当人们必须处理包含大量消息的大文件时,它尤其适用。

要读取、列出和查看 mbox 文件中的消息,我们将按照以下步骤操作:

  • 从 Aspose.Email 库导入所需的模块:MboxStorageReaderMboxLoadOptions 类。

  • 创建 MboxLoadOptions 类的实例。该对象将保存用于加载文件的各种选项。

  • 配置对象的属性:

    • 如果您想在读取文件后关闭该文件,请将 leftopen 设置为 False。
    • 将 Preferredtextencoding 设置为“utf-8”以指定消息内容所需的文本编码。
  • 使用 MboxStorageReader 类的 MboxStorageReader.createreader() 方法打开文件。

  • 使用 mboxreader 对象的 enumeratemessageinfo() 方法迭代文件中的每条消息,从每条消息中提取特定详细信息。在我们的示例中,它们是主题、地址、收件人和日期。

以下代码片段演示了使用 enumeratemessageinfo 方法迭代消息及其信息检索的过程。

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        print(message_info.subject)
        print(message_info.from_address)
        print(message_info.to)
        print(message_info.date)

这样,我们就可以访问主题、发件人、收件人和日期等属性并显示相关详细信息。

方法2:EnumerateMessages方法

与第一种方法不同,第二种方法旨在使用 enumeratemessages 方法直接迭代 mbox 文件中包含的 MailMessage 实例。此方法在每次迭代期间读取并加载整个消息内容,从而能够立即访问完整的电子邮件信息。以下是该方法的一些关键方面:

  • 完整性:它允许访问和处理整个消息内容,包括正文、附件、标头和其他部分。

  • 方便:当您想要对完整消息执行操作(例如将每条消息保存到单独的文件)时,此方法被证明非常有用。它通过在每次迭代期间加载整个消息内容来使过程变得更加简单,允许您执行所需的操作,而无需后续查找。

以下代码片段演示了使用 enumeratemessages 方法迭代消息并检索整个消息内容的过程。

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for eml in mbox_reader.enumerate_messages():
        eml.save(f"{eml.subject}.eml")

值得注意的是,每次迭代加载整个消息内容可能会影响性能,特别是在处理相当大的文件或大量消息时。因此,在确定最适合您情况的方法时,评估您的具体需求并考虑文件大小、消息数量以及您打算执行的操作等因素非常重要。

读取 Mbox 文件中的消息

您可能想要对 mbox 文件执行的另一种操作是读取其中包含的消息。您可以使用从枚举 MessageInfo 的第一种方法派生的字符串标识符来完成此操作。

使用 enumeratemessageinfo 方法列出消息时,每条消息都与单个 mbox 文件中的唯一标识符关联。此标识符通常表示为字符串,可以从 MboxMessageInfo 对象的 entryid 属性获取。

一旦我们获得了消息标识符,我们就可以通过以下步骤使用它来查看完整的消息内容:

  • 我们创建一个 EmlLoadOptions 的实例。该对象将包含用于加载 EML 文件的各种选项。
  • 配置属性:
    • 如果要保留 EML 文件中的嵌入消息格式,请将preserveembeddedmessageformat 设置为True。
    • 如果您想要保留 EML 文件中的 TNEF 附件,请将 preservetnefattachments 设置为 True。
  • 创建 MboxLoadOptions 的实例。该对象将保存用于加载 mbox 文件的各种选项。
  • 配置 mboxloadoptions 的属性:
    • 如果您想在读取文件后关闭该文件,请将 leftopen 设置为 False。
    • 将 Preferredtextencoding 设置为“utf-8”以指定消息内容所需的文本编码。
  • 使用 MboxStorageReader.createreader() 方法打开文件。
  • 在 foreach 循环内,我们访问每个 MboxMessageInfo 对象的 EntryId 属性,该属性表示相应消息的唯一标识符。
  • 然后,我们使用此标识符以及 MboxStorageReader 类的 ExtractMessage 方法来检索完整的消息作为 MailMessage 对象。
  • 最后,我们可以对消息执行任何所需的操作,例如将其保存到单独的 .eml 文件中。

下面的代码片段演示了如何使用字符串标识符读取单个消息:

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions
from aspose.email import EmlLoadOptions

eml_load_options = EmlLoadOptions()
eml_load_options.preserve_embedded_message_format = True
eml_load_options.preserve_tnef_attachments = True

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        eml = mbox_reader.extract_message(message_info.entry_id, eml_load_options)
        eml.save(f"{eml.subject}.eml")

这种方法的一个显着优点是,它使您能够有选择地读取和处理特定消息,而忽略其他消息。事实证明,这种灵活性在处理包含大量消息的大文件时特别有用。通过有选择地仅处理所需的消息,可以最大限度地减少不必要的计算,从而提高整体效率。

理解消息标识符在单个文件中是唯一的这一点至关重要。因此,在跨多个 mbox 文件处理消息时,有必要维护这些标识符与其相应文件之间的映射。

实用功能

Aspose.Email 库提供了多种实用功能来增强您对 mbox 文件的处理。让我们考虑其中的几个:

获取 mbox 中存储的总项目数

有一种直接的方法可以确定 mbox 文件中存储的项目(消息)总数。 使用 gettotalitemscount() 方法检索文件中存在的项目(消息)总数。

以下代码获取文件中存在的项目(消息)的总数。

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
    items_count = mbox_reader.get_total_items_count()

获取一次迭代读取的数据大小

要获取单次迭代期间读取的数据大小,您可以访问 mboxreader 对象的 currentdatasize 属性来检索当前迭代中读取的数据(消息)的大小。

以下代码循环访问文件中的每条消息。在每次迭代期间,获取当前读取的消息的大小。

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        message_size = mbox_reader.current_data_size

结论

在本文中,我们探讨了 mbox - 一种标准化且广泛接受的用于存储电子邮件的格式。它的简单性和跨各种电子邮件客户端和系统的兼容性使其成为归档和传输电子邮件数据的流行选择。我们强大的 Aspose.Email for Python 库支持该格式(包括其变体),该库允许轻松读取、提取和操作电子邮件数据。我们简单的代码片段和代码步骤提供了有关如何打开、列出和查看 mbox 文件中的消息的全面详细的说明。

您可以使用文档探索Aspose.Email的其他功能。此外,您还可以将您的疑问发布到我们的论坛

也可以看看