我试图写一个程序,监视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()

它打印正确的邮箱,并且当第一改变发生到邮箱运行过程()。但是,从最近的响应()是没有意义的我,第一个消息后,我从来没有得到任何其他通知。

任何人都知道如何做到这一点?

有帮助吗?

解决方案

请参阅例如,并引用蟒-IMAP -idle与 - 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

其他提示

我发现,最近的()是一个有点模糊(这是一个IMAP模糊,不imaplib2)。似乎更好地保持消息编号的列表之前和之后空闲,并且不同的是新的消息。

然后,使用取(消息, “UID”),以获得所述消息的UID。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top