получайте непрочитанное содержимое электронной почты, не влияя на состояние непрочитанности [дубликат]

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

Вопрос

Прямо сейчас это ящик gmail, но рано или поздно я хочу, чтобы он масштабировался.

Я хочу синхронизировать копию живого личного почтового ящика (входящие и исходящие) где-нибудь в другом месте, но я не хочу влиять на unread состояние любых непрочитанных сообщений.

какой тип доступа сделает это проще всего?Я не могу найти никакой информации, повлияет ли IMAP на состояние чтения, но, похоже, я могу вручную сбросить сообщение на непрочитанное.Pop по определению не влияет на непрочитанное состояние, но, похоже, никто не использует pop для доступа к своему gmail, почему?

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

Решение 5

если это кому-то поможет, GAE позволяет вам получать электронную почту в виде HTTP-запроса, так что пока я просто пересылаю туда электронные письма.

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

В мире IMAP каждое сообщение имеет флаги.Вы можете установить отдельные флаги для каждого сообщения.Когда вы извлекаете сообщение, на самом деле его можно прочитать, не применяя флаг \Seen .

Большинство почтовых клиентов будут применять флаг \Seen при чтении сообщения.Итак, если сообщение уже было прочитано за пределами вашего приложения, то вам нужно будет снять флаг \Seen .

Просто к вашему сведению ... вот соответствующая часть о флагах из RFC:

Системный флаг - это имя флага, которое предварительно определено в этой спецификации .Все системные флаги начинаются с "\".Определенная система флаги (\Удаленные и \Просмотренные) имеют особую семантику, описанную в другом месте.Определенными в данный момент системными флагами являются:

    \Seen
       Message has been read

    \Answered
       Message has been answered

    \Flagged
       Message is "flagged" for urgent/special attention

    \Deleted
       Message is "deleted" for removal by later EXPUNGE

    \Draft
       Message has not completed composition (marked as a draft).

    \Recent
       Message is "recently" arrived in this mailbox.  This session
       is the first session to have been notified about this
       message; if the session is read-write, subsequent sessions
       will not see \Recent set for this message.  This flag can not
       be altered by the client.

       If it is not possible to determine whether or not this
       session is the first session to be notified about a message,
       then that message SHOULD be considered recent.

       If multiple connections have the same mailbox selected
       simultaneously, it is undefined which of these connections
       will see newly-arrived messages with \Recent set and which
       will see it without \Recent set.

Существует .Опция PEEK в команде FETCH в IMAP, которая явно не устанавливает флаг / Seen .

Посмотрите на команда ВЫБОРКИ в RFC 3501 и прокрутите немного вниз до страницы 57 или найдите "ОСНОВНОЙ ТЕКСТ.ПРОСМОТР".

Вам необходимо указать раздел, когда вы используете BODY.PEEK.Разделы объясняются в Команда выборки IMAP документация в разделе "ТЕЛО"[<section>]<<partial>>

import getpass, imaplib

M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(BODY.PEEK[])')
    print 'Message %s\n%s\n' % (num, data[0][5])
M.close()
M.logout()

PS:Я хотел исправить данный ответ Джин Вуд но не было разрешено, потому что редактирование было меньше 6 символов (ТЕЛО.ПРОСМОТР -> BODY.PEEK[])

Никто не использует POP, потому что обычно они хотеть дополнительные функции IMAP, такие как отслеживание состояния сообщения.Когда эта функциональность только мешает вам и нуждается в обходных путях, я думаю, что использование POP - ваш лучший выбор!-)

Чтобы следить за Ответ Дэна Голдштейна выше, в python синтаксис для использования опции ".PEEK" состоял бы в вызове IMAP4.выборка и передай это " .ТЕЛО.ЗАГЛЯНУТЬ"

Чтобы применить это к примеру в документы на python :

import getpass, imaplib

M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(BODY.PEEK)')
    print 'Message %s\n%s\n' % (num, data[0][5])
M.close()
M.logout()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top