Разбирать тело большого количества писем

Я ищу программное обеспечение на стороне сервера для анализа очень большого количества электронных писем и извлечения подписи электронной почты. В частности, я хочу ввести тело почтового сообщения, определить подпись и извлечь данные.

Наиболее важной особенностью является хорошо написанное распознавание образов. На самом деле, я был бы доволен текстовым синтаксическим анализатором, поскольку мне удобно предоставлять только тело в виде большой строки.

Меня не волнует язык.

Ответы (1)

Вы можете сделать это очень просто, либо на стороне клиента, либо на стороне сервера, используя некоторые сценарии Python .

Python, используя только встроенные библиотеки, может:

  • Подключитесь как почтовый клиент , чтобы загружать электронные письма,
  • Ищите каждое тело электронной почты, чтобы получить любую текстовую подпись (действительные подписи начинаются со строки всего с двумя дефисами, за которыми следует строка «--\n», но есть и некоторые другие форматы для поиска), библиотека регулярных выражений python особенно хорошо для этого .
  • Python также может легко обрабатывать подписи на основе изображений или HTML, используя только стандартные библиотеки.
  • Подписи vCard ( RFC 2426 ) можно обрабатывать с помощью библиотеки плагинов vcard ,
  • На многих серверах, особенно на базе Linux, уже установлен python, поэтому, если у вас есть доступ к серверу, вы также можете сделать это на нем с помощью python, но способ доступа к содержимому электронной почты на сервере зависит от того, какой почтовый сервер вы используете.

К сожалению, существует несколько непоследовательных способов обозначения подписи: Моя подпись, созданная Thunderbird, Outlook и т. д.:

-- 
Steve (Gadget) Barnes
Any opinions in this message are my personal opinions and do not reflect those of my employer.

Обратите внимание на строку, содержащую только дефис, дефис, пробел — это «стандарт», но некоторые другие клиенты прикрепляют файлы, изображения, груды html и т. д. Аналогичным образом, соглашения относительно размещения нового контента сверху, снизу или с чередованием в электронном письме exchange в значительной степени является вопросом соглашения, и маркировка ранее полученного текста с помощью отступа или добавления префикса каждой строки из предыдущего сообщения > или некоторых других символов снова зависит как от почтового клиента, так и часто от настроек пользователя.

Я бы предложил использовать метод пошагового поиска, где, возможно, вы пытаетесь найти:

  1. -- \nза которым следует одна или несколько непустых строк. f1=re.compile(r'^-- \n(.+)', flags=re.MULTILINE+re.DOTALL)должен сделать красиво.
  2. если это не найдено, вы можете искать строки, начинающиеся с любого из Tel ephone : , Web site : , Mob ile : и т. д. , и искать непрерывные, т. е. без пустых строк , строки над ними.
  3. Вы также можете найти фрагменты текста, начинающиеся с «С уважением», «С уважением», «С уважением» и других прощаний (список есть в ссылке).

При разработке вашего набора регулярных выражений я настоятельно рекомендую использовать средство проверки регулярных выражений Python, такое как pythex .

Конечно, это осложняется тем, что есть возможность прикрепить визитную карточку, отсканированную подпись и т. д., а также тот факт, что любое данное сообщение может быть простым текстом, html или и тем, и другим, и что больше всего раздражает, некоторые люди просто отправляют слово, или другое, документ как электронная почта .

Насколько мне известно, в настоящее время нет библиотеки, которая охватывает все эти возможности, возможно, вы могли бы внести свой вклад в свое время.

Спасибо за это. Действительно ясно. Не могли бы вы немного пояснить, что вы подразумеваете под «--\n», может быть, если у вас есть пример. Кроме того, когда вы говорите, что есть другие форматы, которые нужно искать, есть ли где-нибудь исчерпывающий список или библиотека Python, которая уже реализовала многие из этих форматов.
@Mika Я расширил ответ выше, чтобы привести несколько примеров.