Comment télécharger uniquement les nouveaux e-mails imap?
J'ai une application qui sert à l'archivage des e-mails via le protocole imap. Également dans cette application sont nombreux comptes imap qui doivent être archivés.
Dans ce moment de temps en temps l'application se connecte à un compte imap et de télécharger uniquement les nouveaux e-mails. Mon problème est que à chaque fois quand il se connecte à un compte imap, il vérifie tous les e-mails de tous les dossiers et télécharge uniquement les e-mails qui ne sont pas encore téléchargés (je stocker l'ID de Message pour tous les e-mails et télécharger uniquement les e-mails qui ont un ID de Message qui n'est pas stockée).
Je veux donc savoir si il existe une alternative pour cela, car il faut un certain temps pour vérifier tous les e-mails (pour 10-20K, il faut compter 2 à 5 minutes).
- Je utiliser l'API JavaMail pour se connecter à un compte imap.
OriginalL'auteur telebog | 2011-01-18
Vous devez vous connecter pour publier un commentaire.
La javadoc aide:
IMAPFolder fournit les méthodes:
getMessagesByUID(long start, long terme) et
getUID(Message)
Avec getUID (), vous pouvez obtenir l'UID du dernier message que vous avez déjà téléchargé. Avec getMessagesByUID vous pouvez définir ce dernier message que vous avez téléchargé au début de gamme et de regarder avec la méthode getUIDNext() pour trouver le dernier message qui pourrait être la fin de la plage.
comme je comprends la getUID(Message)-méthode, vous pouvez obtenir le véritable MessageUID pour le message depuis le serveur. Il serait donc possible d'obtenir l'UID réel du dernier message que vous avez et ensuite utiliser le getUIDNext() et getMessagesByUID() méthodes pour trouver le dernier message et télécharger l'intervalle donné.
Un message UID va changer quand le message est déplacé à partir d'un dossier (ou "boîte aux lettres", en IMAP terminologie) à l'autre. "identificateurs Uniques sont affectés à un usage strictement croissant de la mode dans la boîte aux lettres; que chaque message est ajouté à la boîte aux lettres, il est affecté à un supérieur UID que le message(s) qui ont été ajoutés précédemment." telebog semble vouloir télécharger chaque message exactement une fois, quel que soit le dossier dans lequel il est.
Hmm... je peux stocker l'UID de la dernière téléchargé e-mail de chaque dossier et au lieu de récupérer tous les messages d'un dossier que je obtenir seulement les nouveaux messages à l'aide de getMessagesByUID, mais avant de télécharger à nouveau l'e-mail que je dois vérifier si elle n'est pas encore téléchargés à l'aide de l'ID de Message. Merci.
Je n'aurais jamais confiance au Message-ID seul (peut être défini par l'expéditeur à n'importe quelle valeur), car il ne doit pas être unique. Utilisation (si disponible) l'ID de Message, l'Expéditeur, l'Adresse et l'Heure de l'e-Mail pour identifier le message. Vous pouvez les écrire dans une chaîne de caractères et de calculer MD5 Hash. Ainsi, vous aurez un identifiant unique pour chaque e-mail.
OriginalL'auteur Erik
vérifier uniquement les en-têtes et lorsque vous atteignez un connu (la dernière), caution:
par exemple (je me sens très gentille aujourd'hui) et c'est une exception à partir de la production réelle de code (certaines parties ont été coupées, il peut ne pas compiler, de l'état.de traitement est un ensemble de préférence LinkedHashMap de substitution [keySet()] (w/max frontière boolean removeEldestEntry())
vrai que c'est un bon point; le code est pour pas lire les mails, donc je suppose qu'il n'a jamais été un problème, lui-même. Le code doit garder au moins le nombre précédent et de tenter de récupérer au moins que de nombreux messages de retour.
OriginalL'auteur bestsss
Filtre sur le VU de drapeau. Cet indicateur est destiné à trouver de nouveaux messages. Le seul Inconvénient est que si votre utilisateur est l'utilisation de plusieurs lecteurs, alors il peut avoir été vu en utilisant un autre lecteur.
RECENT
drapeau. Et ouais, de toute autre connexion du client à ce dossier sera unsetRECENT
sur tous les messages dans le dossier.Je l'ai vu documenté comme on le VOIT, mais il peut être RÉCENTE de la mise en œuvre. IMAP conserve la trace des messages qui n'ont pas encore été lus par un client. Pour un lecteur de l'interface, je m'attends à tout ce que j'ai lu avec n'importe quel client d'être marqués comme lus dans mon interface. Mon parcours dans ce cas est plus dans l'administration d'un serveur de la programmation d'un client.
Au Vu de drapeau est une norme drapeau. Java sera automatiquement marquer un message comme on le voit lorsqu'il est extrait. C'est ce comportement que j'attends de tous les clients. Il est possible d'effacer le drapeau.
OriginalL'auteur BillThor
message-Id qui vient en partie de l'en-tête est toujours unique, même si u de le configurer manuellement .je l'ai testé avec gamil et racksoace.
OriginalL'auteur vipin