python mbox 解锁无效

python mbox unlock not working

我正在使用此脚本从收件箱中删除邮件。

if(not debug):
  logging.debug("removing messages")
  all_mail.lock()
  for message in all_mail:
    all_mail.remove(message)
  all_mail.flush()
  all_mail.unlock()
all_mail.close()

在运行这个脚本执行一次后,我注意到在/var/spool/mail中还有一个锁定文件。如果我再次尝试 运行 脚本,我会得到一个相当可预测的异常:mailbox.ExternalClashError: dot lock unavailable

所以 all_mail.unlock() 似乎不起作用,但我不确定还可以做什么。

您的脚本应该在 all_mail.remove(message) 处引发异常,因为它永远不会到达 unlock 调用。 mbox 与普通字典的重要区别,这是你的问题:

The default Mailbox iterator iterates over message representations, not keys as the default dictionary iterator does.

这意味着 for message in all_mail: 使 msg 包含 mboxMessage 而不是键,并且 remove 引发 KeyError 异常。

修复很简单:

for message in all_mail.iterkeys():
    all_mail.remove(message)