Получать новые почтовые папки несколько раз - PullRequest
0 голосов
/ 06 декабря 2011

Итак, у меня есть этот класс, который начинается следующим образом:

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()

Но если я отправлю новое сообщение на eадрес электронной почты. Я не могу просто запустить последнюю строку снова, новая почта не будет отображаться, пока я не удалю почтовый объект и не начну все сначала.Это почему?Нужно ли сбрасывать последний поиск или что-то?

Редактировать: Я думаю, что нашел решение.Я должен был также сделать imap_server.check () ...

1 Ответ

0 голосов
/ 06 декабря 2011

Я нашел решение.Мне приходилось выполнять метод, который называется check (), из моего объекта imap всякий раз, когда приходили новые письма.Это мой «новый» метод _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, не показалось очевидным, чтометод проверки сделал.Он только говорит «Почтовый ящик контрольной точки на сервере».Так что я не думал, что это решит мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...