librown
@librown
На-все-руки-мастер и немного кодер

Как распарсить письмо и получить его текст на пхп?

Привет! Мой сервис отправляет клиентам на почту уведомления. В теле письма есть крупная кнопка "ОТВЕТИТЬ", которая посылает клиента на сайт, в личный кабинет, где клиенты и должны писать ответ. Но, некоторые клиенты повадились нажимать прямо в почтовом клиенте "ответить" - и пишут письмо с ответом. Пробовал писать в теле письма "это письмо отправлено автоматически, для ответа используйте кнопку выше", но не помогает.

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

На Хабре прочитал статью как это сделать: habrahabr.ru/post/126448, сделал. Теперь получаю в свой скрипт текст письма в base64, декодирую. И тут возникла проблема: как понять где заканчивается непосредственно текст ответа клиента и начинается цитирование письма.

Пример:

эти числа заняты

Среда, 3 июня 2015, 21:20 UTC от SiteName < info@sitename.com >:
>----------------------------------------------------------------------
>Здравствуйте, Виктория! Напоминаем, к вам поступила новая заявка на проживание.
>Подтвердите или отмените её. Не затягивайте, пожалуйста, с ответом — клиент ждет вашей реакции. Игнорирование заявок и вопросов приведет к снижению вашего рейтинга на сайте.


А еще может быть в письме клиента подпись (---с ув. Петя) - её не нужно учитывать.

Может есть какие готовые библиотеки для парсинга?
Спасибо.
  • Вопрос задан
  • 1812 просмотров
Решения вопроса 1
require_once('rfc822_addresses.php');
require_once('mime_parser.php');
require_once('simple_html_dom.php');
	
$mime = new mime_parser_class;

/* get information specific to this email */
		$overview = imap_fetch_overview($inbox,$email_number,0);
		$message = imap_fetchbody($inbox,$email_number,1);
		
		/* output the email header information */
		$output.= '<div class="toggler '.quoted_printable_decode(($overview[0]->seen ? 'read' : 'unread')).'">';
		if ($mime->Decode(Array('Data' => 'Subject: '.$overview[0]->subject), $decoded)) {
				if ($mime->Analyze($decoded[0], $results)) {
					$msg_subject = $results['Subject'];
				}
			}
		$sub		=	mb_convert_encoding($msg_subject, 'UTF-8', 'KOI8-R');
		$from		=	quoted_printable_decode($overview[0]->from);
		$date		=	quoted_printable_decode($overview[0]->date);
		$Sourse_des	=	$sub;
 		/* output the email body */
		
		$message	=	quoted_printable_decode($message);
		$html		=	str_get_html($message);


На здоровье.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы