我正在尝试编写一个程序,该程序监视IMAP邮箱并自动将每个新收到的邮件复制到“存档”文件夹中。我正在使用实现IDLE命令的imaplib2。这是我的基本程序:
M = imaplib2.IMAP4("mail.me.com") M.login(username,password) lst = M.list() assert lst[0]=='OK' for mbx in lst[1]: print "Mailboxes:",mbx def process(m): print "m=",m res = M.recent() print res M.select('INBOX') M.examine(mailbox='INBOX',callback=process) while True: print "Calling idle..." M.idle() print "back from idle" M.close() M.logout()
当邮箱发生第一次更改时,它将正确打印邮箱并运行process()。但是last()的响应对我来说没有意义,并且在收到第一条消息后,我再也没有收到任何其他通知。
有人知道怎么做吗?
请参阅python-imap-idle-with-imaplib2中的示例和参考。该模块涉及线程,您应注意事件同步。
该示例建议与事件同步,并将邮件处理留给阅读器:
# The method that gets called when a new email arrives. # Replace it with something better. def dosync(self): print "Got an event!"
从问题中暗示,“更好的东西”可以是:
# Replaced with something better. def dosync(self): print "Got an event!" res = self.M.recent() print res