【问题标题】:Reading mail from mbox folder using python使用 python 从 mbox 文件夹中读取邮件
【发布时间】:2012-02-15 03:15:12
【问题描述】:

我想从 mbox 文件中读取邮件并基于此执行一些操作。我不想编写/修改 mbox 文件,但它会被另一个进程修改(主要是添加新邮件)。

我正在阅读此文档。 http://docs.python.org/library/mailbox.html#mailbox.mbox

但我不明白以下内容

  1. 我应该在阅读邮件之前调用 lock() 吗? (我不是写信给 文件)
  2. 反正我可以在其他进程时得到回调吗 (雷鸟)修改文件?
  3. 文件中的更改是否反映在 mbox 对象中?我的意思是,在创建 mbox 对象后,如果将新邮件添加到文件中,我会使用该对象访问邮件吗?还是应该重新创建一个新对象?

PS:我不允许安装雷鸟的任何插件:(

【问题讨论】:

  • 您在“邮箱”文档中看到这句话了吗? “每次请求消息时,都会根据邮箱的当前状态生成一个新的表示(通常是消息实例)。”
  • @jrennie 我认为当前状态是指通过对象更改的状态,而不是文件更改。我尝试添加新邮件并检查长度,它是相同的。当我再次创建一个新对象时,我可以看到添加的内容。

标签: python mbox


【解决方案1】:
  1. 不修改 mbox 时无需调用Mailbox.lock()。引用Mailbox.lock() 的文档(强调我自己的):

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

  2. 文件更改通知超出邮箱模块的范围。在 Linux 系统上,您可以使用 pyinotify 来获得此功能。

  3. 这在documentation也有回答:

    默认的邮箱迭代器迭代消息表示,而不是键作为 默认字典迭代器可以。此外,在迭代期间修改邮箱 是安全且定义明确的。创建迭代器后添加到邮箱的消息 迭代器不会看到。之前从邮箱中删除的邮件 迭代器产生它们将被静默地跳过,尽管使用来自迭代器的键 如果相应的消息随后出现,可能会导致 > 一个 KeyError 异常 删除。

    简而言之,您需要在 mbox 文件更改后创建一个新的Mailbox 实例。

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 2019-12-13
    • 2019-12-12
    • 2010-10-28
    • 2018-06-13
    • 2013-04-15
    • 2020-07-24
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多