ottenere e-mail messaggi non letti, senza influenzare lo stato non letto [duplicare]
Domanda
Questa domanda ha già una risposta qui:
In questo momento la sua una scatola di Gmail ma prima o poi lo voglio per scalare.
Voglio sincronizzare una copia di una casella postale personale dal vivo (posta in arrivo e in uscita) da qualche altra parte, ma io non voglio influenzare lo stato unread
di eventuali messaggi non letti.
il tipo di accesso sarà rendere questo più facile? Non riesco a trovare alcuna informazione se IMAP si ripercuoteranno sullo stato letto, ma sembra che posso reimpostare manualmente un messaggio a letto. Pop, per definizione, non influenza lo stato non letto, ma nessuno sembra usare pop per accedere al proprio gmail, perché?
Soluzione 5
se aiuta nessuno, GAE consente di ricevere email come richiesta HTTP , quindi per ora sto solo inoltrare messaggi di posta elettronica lì.
Altri suggerimenti
Nel mondo IMAP, ogni messaggio ha bandiere. È possibile impostare le singole bandiere su ogni messaggio. Quando si recuperare un messaggio, in realtà è possibile leggere il messaggio, senza applicare la \ Visto bandiera.
La maggior parte dei client di posta elettronica si applicano la \ Visto bandiera quando il messaggio viene letto. Quindi, se il messaggio è già stato letto, al di fuori della vostra applicazione, sarà necessario rimuovere il flag \ Seen.
Proprio come FYI ... qui è la parte rilevante riguardo le bandiere dei RFC:
Un flag di sistema è un nome di bandiera che è pre-definito in questo specifica. Tutti i flag di sistema iniziano con "\". certo sistema bandiere (\ cancellati e \ visto) hanno semantica speciali descritto altrove. Le bandiere di sistema attualmente definiti sono:
\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.
C'è un'opzione .PEEK sul comando FETCH in IMAP che non esplicitamente impostare il flag / Visto.
il comando FETCH nella RFC 3501 e scorrere verso il basso un po 'alla pagina 57 o cercare "BODY.PEEK".
È necessario specificare la sezione quando si utilizza BODY.PEEK. Le sezioni sono spiegate in IMAP Fetch comando documentazioni sotto il corpo [
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: Volevo risolvere risposta data Gene Wood ma non è stato consentito perché modifica era più piccolo di 6 caratteri (BODY.PEEK -> BODY.PEEK [])
Nessuno utilizza POP perché tipicamente hanno vogliono la funzionalità supplementare di IMAP, come ad esempio lo stato di verifica dei messaggi. Quando questa funzionalità è sempre solo nel vostro senso e ha bisogno di soluzioni alternative, credo che utilizzando la soluzione migliore di POP -!)
Per seguire sulla risposta di Dan Goldstein sopra , in python la sintassi da utilizzare l'opzione ".PEEK" sarebbe quello di chiamare IMAP4.fetch e passarlo" BODY.PEEK "
Per applicare questo l'esempio nella pitone docs :
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()