2010-10-15 11 views
0

ma tâche consiste à récupérer un ensemble de messages depuis GMail via POP3 (pas IMAP). Je peux faire RETR MSG #, et il est interdit de supprimer.ID de message dans un protocole POP3

Fetchmail et procmail essayent constamment de télécharger un même ensemble de nouveaux messages non lus (cette partie va à ServerFault). Y at-il un en-tête spécialement conçu pour distinguer les messages lus précédemment? Ou je devrais faire la somme de contrôle du corps du message/sujet/date?

Répondre

4

Le protocole POP3 ne prend pas en charge un indicateur de type lecture/affichage. Certains serveurs supportent un en-tête non-standard comme X-Seen qui agit comme un drapeau de lecture, vous devrez utiliser le TOP pour obtenir les en-têtes d'un message et voir s'il a été défini (bien plus pour déterminer s'il est encore là).

Il est supposé être au client de couvrir les drapeaux de lecture dans POP3, mais la bonne nouvelle est que vous n'avez pas besoin de faire une somme de contrôle, utilisez simplement le UIDL qui vous donnera une liste non changeante, unique Les identifiants des messages dans la boîte de réception, ou s'ils sont appelés avec un message #, vous donneront l'ID unique du message dans la boîte aux lettres (puisque vous ne pouvez pas garantir la position du message dans la boîte aux lettres suppression).

+0

J'ai un problème connexe, qui doit être en mesure de travailler avec des messages dans une boîte aux lettres d'autres clients accèdent. Comment un client peut-il supprimer un message en toute sécurité lorsque le seul identificateur est le numéro de message, et cela peut changer sans avertissement? En d'autres termes, si vous voulez supprimer le message n ° 1, mais qu'un autre client supprime ce message, vous supprimez en fait le message n ° 2 et vous n'en auriez aucune idée. Quelle est la bonne façon de gérer cela? –

+0

Vous voudriez obtenir le 'UIDL' à l'heure d'affichage (qui peut être recherché par le message #) et supprimer par cela au lieu de' message # '. Vous pourriez essayer de croiser la référence 'message #' à 'UIDL' au moment de l'effacement, mais il est sujet à la même faille. Si 'UIDL' n'est pas une option, vous devrez comparer ou en-têtes (ce qui couvre l'identificateur de message supposément unique, les dates d'envoi/reçues, le titre, etc.) et la taille des messages pour réduire le doute. – Rudu

-1

Essayez de contrôler les messages avec le message-id

Message message ; 
.... 
String messageId = message.getHeader("message-id")[0]; 
Questions connexes