obtenir email non lu contenu, sans affecter l'état non lu [dupliquer]
Question
Cette question a déjà une réponse ici:
- Fetch un email avec imaplib mais ne marque pas comme SEEN 3 réponses
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?
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 [
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()