2010-09-21 3 views
6

J'essaie d'écrire une application qui reçoit périodiquement des e-mails. Il écrit chaque courrier dans la base de données. Mais parfois je reçois 'Re:' e-mail qui ressemble à ceci:Suppression de la partie précédente des e-mails de réponse

Nouveau message

Le 21 Septembre, 2010 24:26 Quelqu'un a écrit (a):

| Ancien message |

Le format dépend du fournisseur de messagerie.

Y a-t-il une bibliothèque qui aide à supprimer la partie 'Re' d'un message électronique? Peut-être que le serveur IMAP peut le faire? J'ai tous les e-mails précédents de thread dans la base de données afin que je puisse les prendre et rechercher dans un nouveau message.

Répondre

1

Personnellement, je pense que vous n'avez pas de chance ici, car la copie du message fait partie du corps. Donc, pour l'enlever, vous devrez traiter le corps du message et écrire une méthode d'extraction pour chaque format connu (le problème est évidemment que vous ne pouvez pas connaître tous les formats possibles). Donc, au lieu d'analyser le corps, pourquoi ne perdez-vous pas tout le message dans la base de données? Normalement, la taille du message ne devrait pas être le problème avec un SGBD moderne. Si c'est vraiment un problème, vous pouvez toujours compresser le corps et le stocker dans un BLOB.

+0

Je ne suis pas d'accord, 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. –

+0

Je suis d'accord avec vous que le texte copié est juste encombré, cependant, il faudra faire un compromis: 1. Développer un filtre qui ne sera jamais attraper qu'une partie de l'encombrement et a le danger de supprimer également le contenu pertinent - et donc être la cause des risques seront très probablement coûteux. - ou - 2. Vivre avec le fouillis et livrer le projet avec un risque beaucoup plus faible. - Mais comme je l'ai dit, c'est un compromis! – AxelEckenberger

0
  1. Aucun serveur IMAP ne sera pas et ne supprime rien
  2. Cette bibliothèque n'existe pas parce qu'il n'y a pas de norme, chaque fournisseur de messagerie différemment fait, gmail etc ont développé leurs propres outils
  3. Vous devez chercher motif, qui commencera en quelque sorte avec les en-têtes avec destinataire que l'expéditeur, comme ...
From: <receipent> 
From: "NAME" <receipent> 
From: receipent 

et vous devez omettre les parties de cette ligne ci-dessous, vérifier que cela ne suffira pas comme d'habitude est suivi par sujet, cc, etc, donc le modèle doit être vérifié. Je pense qu'un projet open source ou une bibliothèque de texte peut exister, mais il est trop difficile de le trouver sur google.

2

Si vous êtes en mesure d'associer un message de réponse (RE :) avec le message d'origine/précédent auquel il répond, alors je pense que vous pourriez récupérer le corps du message original/précédent de votre base de données , puis supprimez ce texte du corps de la réponse. Toutefois, cette méthode ne sera pas 100% précise, car les clients peuvent convertir un e-mail HTML/texte enrichi en texte brut, ou vice-versa. Dans tous les cas, cette méthode ne fonctionnerait probablement pas. Même ainsi, cette technique serait générique et fonctionnerait probablement la majorité du temps. En outre, le fournisseur de messagerie électronique peut ajouter certains champs d'en-tête ou préambules aux débuts d'un message cité dans une réponse. Dans ce cas, je ne pense pas qu'il existe une solution «attrape tout». Ma recommandation serait de cibler quelques-uns des fournisseurs de messagerie Web vraiment énormes (Gmail, Yahoo, Microsoft, etc), apprendre les formats qu'ils utilisent pour leurs réponses et analyser les messages en conséquence. En outre, vous pourriez également gérer quelques formats génériques. Par exemple, le caractère '>' est couramment utilisé au début de chaque ligne de texte cité dans une réponse.

Si vous allez développer dans un langage comme C#, créez vous-même une interface comme IReplyFormat, avec une implémentation correspondante pour chaque fournisseur, et éventuellement des formats génériques.

Je ne pense pas que vous trouverez une solution fourre-tout/parfaite à ce problème, car il y a simplement trop de fournisseurs de messagerie avec trop de formats différents. Cependant, je pense que vous pouvez au moins trouver quelques techniques, comme celles mentionnées ci-dessus, qui fonctionneront pour vous plusieurs fois, ce qui est le meilleur que vous pouvez espérer pour le moment.

0

Je suis d'accord avec Obalix. Il est trop difficile de filtrer les réponses, il faut donc garder le message entier. Cependant, lorsque vous présentez un courrier électronique à l'utilisateur, vous pouvez en masquer certaines parties. Ces parties peuvent être affichées avec une option "Cliquez ici pour voir le message complet" ou similaire. Par exemple, l'expression régulière pour filtrer les caractères '>' ressemblerait quelque chose comme @"^[ \f\t\v>]*"

Questions connexes