所以我有这样的课程:
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()...
答案 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的文档时,检查方法的作用似乎并不明显。它只说“服务器上的检查点邮箱”。所以我没想到会解决我的问题。