@ber_enot
Веб-разработчик, Vue.js / Node.js

Как почтовый клиент понимает, какие письма нужно загрузить?

Пишу небольшой почтовый клиент на Python, работающий по IMAP, для определенных целей.
Столкнулся с такой проблемой: поиск по Message-ID не работает (точнее не всегда работает).

Нужно на компе каким-то образом сохранять информацию о том, какие письма уже загружены, и загружать только новые. Как это можно сделать? UID может меняться при удалении писем, так что он - не вариант.
  • Вопрос задан
  • 576 просмотров
Решения вопроса 1
Храните Folder+UID и хэш от заголовков сообщения. В заголовках помимо Message-ID есть еще и идентификаторы очередей, поэтому вероятность, что совпадут заголовки целиком практически отсутствует.
Если письмо переносится в другую папку и меняется Folder+UID - берите хэш от заголовков, и ишите нет ли письма с другим Folder+UID с таким же хэшем, если есть, то считайте дублем.

Пропавшие Folder+UID помечайте как удаленные и убивайте по завершении сеанса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Вот этот код отображает только новые, т.е. еще не прочитанные, письма
def get_list_mail():
    server = imaplib.IMAP4_SSL(server_imap, port_imap)
    server.login("*****@mail.ru", password)
    server.select()
    result, ids = server.search(None, '(UNSEEN)')
    print "New emails with your email in TO is %d" % len(ids[0].split())
    for id in ids[0].split():
        subject = server.fetch(id,
                               '(BODY.PEEK[HEADER.FIELDS (SUBJECT)])')[1][0][1].strip()
        print "\t" + quopri.decodestring(subject.encode('utf-8')).decode('utf-8')
    server.close()
    server.logout()
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
в папку перемещай
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы