Javamail getMessages() - Comment ne récupérer que les nouveaux messages ?

cs_et1 Messages postés 250 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 27 janvier 2011 - 26 janv. 2011 à 20:24
cs_et1 Messages postés 250 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 27 janvier 2011 - 27 janv. 2011 à 00:44
Bonjour,

J'utilise javamail pour envoyer et lire des emails.

Je n'ai aucun problème pour envoyer des emails (smtp) ni pour lire l'ensemble des emails présent dans la boite de réception (pop).

Cependant, je voudrais que, lors de la lecture des emails, comme tout logiciel de messagerie, cela ne télécharge que les nouveaux emails et non l'ensemble des emails.

Je pourrais enregistrer la date à la fin de la lecture des emails pour qu'à la prochaine lecture je ne télécharge que les emails plus récents que cette date, mais cela ne semble pas être une bonne idée. Il faudrait tester pour chaque email sa date, donc très long, et ce serait aussi perdre les emails antérieurs non téléchargés (ceux arrivés en retard).

> Comment procéder pour télécharger tous les emails la première fois, puis uniquement les nouveaux lors des prochaines fois ?


Voici mon code :

try {
store.connect();
final Folder inbox = _store.getFolder("INBOX");
try {
inbox.open(Folder.READ_ONLY);
final Message[] messages = inbox.getMessages();
for (int i = 0; i < messages.length; ++i) {
// Récupération et traitement de chaque message (méthodes getSubject(), .getContent(), etc.)
}
finally {
inbox.close(false);
}
} finally {
store.close();
}



Note : je ne souhaite pas marquer les messages comme "lus" ni les supprimer du serveur.


Merci,
Etienne.

1 réponse

cs_et1 Messages postés 250 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 27 janvier 2011 10
27 janv. 2011 à 00:44
POP3 ne permet pas d'utiliser les Flag, on ne peut donc pas savoir si un message a été lu ni paramétrer les flags.

La solution consiste donc à stocker tous les UIDs des emails que l'on a téléchargés, puis lors de la lecture, on ne télécharge que les emails dont l'UID n'est pas dans notre liste.
Pour que le parcours de tous les emails (pour vérifier l'UID) soit rapide, on utilise un fetch.

code source :
try {
store.connect();
final POP3Folder inbox = (POP3Folder) store.getFolder("INBOX");
try {
inbox.open(POP3Folder.READ_ONLY);
final Message[] messages = inbox.getMessages();
FetchProfile fp = new FetchProfile();
fp.add(UIDFolder.FetchProfileItem.UID);
inbox.fetch(inbox.getMessages(), fp);
for (int i = 0; i < messages.length; ++i) {
if(!isInYourUIDsList(inbox.getUID(messages[i]))) {
// récupérer et traiter l'email
}
} finally {
inbox.close(false);
}
} finally {
store.close();
}
2
Rejoignez-nous