我正在尝试编写一个监控IMAP邮箱的程序,并自动将每个新传入的邮件复制到“存档”文件夹中。我正在使用imaplib2来实现IDLE命令。这是我的基本计划:
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()。但是来自recent()的响应对我没有意义,在第一条消息之后我从未收到任何其他通知。
任何人都知道怎么做?
答案 0 :(得分:1)
请参阅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
答案 1 :(得分:1)
我发现最近的()有点模糊(这是IMAP模糊,而不是imaplib2)。似乎最好在空闲之前和之后保留消息号列表,区别在于新消息。
然后使用fetch(messages,“UID”)来获取消息uid。