Найти новые сообщения, добавленные в почтовый ящик imap с момента последней проверки с помощью python imaplib2?

StackOverflow https://stackoverflow.com/questions/2047067

Вопрос

Я пытаюсь написать программу, которая отслеживает почтовый ящик IMAP и автоматически копирует каждое новое входящее сообщение в папку "Архив".Я использую imaplib2, который реализует команду IDLE.Вот моя базовая программа:

M = imaplib2.IMAP4("mail.me.com")
M.login(username,password)
lst = M.list()
assert lst[0]=='OK'
for mbx in lst[1]:
    print "Mailboxes:",mbx

def process(m):
    print "m=",m
    res = M.recent()
    print res


M.select('INBOX')
M.examine(mailbox='INBOX',callback=process)
while True:
    print "Calling idle..."
    M.idle()
    print "back from idle"
M.close()
M.logout()

Он правильно печатает почтовые ящики и запускает process(), когда с почтовым ящиком происходит первое изменение.Но ответ от recent () не имеет для меня смысла, и после первого сообщения я никогда не получаю никаких других уведомлений.

Кто-нибудь знает, как это сделать?

Это было полезно?

Решение

Смотрите пример и ссылки в python-imap-простаивает-с-imaplib2.Модуль предполагает потоковую обработку, вам следует обратить внимание на синхронизацию событий.

Пример предполагает синхронизацию с событиями и оставляет обработку почты читателю:

# The method that gets called when a new email arrives. 
# Replace it with something better.
def dosync(self):
    print "Got an event!"

Извлекая подсказку из вопроса, "что-нибудь получше" может быть:

# Replaced with something better.
def dosync(self):
    print "Got an event!"
    res = self.M.recent()
    print res

Другие советы

Я нахожу, что recent() немного расплывчат (это неопределенность IMAP, а не imaplib 2).Кажется, лучше вести список номеров сообщений до и после простоя, и разница заключается в новых сообщениях.

Затем используйте fetch(сообщения, "UID"), чтобы получить uid сообщения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top