obtener el correo electrónico mensajes no leídos, sin afectar el estado sin leer [duplicar]
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- Fetch un correo electrónico con imaplib pero no marcarlo como VISTO 3 respuestas
En este momento es un cuadro de Gmail pero tarde o temprano lo quiero a escala.
Deseo sincronizar una copia de un buzón personal en vivo (carpetas Entrada y Salida) en otro lugar, pero no quiero afectar al estado unread
de los mensajes no leídos.
¿qué tipo de acceso hará que esta más fácil? No puedo encontrar ninguna información si IMAP afectarán al estado de leer, pero parece que puedo restablecer manualmente un mensaje a leer. Pop, por definición, no afecta el estado sin leer pero nadie parece usar emergente para acceder a su Gmail, ¿por qué?
Solución 5
si ayuda a nadie, GAE le permite recibe correo electrónico como una petición HTTP, así que por ahora sólo estoy reenvío de mensajes de correo electrónico allí.
Otros consejos
En el mundo IMAP, cada mensaje tiene banderas. Puede establecer las banderas individuales en cada mensaje. Al buscar un mensaje, en realidad es posible leer el mensaje, sin aplicar el visto \ bandera.
La mayoría de los clientes de correo se aplicará lo Visto \ bandera cuando se lee el mensaje. Por lo tanto, si el mensaje ya ha sido leído, fuera de su aplicación, entonces usted tendrá que quitar la bandera \ Seen.
Al igual que para tu información ... aquí es la parte relevante acerca de las banderas de los RFC:
A la señal de sistema es un nombre de indicador que se pre-definido en este especificación. Todos los indicadores del sistema comienzan con "\". determinado sistema banderas (\ eliminados y \ SEEN) han descrito una semántica especial en otra parte. Los indicadores del sistema definidos actualmente son:
\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.
Hay una opción de .PEEK en el comando FETCH en IMAP que explícitamente no se establezca el indicador / Visto.
el comando FETCH en el RFC 3501 y desplazarse hacia abajo un poco a la página 57 o busque "BODY.PEEK".
Es necesario especificar la sección cuando se utiliza BODY.PEEK. Las secciones se explican en IMAP comando documentaciones bajo el cuerpo [
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: quería fijar respuesta dada Gene Wood pero no se le permitió porque editar fue menor de 6 caracteres (BODY.PEEK -> BODY.PEEK [])
Nadie utiliza POP, ya que por lo general quieren la funcionalidad adicional de IMAP, tales como el estado de seguimiento de mensajes. Cuando esta funcionalidad está consiguiendo solamente en su camino y necesita soluciones, creo que el uso de la mejor opción de POP -)
Para el seguimiento de la respuesta de Dan Goldstein anterior , en Python la sintaxis para utilizar la opción ".PEEK" sería llamar IMAP4.fetch y pasarlo" BODY.PEEK "
Para aplicar esto al ejemplo en el pitón 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()