J'essaie d'écrire une application qui reçoit périodiquement les e-mails. Il écrit chaque courrier dans la base de données. Mais parfois, je reçois 're:' E-mail qui ressemble à quelque chose comme ceci: p>
Nouveau message P>
Le 21 septembre 2010 24:26 Quelqu'un a écrit (a): p>
| Ancien message | p> blockQuote>
Le format dépend du fournisseur de messagerie. P>
Y a-t-il une bibliothèque qui aide à supprimer la partie "RE" du message électronique? Peut-être que IMAP Server peut le faire? J'ai tous les courriers électroniques précédents du fil dans la base de données afin que je puisse les prendre et rechercher dans un nouveau message. P>
4 Réponses :
From: <receipent> From: "NAME" <receipent> From: receipent
Personnellement, je pense que vous n'avez pas de chance ici, car la copie du message fait partie du corps. Donc, afin de le supprimer, vous devrez traiter le corps du message et écrire une méthode d'extraction pour chaque format connu (évidemment, le problème est que vous ne pouvez pas connaître tous les formats possibles). P>
Donc, au lieu d'analyser le corps, pourquoi ne pas persister le message entier dans la base de données? Normalement, la taille du message ne doit pas être le problème avec le SGBD moderne. Si c'est vraiment un problème, vous pouvez toujours compresser le corps et le stocker dans une blob. P>
Je suis en désaccord, la taille n'est pas la contrainte la plupart du temps, mais nous devons afficher uniquement le message et non les réponses à la vue.
Je suis d'accord avec vous que le texte copié est simplement fouillé, cependant, il devra faire un compromis: 1. Développer un filtre qui n'atteindra jamais une partie du fouillis et a également le danger d'éliminer également le contenu pertinent - et donc La cause des risques sera probablement coûteuse. - ou - 2. Vivez avec l'encombrement et livrer le projet avec un risque beaucoup plus faible. - Mais comme je l'ai dit, c'est un compromis!
Si vous êtes capable d'associer une réponse (re :) Message avec le message original / précédent qu'il est une réponse, alors je penserais que vous pouvez saisir le texte du corps du message original / précédent de votre base de données, puis supprimez ce texte du corps de la réponse. Cependant, cette méthode ne sera pas précise à 100%, car les clients pourraient convertir un courrier électronique de texte HTML / riche en texte brut ou vice-versa. Dans de tels cas, cette méthode ne fonctionnerait probablement pas. Même dans ce cas, cette technique serait générique et travaille probablement la majorité du temps. P>
En outre, le fournisseur de messagerie peut ajouter certains champs d'en-tête ou préambules, aux débuts d'un message indiqué dans une réponse. Dans ce cas, je ne pense pas qu'il n'y ait aucune solution "attraper tout". P>
Ma recommandation serait de cibler quelques-uns des très énormes fournisseurs de messagerie Web (Gmail, Yahoo, Microsoft, etc.), apprenez les formats qu'ils utilisent pour leurs réponses et analysent les messages en conséquence. De plus, vous pourriez également gérer quelques formats génériques aussi. Par exemple, le caractère ">" est couramment utilisé au début de chaque ligne de texte cité dans une réponse. P>
Si vous allez se développer dans une langue comme C #, créez-vous une interface comme Je ne pense pas que vous trouverez une solution de capture / parfaite / parfaite à ce problème, car il existe simplement trop de fournisseurs de messagerie avec trop de formats différents. Cependant, je pense que vous pouvez au moins trouver certaines techniques, comme celles mentionnées ci-dessus, cela fonctionnera pour vous plus de fois que non, ce qui est le meilleur que vous puissiez espérer à ce stade. P> IREPLYFormat code>, avec une implémentation correspondante pour chaque fournisseur, et éventuellement certains formats génériques. P>
Je suis d'accord avec Obalix. Il est trop difficile de filtrer les réponses afin de garder tout le message. Cependant, lorsque vous présentez un courrier électronique à l'utilisateur, vous pouvez masquer certaines parties. La partie peut être affichée avec un "clic ici pour voir le message complet" ou similaire. Par exemple, l'expression régulière à filtrer '>' Les caractères semblaient ressembler à quelque chose comme @ "^ [\ f \ v>] *" code> p> p>