多次获取新的电子邮件邮件文件夹

时间:2011-12-05 21:02:20

标签: python imap

所以我有这样的课程:

class emailreader():
    def __init__(self, server, port, username, password):
        self.imap_server = imaplib.IMAP4_SSL(server, int(port))
        self.imap_server.login(username, password)
        self.imap_server.select('INBOX')

    def _get_raw_emails(self):
        messages = []
        typ, data = self.imap_server.search(None, 'UnSeen')
        for num in data[0].split():
            typ, data = self.imap_server.fetch(num, '(RFC822)')
            messages.append(data[0][1])
        return messages

它非常适合提取这样的消息:

mail = emailreader(server, port, username, password)
emails = mail._get_raw_emails()

但是,如果我向电子邮件地址发送新邮件,我不能再次运行最后一行,新邮件将不会显示,直到我删除邮件对象并重新开始。这是为什么?我是否必须重置上次搜索或其他内容?

编辑:我想我找到了解决方案。我不得不做一个imap_server.check()...

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。每当新邮件到达时,我必须执行一个从我的imap对象调用check()的方法。这是我的“新”_get_raw_emails()方法:

    def _get_raw_emails(self):
        messages = []
        self.imap_server.check() # Fetch new mails since object is created.
        typ, data = self.imap_server.search(None, 'UnSeen')
        for num in data[0].split():
            typ, data = self.imap_server.fetch(num, '(RFC822)')
            messages.append(data[0][1])
        return messages

可能是因为我不是母语为英语的人,但是当我查看imaplib的文档时,检查方法的作用似乎并不明显。它只说“服务器上的检查点邮箱”。所以我没想到会解决我的问题。