2011-12-05 39 views
0

所以我有這個類,開始是這樣的:獲取新信息的電子郵件郵件文件夾多次

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

如果你找到答案,你可以發佈一個答案給你自己的問題。這樣,如果有其他人遇到類似的問題,他們會知道什麼工作。 – Wilduck

+0

好吧。我的聲譽太低了。必須等待8小時... –

回答

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文檔ATT它did'nt似乎是顯而易見的是什麼檢查方法沒有。它只會說「服務器上的檢查點郵箱」。所以我沒有想到它會解決我的問題。

相關問題