2013-03-13 5 views
1

J'écris un script qui récupère tous les e-mails d'une adresse e-mail via IMAP.Identifiant de boîte aux lettres IMAP

Actuellement, je récupère chaque dossier (boîte aux lettres) et enregistre l'UID le plus élevé (récupéré) de chaque dossier, donc je commence la récupération au plus haut UID + 1 la prochaine fois que je synchronise. Mais que faire si un seul dossier est supprimé et quelqu'un crée un nouveau dossier avec le même nom. L'UID est juste pour un seul dossier et sera réinitialisé.

Je ne peux pas sembler trouver un moyen de trouver un identifiant unique d'une boîte aux lettres (dossier).

Répondre

1

C'est exactement ce UIDVALIDITY est pour. Ceci est un "cookie" qui identifie une incarnation d'un nom de dossier. Il est envoyé à vous lorsque vous SELECT un dossier. Vous devriez l'enregistrer, et si elle change, vous jetez tout ce que vous savez sur ce dossier.

Voir la RFC 3501 pour plus de détails si vous en avez besoin.

+0

Donc UIDVALIDITY retourne une chaîne ou un int qui donnera un identifiant UNIQUE pour le dossier? – Floris

+0

C'est un entier, oui, qui est supposé changer si c'est une nouvelle incarnation d'un dossier avec le même nom. – Max

0

Je vous recommande de stocker la mail size correspondant également à uids. Dans le cas où l'uid maximum stocké sur votre cient est plus grand que celui renvoyé par le serveur (cas de suppression de dossier), comparez l'uid et la taille du courrier correspondant.

l'idée d'aller chercher les mails de UID+1 lui-même a obtenu soo beaucoup de défauts .... si un certain ensemble de messages a été supprimée du serveur via une autre interface (web/pop) ou par un autre client, puis comment allez-vous le synchroniser sur le client imap ??? Je suppose que vous appelez une commande uid fetch pour cela ... et si vous faites cela, vous pouvez comparer les uids et la taille du courrier pour la vérification croisée.

et pour de meilleurs résultats, vous pouvez utiliser le concept de UIDVALIDITY aussi. Mais vous ne pouvez pas compter beaucoup sur cela depuis que j'ai vu certains des serveurs imap qui ne l'utilisent pas correctement.

Questions connexes