Добрый день! Делаю получение писем pop3 с сервера, а именно нужно подключиться, узнать сколько писем, вытащить все что есть из первого письма, это переменная $answer, включая прикрепленные файлы и правильность перекодирования заголовков письма и самого cодержания (тела) письма. Задача полностью разобрать письмо и вывести эти части на экран в браузере.Нужно сделать помимо того, что есть еще: - Перекодировку Темы письма - Найти и перекодировать Содержание (Тело) письма - Найти и сохранить прикрепленные файлы письма - Подключение к Imap c SSL / TLS - Возможно, что-то еще вывести ... Вот код, с рабочим примером Код | <?php // Включаем библиотеку mime parser require_once('receipt/rfc822_addresses.php'); require_once('receipt/mime_parser.php');
$mime = new mime_parser_class;
error_reporting(E_ALL ^ E_WARNING); ob_implicit_flush();
// Email хостинг провайдера получил здесь // http://api.hostinger.com.ua/redir/401579
$address = "mx1.hostinger.com.ua"; // адрес pop3-сервера $port = "110"; // порт (стандартный pop3 - 110)
$login = "[email protected]"; // логин к ящику $pwd = "admin1234567"; // пароль к ящику
try { // Создаем и соединяем сокет к серверу echo '<p>Соединение с \''.$address.':'.$port.'\' ... '; $socket = fsockopen($address, $port, $errno, $errstr); if (!$socket) { throw new Exception('fsockopen() failed: '.$errstr."<br>"); } echo "открыто! </p>"; // Читаем +OK read_pop3_answer($socket);
// Делаем авторизацию echo '<p>Авторизация ... ';
write_pop3_response($socket, 'USER '.$login); read_pop3_answer($socket); // ответ сервера write_pop3_response($socket, 'PASS '.$pwd); read_pop3_answer($socket); // ответ сервера
echo "прошла успешно! </p>"; // Определяем кол-во сообщений в ящике и общий размер write_pop3_response($socket, 'STAT'); $answer = read_pop3_answer($socket); // ответ сервера preg_match('!([0-9]+)[[:space:]]([0-9]+)!is', $answer, $matches); $total_count = $matches[1]; echo "<p>".'Всего сообщений: <strong>'.$total_count."</strong></p>"; if ($total_count > 0) { echo '<p>Общий размер: <strong>'.ceil($matches[2] / 1024)." Kb</strong></p>"; } $iii = 0; // Просматриваем параметры каждого сообщения for ($i = 1; $i <= $total_count; $i++) { write_pop3_response($socket, 'TOP '.$i.' 0'); $answer = read_pop3_answer($socket, true); write_pop3_response($socket, 'LIST '.$i); $answer2 = read_pop3_answer($socket); // Линия echo '<HR NOSHADE WIDTH="100%" COLOR="#023C47" SIZE="10">'; // Все сообщение echo "<p>СООБЩЕНИЯ $i НАЧАЛО answer</p>"; echo "<pre style=' font-size:20px; font-family:Calibri; padding-left: 6px;'>answer: $answer</pre>"; echo "<p>СООБЩЕНИЯ $i КОНЕЦ answer</p>"; // Определяем тему сообщения preg_match('!Subject:[[:space:]]+(.*?)\n+.*!is', $answer, $matches); $msg_subject = $matches[1]; echo '<p>Сообщение '.$i.' - Тема: <strong>'.$msg_subject."</strong></p>"; // Определяем содержание сообщения if (preg_match("!Content preview!ism",$answer)) { preg_match('!Content preview:[[:space:]]+(.*?)\[...\]!is', $answer, $matches); $msg_content_preview = $matches[1]; } if(!isset($msg_content_preview)) { $msg_content_preview = "-"; // [Name: Name] } echo '<p style="width:1000px;">Сообщение '.$i.' - Содержание: <strong>'.$msg_content_preview."</strong></p>"; // Определяем дату сообщения preg_match('!Date:[[:space:]]+(.*?)\n+.*!is', $answer, $matches); $msg_date_answer = date('d.m.Y H:i:s', strtotime($matches[1])); echo '<p>Сообщение '.$i.' - Дата: <strong>'.$msg_date_answer."</strong></p>"; // Определяем отправителя сообщения Return preg_match('!Return-path:[[:space:]]+(.*?)\n+.*!is', $answer, $matches); preg_match('|<(.*?)>|is', $matches[1], $matches3); $return_path = $matches3[1]; echo '<p>Сообщение '.$i.' - Отправитель (Return-path): <strong>'.$return_path."</strong> </p>"; // Определяем отправителя сообщения From preg_match('!From:[[:space:]]+(.*?)\n+.*!is', $answer, $matches1); preg_match('|<(.*?)>|is', $matches1[1], $matches2);
// Определяем тип сообщения preg_match('!Content-Type:[[:space:]]+(.*?)\n+.*!is', $answer, $matches); $msg_type = $matches[1]; echo '<p> Сообщение '.$i.' - Тип: <strong>'.$msg_type."</strong></p>"; $ctype = split(";",$msg_type); $types = split("/",$ctype[0]); $maintype = trim(strtolower($types[0])); // text или multipart $subtype = trim(strtolower($types[1])); // а это подтип(plain, html, mixed)
// Определяем получателя сообщения preg_match('!To:[[:space:]]+(.*?)\n+.*!is', $answer, $matches); $msg_SetFrom_email = $matches[1]; echo '<p> Сообщение '.$i.' - Получатель: <strong>'.$msg_SetFrom_email."</strong></p>"; // Определяем размер сообщения preg_match('!^\+[A-Za-z]+[[:space:]]+[0-9]+[[:space:]]+([0-9]+)!is', $answer2, $matches); $msg_size = ceil($matches[1] / 1024); echo '<p> Сообщение '.$i.' - Размер: <strong>'.$msg_size."</strong> Kb</p>";
} echo '<HR NOSHADE WIDTH="100%" COLOR="#023C47" SIZE="10">'; // Отсоединяемся от сервера echo "<p>".'Соединение ... '; write_pop3_response($socket, 'QUIT'); read_pop3_answer($socket); // ответ сервера echo "закрыто.</p>"; } catch (Exception $e) { echo "\nError: ".$e->getMessage(); }
if (isset($socket)) { fclose($socket); }
// Функция для чтения ответа сервера. Выбрасывает исключение в случае ошибки function read_pop3_answer($socket, $top = false) { $read = fgets($socket); if ($top) { // Если читаем заголовки $line = $read; while (!ereg("^\.\r\n", $line)) { $line = fgets($socket); $read .= $line; } } if ($read{0} != '+') { if (!empty($read)) { throw new Exception('<p>POP3 failed: '.$read."</p>"); } else { throw new Exception('<p>Unknown error'."</p>"); } } return $read; }
// Функция для отправки запроса серверу function write_pop3_response($socket, $msg) { $msg = $msg."\r\n"; fwrite($socket, $msg); } echo "</div>"; ?>
|
В БРАУЗЕРЕ ВЫГЛЯДИТ ТАК Цитата | Соединение с 'mx1.hostinger.com.ua:110' ... открыто!
Авторизация ... прошла успешно!
Всего сообщений: 2
Общий размер: 5 Kb
СООБЩЕНИЯ 1 НАЧАЛО answer answer: +OK Return-Path: X-Original-To: [email protected] Delivered-To: [email protected] Received: from f140.mail.ru (f140.mail.ru [94.100.178.196]) by mx1.main-hosting.eu ([Main-Hosting.eu Mail System]) with ESMTP id CC70D4BC4134 for ; Thu, 2 May 2013 03:59:15 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail; h=Content-Type:Message-ID:Reply-To:Date:Mime-Version:Subject:To:From; bh=G5kBvrn8IzQ/4mo6nuwdMwVRdRkiJw2yLrLESE313eQ=; b=rAcU5I7WpRslMAYx4EtlTvr9jUc1QZzveJzPxn0CdA6fq6KMCJ/zKB3KKsuQFdBc633kluQlawSAiJDiuawPtTQ0iaagtEnrYGLClSsFW5FBQ7GotbIVbOFhMYXcgy9L; Received: from mail by f140.mail.ru with local (envelope-from ) id 1UXoQ6-0003NL-M7 for [email protected]; Thu, 02 May 2013 11:59:14 +0400 Received: from [94.179.221.66] by e.mail.ru with HTTP; Thu, 02 May 2013 11:59:14 +0400 From: =?UTF-8?B?0JLQu9Cw0LTQuNC80LjRgCDQntCz0L3QtdCy0L7QuQ==?= To: [email protected] Subject: =?UTF-8?B?0KLQtdC80LAg0L7RgiB2bGFkaW1pcl9vZ25ldm9pQG1haWwucnU=?= Mime-Version: 1.0 X-Mailer: Mail.Ru Mailer 1.0 X-Originating-IP: [94.179.221.66] Date: Thu, 02 May 2013 11:59:14 +0400 Reply-To: =?UTF-8?B?0JLQu9Cw0LTQuNC80LjRgCDQntCz0L3QtdCy0L7QuQ==?= X-Priority: 3 (Normal) Message-ID: <[email protected]> Content-Type: multipart/alternative; boundary="--ALT--ckEmDa3L1367481554" X-Spam: Not detected X-Mras: Ok
.
СООБЩЕНИЯ 1 КОНЕЦ answer
Сообщение 1 - Тема: =?UTF-8?B?0KLQtdC80LAg0L7RgiB2bGFkaW1pcl9vZ25ldm9pQG1haWwucnU=?=
Сообщение 1 - Содержание: -
Сообщение 1 - Дата: 02.05.2013 10:59:14
Сообщение 1 - Отправитель (Return-path): [email protected]
Сообщение 1 - Тип: multipart/alternative;
Сообщение 1 - Получатель: [email protected]
Сообщение 1 - Размер: 3 Kb
СООБЩЕНИЯ 2 НАЧАЛО answer answer: +OK Return-Path: X-Original-To: [email protected] Delivered-To: [email protected] Received: from mail-wg0-f48.google.com (mail-wg0-f48.google.com [74.125.82.48]) by mx1.main-hosting.eu ([Main-Hosting.eu Mail System]) with ESMTP id 39FE04BC4149 for ; Thu, 2 May 2013 06:22:18 -0400 (EDT) Received: by mail-wg0-f48.google.com with SMTP id f11so389824wgh.15 for ; Thu, 02 May 2013 03:22:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=S+i/3McUv1MIdeEnpC59k5yBeCMBOoqJkfaETp/zT+A=; b=h4S+RVQGV7C/VV/moVe2EEMHUSwHm7coWWZ+gCs9teM+qZFM/XW6XaY/tJIKlYLdAv wr/DPjN87k4w5ie0w2dlLnA5FYeoav35gc961jZA6i+clrxUPoGnWepn9QCobJWr8dnz 3V31bwdXrAv4c5Y8N+Q24WqUqhKomkA4nZPxgt6mPpil5JWj+l1azu7EQtelToIdMeY3 NDtVIZjr1I4xuUzhdP4OU734vMFPizVt1ItE9y3rfwg1eNFOqSWAEwD1qD2mVEJy8H4M ihVZLV+mpZGHSKBYPw/rLqDp2SgDRBfp73AdhdK5E3x2VXE+u+v3umK65G6glOoklElC knyQ== MIME-Version: 1.0 X-Received: by 10.194.71.103 with SMTP id t7mr6963200wju.38.1367490137858; Thu, 02 May 2013 03:22:17 -0700 (PDT) Received: by 10.194.110.229 with HTTP; Thu, 2 May 2013 03:22:17 -0700 (PDT) Date: Thu, 2 May 2013 13:22:17 +0300 Message-ID: Subject: =?KOI8-R?B?8NLP18XSy8EgUEhQINPL0snQ1ME=?= From: =?KOI8-R?B?98zBxMnNydIg78fOxdfPyg==?= To: [email protected] Content-Type: multipart/mixed; boundary=047d7bd91760e6a94904dbb99b3e
.
СООБЩЕНИЯ 2 КОНЕЦ answer
Сообщение 2 - Тема: =?KOI8-R?B?8NLP18XSy8EgUEhQINPL0snQ1ME=?=
Сообщение 2 - Содержание: -
Сообщение 2 - Дата: 02.05.2013 13:22:17
Сообщение 2 - Отправитель (Return-path): [email protected]
Сообщение 2 - Тип: multipart/mixed; boundary=047d7bd91760e6a94904dbb99b3e
Сообщение 2 - Получатель: [email protected]
Сообщение 2 - Размер: 3 Kb
Соединение ... закрыто.
|
Архив рабочего кода Получение писем pop3 с сервера здесь http://iaa.besaba.com/pop3.rarЕсли у Вас есть лучшее или готовое решение данной задачи, то выкладывайте для общего обозрения, буду рад протестировать.
|