Записи подписей и ответы из писем
В настоящее время я работаю над системой, которая позволяет пользователям отвечать на уведомления, отправленные (вздох).
Мне нужно вырезать ответы и подписи, чтобы я остался с фактическим содержимым ответа без всякого шума.
Есть ли у кого-нибудь предложения относительно наилучшего способа сделать это?
Ответы
Ответ 1
Если ваша система является собственностью и/или у вас ограниченное количество форматов ответов, можно сделать довольно хорошую работу. Вот фильтры, которые мы установили для ответов электронной почты на билеты trac:
Отбросьте весь текст после и включите:
- Линии, которые равны
'-- \n'
(стандартный разделитель sig email)
- Линии, которые равны
'--\n'
(люди часто забывают пространство в разделителе sig, и это не так, как обычные внешние sigs)
- Линии, начинающиеся с
'-----Original Message-----'
(MS Outlook по умолчанию)
- Линии, начинающиеся с
'________________________________
'(32 символа подчеркивания, Outlook снова)
- Линии, начинающиеся с
'On '
и заканчивающиеся на ' wrote:\n'
(OS X Mail.app по умолчанию)
- Линии, начинающиеся с
'From: '
(отказоустойчивые четыре Outlook и некоторые другие форматы ответов)
- Линии, начинающиеся с
'Sent from my iPhone'
- Линии, начинающиеся с
'Sent from my BlackBerry'
Числа 3 и 4 начинаются с 'вместо' равно ', потому что иногда пользователи скрипят строки вместе при аварии.
Мы стараемся быть более либеральными в том, чтобы убирать ответы, так как это гораздо больше раздражает (для нас) ответ мусора, чем исправлять недостающий текст.
У кого-нибудь есть другие форматы из дикой природы, которые они хотят разделить?
Ответ 2
Я не считаю, что вы можете сделать это надежно (подписи, используемые для начала с '--'
, но я этого больше не вижу). Возможно, вам лучше попросить людей ответить между заголовками текста, а затем просто отменить ответ? Он не изящный, но, возможно, более надежный.
например.
REPLY BETWEEN HERE -->
AND HERE -->
чтобы вы просто искали нужные заголовки выше и принимали какие-то промежуточные.
Ответ 3
Посмотрите на e-mail_reply_parser gem - https://github.com/github/email_reply_parser. Он справляется с этой проблемой.
Ответ 4
Если вы хотите что-то мощное и надежное, и не против читать академические публикации, вы можете проверить это:
Здесь главная страница для одного из авторов, с дополнительной информацией и некоторыми загрузками:
Ответ 5
Если вы можете предположить, что эти электронные письма находятся в виде простого текста, просто разделите строки, начинающиеся с " > " в качестве ответов, а строка "-" должна разграничить подпись. Но эти предположения могут не работать, поскольку не все люди используют интернет-программное обеспечение, которое соответствует правилам.
Ответ 6
Подход, который может использоваться только для сигнатуры (в дополнение к обнаружению __ или -), заключается в том, чтобы проверить, находится ли первое имя и/или фамилия отправителя на короткой строке (~ содержит от 3 до 4 слов, макс).
Имя отправителя находится в заголовке необработанного сообщения электронной почты, большую часть времени рядом с адресом электронной почты, например, в:
From: John Doe <[email protected]>
Это будет основано на предположении, что вы редко пишете свое имя в электронном письме, и если вы это сделаете, это, вероятно, в длинном предложении.
Конечно, будет некоторая ложь-положительная, но это может быть не большая проблема в зависимости от того, что вы делаете (мы используем ее для сбрасывания цитированного текста и подписи в кнопку gmail-style, поэтому переопределение не заканчивается чтобы потерять любой контент, он просто неуместен).
Ответ 7
Там действительно хорошая библиотека PHP, посвященная анализу электронной почты
http://williamdurand.fr/EmailReplyParser/
https://github.com/willdurand/EmailReplyParser
Ответ 8
рекомендуемый разделитель подписи - "-\n". Если люди следуют этой рекомендации, зачистки подписей должны быть легкими.