2010-09-21 16 views
6

Estoy intentando escribir la aplicación que periódicamente recibe correos electrónicos. Escribe todos los correos en la base de datos. Pero a veces me estoy poniendo 'Re:' e-mail que se ve algo como esto:Eliminando la parte anterior de los correos electrónicos de respuesta

Nuevo mensaje

El 21 de septiembre 2010 24:26 Alguien escribió (a):

| Mensaje anterior |

El formato depende del proveedor de correo electrónico.

¿Hay alguna biblioteca que ayude a eliminar la parte 'Re' del mensaje de correo electrónico? ¿Tal vez el servidor IMAP puede hacer eso? Tengo todos los correos electrónicos anteriores del hilo en la base de datos para poder tomarlos y buscar nuevos mensajes.

Respuesta

1

Personalmente, creo que no tiene suerte aquí, ya que la copia del mensaje es parte del cuerpo. Por lo tanto, para eliminarlo, deberá procesar el cuerpo del mensaje y escribir un método de extracción para cada formato conocido (obviamente, el problema es que no puede conocer todos los formatos posibles).

Entonces, en lugar de analizar el cuerpo, ¿por qué no persiste todo el mensaje en la base de datos? Normalmente, el tamaño del mensaje no debería ser el problema con el DBMS moderno. Si realmente es un problema, siempre puedes comprimir el cuerpo y almacenarlo en un BLOB.

+0

No estoy de acuerdo, el tamaño no es la restricción la mayor parte del tiempo, pero tenemos que mostrar solo el mensaje y no las respuestas a la vista. –

+0

Estoy de acuerdo con usted en que el texto copiado es sólo el desorden, sin embargo, uno tendrá que hacer una solución de compromiso: 1. El desarrollo de un filtro que alguna vez sólo atrapar parte del desorden y tiene el peligro de eliminación de contenido relevante también - y por lo tanto debido a los riesgos probablemente sea costoso. - o - 2. Vivir con el desorden y entregar el proyecto con un riesgo mucho menor. - Pero como dije, ¡es una compensación! – AxelEckenberger

0
  1. Sin servidor IMAP no será y no quitar nada
  2. Tal biblioteca no existe porque no existe una norma, todos los proveedores de correo electrónico hace de manera diferente, Gmail, etc haber desarrolló para sus propias herramientas
  3. Tienes que buscar el patrón, que de alguna manera se iniciará con cabeceras con receptor como emisor, como ...
From: <receipent> 
From: "NAME" <receipent> 
From: receipent 

y debe omitir las partes de esta línea a continuación, aunque comprobar que esto no será suficiente, como suele ser seguido de asunto, cc, etc., debe verificarse el patrón. Creo que puede existir una biblioteca de proyecto o texto de código abierto, pero es muy difícil encontrarla en google.

2

Si puede asociar un mensaje de respuesta (RE :) con el mensaje original/anterior que es una respuesta, entonces creo que podría tomar el texto del cuerpo del mensaje original/anterior de su base de datos , y luego eliminar ese texto del cuerpo de la respuesta. Sin embargo, este método no será 100% exacto, ya que los clientes pueden convertir un correo HTML/texto enriquecido en texto sin formato, o viceversa. En cualquier caso, este método probablemente no funcionaría. Aun así, esta técnica sería genérica y probablemente funcione la mayor parte del tiempo.

Además, el proveedor de correo electrónico puede agregar ciertos campos de encabezado, o preámbulos, al comienzo de un mensaje entre comillas en una respuesta. En este caso, no creo que haya ninguna solución de "atrapar todo".

Mi recomendación sería apuntar a algunos de los proveedores de correo web realmente grandes (Gmail, Yahoo, Microsoft, etc.), aprender los formatos que utilizan para sus respuestas y analizar los mensajes en consecuencia. Además, también podría manejar algunos formatos genéricos. Por ejemplo, el carácter '>' se usa comúnmente al comienzo de cada línea de texto citado en una respuesta.

Si va a desarrollar en un lenguaje como C#, cree una interfaz como IReplyFormat, con una implementación correspondiente para cada proveedor, y posiblemente algunos formatos genéricos.

no creo que se dará cuenta de cualquier cajón de sastre solución/perfecta a este problema, ya que hay simplemente demasiados proveedores de correo con muchos formatos diferentes. Sin embargo, creo que se puede, por lo menos encontrar algunas técnicas, como las mencionadas anteriormente, que trabajan para usted más veces que no, que es el mejor que se puede esperar en este punto.

0

Estoy de acuerdo con Obalix. Es muy difícil filtrar las respuestas, por lo que debe conservar todo el mensaje. Sin embargo, cuando presente un correo electrónico al usuario, puede ocultar algunas partes. Esas partes se pueden mostrar con un mensaje opcional "Haga clic aquí para ver el mensaje completo" o similar. Por ejemplo, la expresión regular para filtrar caracteres '>' se parecería a @"^[ \f\t\v>]*"

Cuestiones relacionadas