我正在使用此脚本从收件箱中删除邮件。
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()似乎不起作用,但我不确定还要做什么。
答案 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)