Кодирование стиля Gmail «скрывать цитируемый текст» для архива списка рассылки в Интернете - PullRequest
8 голосов
/ 11 февраля 2009

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

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

Определить, какая часть сообщения является ответом, довольно сложно. Лично я использую разделители ">" в начале цитируемого текста при ответе. Я создал регулярное выражение, которое ищет эти строки и заключает их в div, чтобы некоторые JS могли скрыть или показать этот блок текста.

Затем я заметил, что Outlook по умолчанию не использует символы «>», он просто добавляет блок заголовка над ответом со сводкой заголовков (От, Тема, Дата и т. Д.). Ответ не тронут. Я могу сопоставить это и скрыть оставшуюся часть письма, работая с предположением, что это верхняя цитата.

Затем я посмотрел на Thunderbird, и он использует «>» для текста и <blockquote> для писем в формате HTML. Я до сих пор не посмотрел, что делает Apple Mail, что делает Notes или что делают другие миллионы почтовых клиентов.

Буду ли я писать регулярные выражения для каждого отдельного клиента? или мне чего-то не хватает?

Любые предложения, примеры кода или ссылки на сторонние библиотеки приветствуются!

Ответы [ 4 ]

6 голосов
/ 11 февраля 2009

Будет довольно сложно продублировать, как это делает gmail, так как его не волнует, является ли он цитируемым фрагментом или нет, как говорит Зак, просто кажется, что он заботится о разнице.

На самом деле довольно сложно понять это правильно в 100% случаев. Обычное текстовое электронное письмо «с потерями», вы можете отправить его

> Here is my long line that is over 74 chars (email line length limit)

Который может быть закодирован как

> Here is my long line that is over 74 chars (email=
 line length limit)

А затем декодируется как

> Here is my long line that is over 74 chars (email
line length limit)

Делать его неотличимым от встроенного ответа.

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

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

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

1 голос
/ 11 февраля 2009

Из того, что я могу сказать, gmail не беспокоится о префиксных строках или заголовках разделов, за исключением того, что игнорирует их. Если текстовые строки появились ранее в цепочке, а затем снова появляются, она считается заключенной в кавычки. Таким образом, например, если вы отправляете несколько сообщений и не меняете свою подпись, подпись считается заключенной в кавычки. Если вы уже имели дело с префиксом «>», то простой дифференциал должен сделать большую часть остального. Не нужно фантазировать.

0 голосов
/ 02 декабря 2010

Вот проект mozdev, который может быть полезен для тех, кто наткнулся на эту страницу в поисках решения Thunderbird:

http://quotecollapse.mozdev.org/

0 голосов
/ 11 февраля 2009

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

...