2 votes

Mailing avec IMAP : Comment détecter qu'un message a été déplacé d'un dossier à un autre ?

En utilisant JavaMail API et IMAP, je veux savoir qu'un message a été déplacé du dossier a au dossier b. Comment puis-je faire cela sans ajouter d'écouteurs ? Je veux dire que je veux découvrir les changements de messages lorsque je me connecte au compte et que j'ouvre le dossier.

Le problème est que si vous avez 3 messages dans le dossier A avec les identifiants 1, 2 et 3 et que vous déplacez le message avec l'identifiant 3 vers le dossier B, l'identifiant du message change et nous avons un message avec l'identifiant 1 dans le dossier B.

Mon objectif est de synchroniser la structure des messages du serveur de messagerie avec mon propre serveur local. Je dois conserver toutes les informations sur les messages, les drapeaux, etc. sur mon propre serveur. Ainsi, à chaque connexion, je dois découvrir toutes les modifications apportées aux messages stockés dans le serveur de messagerie.

Je peux recevoir les nouveaux messages ou les messages non lus par :

Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.RECENT), true));

ou par

Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));

Mais je ne m'intéresse pas seulement aux nouveaux courriers, je veux aussi connaître les modifications apportées aux anciens courriers, par exemple, et je veux en être informé :

un courrier qui a été lu il y a deux mois a été déplacé dans un autre dossier.

mon idée est la suivante,

Comme les identifiants changent, je ne peux pas les utiliser pour identifier les courriers. Je pense que je dois utiliser les informations du courrier telles que l'objet, l'expéditeur, la date de réception, construire une valeur de hachage de ces informations et comparer les valeurs de hachage des messages à chaque connexion. mais cela entraînera des problèmes de performance.

4voto

Jan Kundrát Points 1959

Ce n'est pas possible avec IMAP. Le suivi de la Message-Id pourrait vous permettre de faire la moitié du chemin, mais vous devrez ajouter toutes sortes de vérifications pour les cas particuliers tels que les ID de messages en double (oui, ils sont des supposé pour être unique), etc. N'oubliez pas non plus que l'IMAP de base vous donne une vue bien synchronisée d'une seule boîte aux lettres, et non une vue atomique d'un ensemble de boîtes aux lettres lorsqu'elles sont combinées. Cela signifie que même si un utilisateur a "déplacé" un message entre les dossiers A et B, il peut très bien être visible à la fois dans A et B pour votre script pendant une période de temps plus longue.

Certains serveurs IMAP ont ajouté des champs non standard que vous pouvez utiliser. FETCH qui contiennent un hachage cryptographique de la charge utile du message. Ils ne sont cependant pas encore standardisés.

2voto

cproinger Points 639

Vous pouvez essayer d'utiliser les informations de l'en-tête rfc822 qui contient un identifiant de message comme blablabla@mail.gmail.com qui ne devrait pas changer lorsque les messages sont déplacés dans des dossiers. mais vous devrez parcourir tous les en-têtes de courrier de l'utilisateur pour synchroniser cela, du moins je ne connais pas de moyen de récupérer les messages déplacés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X