studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones c# .net email email-processing

c# - para - manual de programacion android pdf



¿Es posible "limpiar" correos electrónicos programáticamente? (5)

¿Alguien tiene alguna sugerencia sobre cómo puedo limpiar el cuerpo de los correos electrónicos entrantes? Quiero eliminar los descargos de responsabilidad, las imágenes y tal vez cualquier mensaje de correo electrónico anterior que también pueda estar presente, de modo que me quede solo el contenido del texto del cuerpo. Supongo que no será posible de manera confiable, pero ¿alguien lo ha intentado? ¿Hay alguna biblioteca orientada a este tipo de cosas?


Algunas cosas obvias para mirar:

  1. si el correo no es más que puro texto sin formato, el mensaje será mímico de varias partes. Cualquier parte cuyo tipo sea "image / *" (image / jpeg, etc.), probablemente se puede descartar. Es probable que cualquier parte cuyo tipo no sea "text / *" pueda ir.
  2. Un mensaje HTML probablemente tendrá una parte del tipo "multipart / alternative" (creo), y tendrá 2 partes, una "text / plain" y una "text / html". Las dos partes deben ser casi equivalentes, por lo que puede soltar la parte HTML. Si la única parte presente es el bit HTML, puede que tenga que hacer una conversión de HTML a texto sin formato.
  3. El formato habitual para el texto entre comillas es preceder al texto con un carácter ">". Debería poder descartar estas líneas, a menos que la línea comience "> Desde", en cuyo caso se insertó ">" para evitar que el lector de correo piense que "De" es el comienzo de un nuevo correo.
  4. La firma debería comenzar con "- / r / n", aunque hay muchas posibilidades de que falte el espacio final.

Dada su pregunta "¿Es posible ''limpiar'' correos electrónicos programáticamente?", Respondía "No, no confiablemente".

El peligro al que se enfrenta no es realmente tecnológico, sino sociológico.

Es bastante fácil detectar y filtrar algunos aspectos de los mensajes, como las imágenes. También es posible lograr el filtrado de firmas y renuncias (aunque es más un desafío).

El verdadero problema es el costo de hacerlo mal.

¿Qué sucede si su filtro elimina una parte crítica del mensaje? ¿Puedes rastrearlo para encontrar la pieza faltante o tu filtrado es destructivo? Peor, ¿notarías que la pieza faltaba?

Hay un boceto de comedia clásica que vi hace años que ilustra el punto. Dos hombres trabajando juntos en un auto. Uno está debajo haciendo el trabajo, el otro sentado cerca leyendo las instrucciones de un manual de servicio; está claro que ninguno de los dos sabe lo que hace, pero están haciendo todo lo posible.

Tipo manual, leyendo en voz alta: "Deshace el negrito en el centro del cárter de aceite ..." [gira la página]

Tipo de herramienta: "Ok, está fuera".

Tipo manual: "... bajo ninguna circunstancia".


En el correo electrónico, hay un par de marcas acordadas que significan algo que desea quitar. Puede buscar estas líneas usando expresiones regulares . Dudo que no puedas "desinfectar" tus correos, pero hay algunas cosas que puedes buscar:

  1. La línea que comienza con ">" (mayor que el espacio en blanco) marca una cita
  2. La línea con "-" (dos guiones, luego espacios en blanco y luego avance de línea) marca el comienzo de una firma, ver Bloque de firma en Wikipedia
  3. Los mensajes de varias partes, los límites comienzan con - , más allá de eso, debe hacer algunas búsquedas para separar las partes del cuerpo del mensaje de las partes no deseadas (como las imágenes base64)

En cuanto a la implementación real de C #, dejo eso para usted u otros SOers.


La versión 3 de OSBF-Lua tiene una biblioteca de análisis de correo que manejará el MIME y dividirá un mensaje en sus partes MIME, y así sucesivamente. Actualmente tengo un lío de scripts de Lua que hacen cosas como ignorar la mayoría de los archivos adjuntos que no son de texto, prefieren texto plano a HTML, y así sucesivamente. (También envuelvo largas líneas a 80 caracteres mientras trato de preservar las comillas).

En cuanto a eliminar el correo anteriormente citado, las sugerencias anteriores son todas buenas (debe suscribirse a algunas listas de correo maleducado).

Eliminar las renuncias de forma confiable probablemente sea difícil. Mi primer corte sería simplemente mantener una biblioteca de renuncias que se eliminaría del final de cada mensaje de correo; Escribiría un guión para que me sea más fácil agregarlo a la biblioteca. Para algo más sofisticado, probaría algún tipo de aprendizaje automático.

He estado trabajando en el filtrado de spam desde febrero de 2007 y he aprendido que todo lo que tenga que ver con el correo electrónico es un desastre. Una buena regla general es que lo que quieras hacer es mucho más difícil de lo que crees :-(


Si creas tu propia aplicación, buscaré en Regex, para encontrar el texto y reemplazarlo. Para que la aplicación sea un poco agradable, crearía una clase de correo electrónico llamado y en esa clase tengo una propiedad llamada RAW y una propiedad llamada Stripped.

Solo algunos consejos, ¡reunirá el resto cuando vea regex!