2008-10-20 19 views
3

J'utilise javax.mail pour récupérer les mails de GMail en utilisant IMAP. Je veux également obtenir les balises appliquées à chaque mail, donc je suis en train d'itérer sur tous les dossiers du magasin (qui sont en fait des balises) et de télécharger les mails les uns avec les autres. J'ai utilisé la méthode getUID de ImapFolder pour obtenir l'UID pour chaque message, puis les comparer pour reconnaître le même courrier le long de différents dossiers. Par exemple, si le courrier "Bonjour" était marqué avec "A" et "B", je parcourais les dossiers "Boîte de réception", "A" et "B" et obtenais le même courrier de chaque dossier; donc je pourrais garder une seule copie étiquetée avec "Inbox", "A" et "B". Toutefois, la méthode getUID renvoie un ID relatif à un dossier, de sorte que le même courrier peut avoir des ID différents dans des dossiers différents, ou différents courriers peuvent avoir le même ID dans des dossiers différents. Dans l'exemple. "HellO" peut apparaître comme mail 1 dans "A" et comme mail 2 dans "B".Obtenir UID pour le message de GMail en utilisant javax.mail avec IMAP

Existe-t-il un moyen d'obtenir un ID relatif au magasin pour chaque courrier, indépendamment du dossier? Ou une meilleure façon d'obtenir les étiquettes attachées à un seul courrier?

Répondre

1

Je pense que le seul moyen est d'utiliser un hachage que vous calculez vous-même en fonction des en-têtes de message.

+0

Je pense qu'il va falloir y arriver, je voulais l'éviter si possible, mais il semble qu'il n'y ait pas d'autre moyen. Btw, les en-têtes doivent inclure Subject, From, To, Cc, Date et ... toute autre chose pour identifier de manière unique un mail? –

+0

J'inclurais le champ d'en-tête Message-ID dans tous les cas. –

+0

Pensez au cas: Vous êtes dans un groupe de messagerie et vous recevez un message envoyé à ce groupe mais l'expéditeur vous envoie le message de manière explicite en même temps. Ensuite, vous devriez recevoir 2 mails, mais le message-id sera le même car il est envoyé du côté de l'expéditeur. Le sujet de la date de cc sera également le même que le hash sera le même. Pour distinguer, il faut ajouter Delivered-To au hash, cela va différer les deux messages dans ce cas. – benchpresser

3

Vous avez obtenu la réponse de gmail forums: il y a un en-tête "message-id" qui contient la valeur que je cherchais.

+4

Message-ID est unique dans la plupart des cas, mais pas dans tous les cas. Les expéditeurs spécialement automatisés génèrent souvent le même ID, ou vous n'en avez pas du tout (j'ai aussi vu des ID vides - Message-ID:) –