К сожалению, вам грозит мир боли, если вы хотите тщательно очистить письма (удаляя все, что не является частью самого письма с ответом). идеальный способ состоит в том, чтобы, как вы предлагаете, написать регулярное выражение для каждого популярного почтового клиента / службы, но это довольно нелепый объем работы, и я рекомендую быть ленивым и тупым об этом.
Интересно, что даже у инженеров Facebook возникли проблемы с этой проблемой, а у Google есть патент на метод "Обнаружения цитируемого текста".
Существует три решения, которые могут оказаться приемлемыми:
Оставьте это в покое
Первое решение - просто оставить все в сообщении.Большинство почтовых клиентов делают это, и никто, кажется, не жалуется.Конечно, онлайновые системы сообщений (такие как «Сообщения» в Facebook) выглядят довольно странно, если у них есть ответы начального типа.Один хитрый способ заставить эту работу работать нормально - это сделать сообщение со свернутыми в кавычки строками и добавить небольшую ссылку для «раскрытия цитируемого текста».
Отделение ответа от более старого сообщения
Второе решение, как вы упомянули, состоит в том, чтобы поместить разграничивающее сообщение вверху ваших сообщений, например --------- please reply above this line ----------
, а затем убрать эту строку и все, что ниже, при обработке ответов.Многие системы делают это, и это не самая плохая вещь в мире ... но это делает вашу электронную почту более «автоматизированной» и менее личной (на мой взгляд).
Извлечение цитируемого текста
Последнее решение состоит в том, чтобы просто удалить любую новую строку, начинающуюся с >
, которая, предположительно, является строкой в кавычках из ответного электронного письма.Большинство почтовых клиентов используют этот метод указания цитируемого текста.Вот несколько регулярных выражений (в PHP), которые будут делать именно это:
$clean_text = preg_replace('/(^\w.+:\n)?(^>.*(\n|$))+/mi', '', $message_body);
Существуют некоторые проблемы при использовании этого более простого метода:
- Многие почтовые клиенты также позволяют людям цитировать более ранние электронные письма.и также добавьте в эти строки кавычек
>
, так что вы будете отбирать кавычки. - Обычно над цитируемым письмом есть строка с чем-то вроде
On [date], [person] said
.Эту строку трудно удалить, поскольку она не отформатирована одинаково для разных почтовых клиентов и может быть на одну или две строки выше удаленного цитируемого текста.Я реализовал этот метод обнаружения с небольшим успехом в моей библиотеке PHP Imap .
Конечно, тестирование является ключевым, и компромиссы могут стоить того для вашего конкретногосистема.YMMV.