2009-12-27 8 views
3

Je travaille dans une application de support technique où j'ai un script autonome qui interroge un serveur de messagerie et analyse le courrier qu'il y trouve.
Je suis confronté au problème suivant: Comment puis-je comprendre de manière fiable ce qu'est le courrier en réponse à quel courrier?
Je pourrais ajouter quelque chose dans le sujet comme "[ticket: 21312]" et chercher cela mais que faire si l'utilisateur change de sujet? Y a-t-il un autre moyen? Puis-je le faire en définissant un en-tête de courrier personnalisé et recherchez-le ou l'en-tête ne sera pas conservé entre les serveurs de messagerie lors de la réponse de l'utilisateur? Que se passe-t-il lorsque j'envoie un message de mon application à un utilisateur non existant ou à un utilisateur dont le quota est plein et son serveur répond avec le message standard habituel "le démon mail à .... ne peut pas ...." le sujet sera également modifié et je ne peux pas placer le message correctement comme une réponse à un courrier existant.Filetage de messagerie

Comment Gmail le fait-il? Là, les messages sont triés parfaitement dans presque tous les cas.

Répondre

6

dans la tuyauterie de messagerie d'assistance, il y a 3 méthodes de base:

a) inclure l'ID dans le sujet quelque part (fonctionne très bien dans la pratique)

b) ont l'ID dans le corps quelque part

c) utiliser un alias d'e-mail généré automatiquement avec l'ID, par exemple "[email protected]". cela peut facilement être géré par quelque chose comme procmail ou un script pour choisir l'ID. Gmail peut utiliser une combinaison du sujet, l'en-tête In-Reply-To (peut ne pas être défini) (les références et les en-têtes Original-Message-ID éventuellement), et diverses heuristiques, qui fonctionnent très bien, mais de Bien sûr, pas nécessairement à l'épreuve des balles, et un peu plus impliqué à mettre en œuvre. quelque chose comme nestscape's original threading algorithm peut-être. Bien que certains ont signalé que Gmail n'utilise pas l'en-tête In-Reply-To et repose principalement sur le sujet (comme dans this post).

+3

En plus de l'option C: Vous pouvez également utiliser l'adressage plus si votre serveur de messagerie le soutient. Par exemple: 'case + 76236781980893 @ helpdesk.mycompany.com' est livré à' case @ helpdesk.mycompany.com' et peut être analysé à partir de là. –

+0

Voici les implémentations de l'algorithme de threading jwz: * [Python] https://github.com/FreeDiscovery/jwzthreading * [JS] https://github.com/maxogden/conversationThreading-js * [Ruby] https : //github.com/fdietz/jwz_threading – Ben

2

Comme vous le dites, les en-têtes personnalisés peuvent être perdus et le sujet peut changer. Utilise les deux. Si un existe, vous pouvez identifier le fil. Je ne connais pas de meilleure façon de résoudre ce problème.

1

Si votre message a été envoyé avec un Message-ID -Header, tout expéditeur conforme aux normes doit ajouter un In-Reply-To -Header référençant votre ID. En outre References devrait contenir une liste de tous les messages précédents dans ce fil. Cela fonctionne avec la plupart des clients de messagerie, pour être sûr pour les mauvais clients que vous devez utiliser le sujet, la manière la plus simple est d'ajouter la chose "[question: 123]", une retombée secondaire est de reconnaître le sujet (après coupure de la partie "Re:" dans toutes les variantes) pour cela il pourrait vous aider à connaître la plupart de vos expéditeurs légitimes ...