Question

    

Cette question a déjà une réponse ici:

         

En ce moment sa boîte gmail, mais tôt ou tard, je veux à l'échelle.

Je veux synchroniser une copie d'une boîte aux lettres personnelle en direct (boîte de réception et d'envoi) quelque part ailleurs, mais je ne veux pas affecter l'état de unread des messages non lus.

quel type d'accès fera ce plus facile? Je ne peux trouver aucune information si IMAP affectera l'état de lecture, mais il semble que je peux réinitialiser manuellement un message à non lu. Pop, par définition, ne modifie pas l'état non lu, mais personne ne semble utiliser pop pour accéder à leur gmail, pourquoi?

Était-ce utile?

La solution 5

si elle aide à tout le monde, GAE vous permet de email comme demande HTTP , donc pour l'instant je suis juste transmettre des courriels il.

Autres conseils

Dans le monde IMAP, chaque message a des drapeaux. Vous pouvez définir les indicateurs individuels sur chaque message. Lorsque vous allez chercher un message, il est en fait possible de lire le message, sans appliquer le drapeau \ Seen.

La plupart des clients de messagerie appliqueront le drapeau \ Seen quand le message est lu. Ainsi, si le message a déjà été lu, en dehors de votre application, vous devrez supprimer le \ Seen.

Tout comme FYI ... voici la partie pertinente sur les drapeaux des RFCs:

Un indicateur système est un nom de drapeau qui est pré-défini dans le présent    spécification. Tous les drapeaux du système commencent par « \ ». système certain    drapeaux (\ supprimés et \ Vu) ont décrit une sémantique spéciale    autre part. Les drapeaux du système actuellement définis sont:

    \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.

Il y a une option .PEEK sur la commande FETCH dans IMAP qui définira explicitement pas le / Seen.

Regardez la commande FETCH dans la RFC 3501 et défiler vers le bas un peu à la page 57 ou recherchez "BODY.PEEK".

Vous devez spécifier la section lorsque vous utilisez BODY.PEEK. Les articles sont expliqués dans Fetch dOCUMENTATIONS sous le corps [

] << partielle >>

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: Je voulais corriger réponse donnée Gene Bois mais n'a pas été autorisé parce que modifier est plus petite que 6 caractères (BODY.PEEK -> BODY.PEEK [])

Personne n'utilise POP parce que généralement ils veulent la fonctionnalité supplémentaire de IMAP, tels que l'état du message de suivi. Lorsque cette fonctionnalité est seulement obtenir de votre manière et a besoin de solutions de contournement, je pense en utilisant votre meilleur pari de POP -)

Pour donner suite à la réponse de Dan Goldstein ci-dessus , en python la syntaxe à utiliser l'option ".PEEK" serait appeler IMAP4.fetch et de le transmettre" BODY.PEEK "

Pour appliquer ce l'exemple dans le python 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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top