python mbox解锁不工作

时间:2017-08-24 07:32:42

标签: python email mbox

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

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()似乎不起作用,但我不确定还要做什么。

1 个答案:

答案 0 :(得分:0)

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

  

默认的邮箱迭代器迭代消息表示,而不是键作为默认字典迭代器。

这意味着for message in all_mail:使msg包含mboxMessage而不是密钥,而remove会引发KeyError例外。

修复很简单:

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