So I have this class that starts like this:
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
It’s working great for fetching messages like this:
mail = emailreader(server, port, username, password)
emails = mail._get_raw_emails()
But if I send a new message to the e-mail address I can’t just run the last line again, the new mail won’t show up until I delete the mail object and start all over again. Why is that? Do I have to reset the last search or something?
Edit: I think I found the solution. I had to do a imap_server.check() also…
I found the solution. I had to execute a method that’s called check() from my imap object whenever new mails may have arrived. This is my “new” _get_raw_emails() method:
It may be because I’m not a native english speaker, but when I looked att the documentation for imaplib it did’nt seem obvious what the check method did. It only says “Checkpoint mailbox on server.” So I did’nt thought that it would solve my problem.