Я сделал намного больше поиска на этом и здесь - то, что я нашел. Существует в основном две ситуации, под которыми Вы делаете это: когда у Вас есть весь поток и когда Вы не делаете. Я разобью его в те две категории:
, Когда у Вас есть поток:
, Если у Вас есть весь ряд электронных писем, можно достигнуть очень высокого уровня обеспечения, которое, что Вы удаляете, на самом деле заключенный в кавычки текст. Существует два способа сделать это. Один, Вы могли использовать Идентификатор сообщения сообщения, В ответ на идентификатор и Список веток для определения отдельного сообщения, это - родитель и поток, которому это принадлежит. Для получения дополнительной информации об этом см. RFC822, RFC2822, эта интересная статья о поточной обработке , или эта статья о поточной обработке . Как только Вы повторно собрали поток, можно тогда удалить внешний текст (такой Относительно, От, CC, и т.д.... строки), и Вы сделаны.
, Если сообщения Вы работаете с, не имеют заголовков, можно также использовать соответствие подобия для определения, какие части электронного письма являются текстом ответа. В этом случае Вы застреваете с выполнением соответствия подобия для определения текста, который повторяется. В этом случае Вы могли бы хотеть изучить алгоритм расстояния Левенштейна такой как этот на Проекте или Кода этот .
, Неважно, что, если Вы интересуетесь процессом поточной обработки, выезд этот большой PDF на повторно собирающихся почтовых потоках .
, Когда у Вас нет потока:
, Если Вы застреваете только с одним сообщением от потока, Вы делаете, чтобы должными быть попытаться предположить, какова кавычка. В этом случае вот различные методы цитаты, которые я видел:
Удаляют текст оттуда вниз, и Вы сделаны. Оборотная сторона к любому из них - то, что они все предполагают, что отправитель поместил их ответ сверху заключенного в кавычки текста и не чередовал его (как был старый стиль в Интернете). Если это происходит, удача. Я надеюсь, что это помогает некоторым из Вас там!
В первую очередь, это - хитрая задача.
необходимо собрать типичные ответы из различных почтовых клиентов и подготовить корректные регулярные выражения (или безотносительно) для парсинга их. Я собрал ответы из перспективы, тандерберда, Gmail, почты яблока и mail.ru.
я использую регулярные выражения для парсинга ответа следующим способом: если выражение не сделало подобранный, я пытаюсь использовать следующий.
new Regex("From:\\s*" + Regex.Escape(_mail), RegexOptions.IgnoreCase);
new Regex("<" + Regex.Escape(_mail) + ">", RegexOptions.IgnoreCase);
new Regex(Regex.Escape(_mail) + "\\s+wrote:", RegexOptions.IgnoreCase);
new Regex("\\n.*On.*(\\r\\n)?wrote:\\r\\n", RegexOptions.IgnoreCase | RegexOptions.Multiline);
new Regex("-+original\\s+message-+\\s*$", RegexOptions.IgnoreCase);
new Regex("from:\\s*$", RegexOptions.IgnoreCase);
Для удаления цитаты в конце:
new Regex("^>.*$", RegexOptions.IgnoreCase | RegexOptions.Multiline);
Вот моя небольшая коллекция тестовых ответов (образцы, разделенные на ---):
From: test@test.com [mailto:test@test.com]
Sent: Tuesday, January 13, 2009 1:27 PM
----
2008/12/26 <test@test.com>
> text
----
test@test.com wrote:
> text
----
test@test.com wrote: text
text
----
2009/1/13 <test@test.com>
> text
----
test@test.com wrote: text
text
----
2009/1/13 <test@test.com>
> text
> text
----
2009/1/13 <test@test.com>
> text
> text
----
test@test.com wrote:
> text
> text
<response here>
----
--- On Fri, 23/1/09, test@test.com <test@test.com> wrote:
> text
> text
С наилучшими пожеланиями, Oleg Yaroshevych
Нет никакого универсального индикатора ответа в электронном письме. Лучшее, которое можно сделать, попытаться поймать наиболее распространенное и проанализировать новые шаблоны, поскольку Вы сталкиваетесь с ними.
Имеют в виду, что некоторые люди вставляют ответы в заключенном в кавычки тексте (Мой босс, например, отвечает на вопросы на той же строке, как я спросил их), так независимо от того, что Вы делаете, Вы могли бы потерять некоторую информацию, которую Вам понравится хранить.