使用Python读取mbox文件夹中的邮件

4 投票
1 回答
2809 浏览
提问于 2025-04-17 10:42

我想从一个mbox文件中读取邮件,并根据这些邮件做一些操作。我不想去写或修改这个mbox文件,因为它会被其他程序修改(主要是添加新邮件)。

我在看这个文档。http://docs.python.org/library/mailbox.html#mailbox.mbox

但是我有以下几个不明白的地方:

  1. 在读取邮件之前,我需要调用lock()吗?(我并不打算写入文件)
  2. 有没有办法让我在其他程序(比如thunderbird)修改文件时收到通知?
  3. 文件中的变化会在mbox对象中反映出来吗?我的意思是,当我创建了mbox对象后,如果文件中添加了一封新邮件,我还能通过这个对象访问到这封邮件吗?还是说我需要重新创建一个对象?

附注:我不能安装任何thunderbird的插件 :(

1 个回答

2
  1. 如果你不打算修改邮箱里的内容,就不需要调用 Mailbox.lock()。这是 Mailbox.lock() 文档中的一句话(我强调的部分):

    在对邮箱内容进行任何修改之前,你应该始终锁定邮箱。

  2. 文件变化的通知不在邮箱模块的功能范围内。在Linux系统上,你可以使用 pyinotify 来实现这个功能。

  3. 这个问题在 文档 中也有回答:

    默认的邮箱迭代器是遍历消息的表示,而不是像默认字典迭代器那样遍历键。此外,在迭代过程中修改邮箱是安全且明确的。在创建迭代器后添加到邮箱的消息,迭代器是看不到的。在迭代器返回消息之前从邮箱中删除的消息会被悄悄跳过,不过如果你使用了一个迭代器中的键,而对应的消息随后被删除,可能会导致出现 > KeyError 异常。

    简单来说,在 mbox 文件发生变化后,你需要创建一个新的 Mailbox 实例。

撰写回答