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é?

È stato utile?

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 [

] << parziale >>

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top