Можно ли программно «чистить» электронные письма? - PullRequest
4 голосов
/ 14 декабря 2008

Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу очистить тело входящих писем? Я хочу удалить заявления об отказе от ответственности, изображения и, возможно, любой предыдущий текст электронной почты, который также может присутствовать, чтобы у меня остался только основной текст. Я предполагаю, что это не будет возможно никаким надежным способом, но кто-нибудь пробовал это? Существуют ли какие-либо библиотеки, предназначенные для такого рода вещей?

Ответы [ 5 ]

4 голосов
/ 14 декабря 2008

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

  1. Строка, начинающаяся с «>» (больше пробела), обозначает кавычку
  2. Строка с «-» (два дефиса, затем пробел, затем перевод строки) отмечает начало подписи, см. Блок подписи в Википедии
  3. Составные сообщения, границы начинаются с - , после чего вам нужно выполнить поиск, чтобы отделить части тела сообщения от нежелательных частей (например, изображений base64)

Что касается фактической реализации C #, я оставлю это для вас или других SO.

3 голосов
/ 14 декабря 2008

Несколько очевидных вещей, на которые стоит посмотреть:

  1. если сообщение не является простым текстом, сообщение будет состоять из нескольких частей. Любая часть, тип которой "image / *" (image / jpeg и т. Д.), Вероятно, может быть удалена. По всей вероятности, любая часть, тип которой не является "text / *", может идти.
  2. HTML-сообщение, вероятно, будет иметь часть типа «multipart / alternative» (я думаю) и будет состоять из 2 частей, одной «text / plain» и одной «text / html». Две части должны быть примерно одинаковыми, поэтому вы можете отбросить HTML-часть. Если единственной присутствующей частью является бит HTML, возможно, вам придется выполнить преобразование HTML в обычный текст.
  3. Обычным форматом цитируемого текста является предшествующий тексту символ «>». Вы должны иметь возможность отбросить эти строки, если только строка не начинается с «> From», и в этом случае «>» был вставлен, чтобы не дать читателю почты думать, что «From» является началом новой почты.
  4. Подпись должна начинаться с "- \ r \ n", хотя есть очень хороший шанс, что завершающий пробел будет отсутствовать.
2 голосов
/ 14 декабря 2008

Версия 3 OSBF-Lua имеет библиотеку синтаксического анализа почты, которая будет обрабатывать MIME, разбивать сообщение на части MIME и так далее. В настоящее время у меня есть беспорядок скриптов Lua, которые делают такие вещи, как игнорирование большинства нетекстовых вложений, предпочтение обычного текста HTML и т. д. (Я также заключаю длинные строки в 80 символов, пытаясь сохранить в кавычках.)

Что касается удаления ранее цитируемой почты, все приведенные выше предложения хороши (вы должны подписаться на некоторые невоспитанные списки рассылки).

Надежное удаление заявлений об отказе, вероятно, будет трудным. Моим первым шагом было бы просто сохранить библиотеку заявлений об отказе от ответственности, которые будут удалены с конца каждого почтового сообщения; Я написал бы сценарий, чтобы мне было легче добавить его в библиотеку. Для чего-то более сложного я бы попробовал какое-то машинное обучение.

Я работаю над фильтрацией спама с февраля 2007 года и узнал, что все, что связано с электронной почтой, - беспорядок. Хорошее практическое правило заключается в том, что все, что вы хотите сделать, гораздо сложнее, чем вы думаете: - (

1 голос
/ 15 декабря 2008

Учитывая ваш вопрос «Можно ли программно« чистить »электронные письма?», Я отвечал «Нет, не надежно».

Опасность, с которой вы сталкиваетесь, на самом деле не технологическая, а социологическая.

Достаточно легко обнаружить и отфильтровать некоторые аспекты сообщений, например изображения. Фильтрация подписей и заявлений об отказе также возможна (хотя это и сложная задача).

Настоящая проблема заключается в том, что это неправильно.

Что произойдет, если ваш фильтр удалит критическую часть сообщения? Можете ли вы отследить его, чтобы найти недостающую часть, или ваша фильтрация деструктивна? Хуже того, вы даже заметили, что кусок пропал?

Есть классический комедийный набросок, который я видел много лет назад, который иллюстрирует эту мысль. Двое парней работают вместе на машине. Один из них выполняет свою работу, другой сидит рядом и читает инструкции из руководства по обслуживанию - ясно, что ни один парень не знает, что он делает, но они делают все возможное.

Парень, читающий вслух: «Отмени жирный жир в центре масляного поддона ...» [переворачивает страницу]

Инструментальный парень: «Хорошо, его нет».

Мануальный парень: «... ни при каких обстоятельствах».

0 голосов
/ 14 декабря 2008

Если вы создаете свое собственное приложение, я бы заглянул в Regex, чтобы найти текст и заменить его. Чтобы сделать приложение немного приятнее, я бы создал класс Called Email, и в этом классе у меня есть свойство RAW и свойство Stripped.

Просто несколько советов, остальные вы соберете, когда загляните в регулярное выражение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...