¿Existe alguna herramienta para obtener el cuerpo de los archivos EML?

Estoy trabajando con un corpus de correos electrónicos (del orden de decenas de miles) que están en formato EML y necesito extraer el contenido de texto de estos correos electrónicos.

Si bien eliminar los encabezados de los mensajes no es tan difícil y fácil de manejar con varios scripts que flotan en Internet, ninguno de ellos maneja algunas de las peculiaridades del formato, como secuencias de escape sin escape como =\ny =3D.

¿Existe alguna herramienta que pueda obtener el cuerpo de los archivos EML?

La herramienta debe:

  • realizar la operación por lotes
  • ser gratis
  • opcionalmente, se ejecuta en Linux

Respuestas (2)

emaildata es un paquete de python para extraer contenido de mensajes de correo electrónico.

De los ejemplos:

import email
from emaildata.text import Text

message = email.message_from_file(open('message.eml'))
text = Text.text(message)

Esto, combinado con Python glob.glob()o os.walk()funciones estándar, debería hacer que sea muy fácil realizar esto como una operación por lotes.

  • Gratuito
  • Multiplataforma (incluido Linux )
  • Lote/Secuencia de comandos

probandolo

Como ejemplo, exporté un correo electrónico de Quora (usando Mozilla Thunderbird) como un archivo y encendí iPython:

ingrese la descripción de la imagen aquí

Mirando a través de él, no había entradas = 3D, = 20 (aparte de un par de direcciones URL), pero había una serie de secuencias como \xe2\x80\x9cused car salesman\xe2\x80\x9desa que necesitaban resolverse, estas son secuencias Unicode .

Ejecución: unicode(text, 'utf-8')para decodificar e imprimir, (con una fuente compatible con Unicode) , da:

ingrese la descripción de la imagen aquí

Donde encontramos que \xe2\x80\x9cused car salesman\xe2\x80\x9des "vendedor de autos usados" tenga en cuenta las cotizaciones hacia arriba y hacia abajo .

Si necesita decodificar las partes de una URL con consulta, puede usarlas urllib.unquote()para manejarlas, pero para su uso probablemente no le interesen las URL, ya sean consultas o no.

Desafortunadamente, esto no parece ser capaz de manejar conversiones como =3D=> =, =20=> {espacio}, ={newline char}=> cadena vacía que mencioné en mi pregunta :'(
la codificación de URL se encarga de eso muy bien
Steve, ¿podrías ampliar eso?

El módulo mailparser para nodejs maneja esto bien.

El archivo Léame del proyecto tiene un ejemplo de análisis de correos electrónicos con el módulo.