Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: POP3 как найти приложение в почте?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Webtest
Отправлено: 23 Июня, 2014 - 12:18:44
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Здравствуйте.

Подскажите пожалуйста, как можно найти вложение при подключении к почте через РОР3?
Вот код, который получает шапку и текст сообщения:
PHP:
скопировать код в буфер обмена
  1.  
  2. $msg = '';
  3. $head = '';
  4. while (false !== ($get = fgets($connect))) {
  5.         if ($get === ".\r\n") {
  6.                 break;
  7.         }
  8.         if ($get == "\r\n" && !$msg) {
  9.                 $msg = ' ';
  10.         }
  11.         if (!$msg) {
  12.                 $head .= $get . '<br>';
  13.         } else {
  14.                 $msg .= $get;
  15.         }
  16. }
  17.  

Если в письме есть вложение, то в выводе сообщения показывает след. строки:
Цитата:
------==--bound.39099.web25j.yandex.ru
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=koi8-r

текст ОДТ ДОК DOC TEST
------==--bound.39099.web25j.yan dex.ru
Content-Disposition: attachment;
filename="test.odt"
Content-Transfer-Encoding: base64

Это я сам себе картинку и ОДТ файл отправил для проверки, как видите тут никаких ссылок на сам файл нет. А как их получить?
 
 Top
caballero
Отправлено: 23 Июня, 2014 - 12:30:40
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




там не ссылки на файл а сам файл закодированный в base64


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Мелкий Супермодератор
Отправлено: 23 Июня, 2014 - 12:33:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Webtest пишет:
------==--bound.39099.web25j.yan dex.ru
Content-Disposition: attachment;
filename="test.odt"
Content-Transfer-Encoding: base64

Вот оно, вложение.
Далее должен идти приличный по размеру кусок в base64

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


-----
PostgreSQL DBA
 
 Top
Webtest
Отправлено: 23 Июня, 2014 - 12:35:15
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




caballero пишет:
там не ссылки на файл а сам файл закодированный в base64

А какую строчку оттуда надо декодировать, чтобы получить файл?
У меня автоматически декод идет, и не выводит никакие файлы, могу весь код скинуть.
(Добавление)
Вот код, если кому интересно:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         $address = 'pop3.yandex.ru';
  4.         $port = 110;
  5.         $login = 'Webtestest@yandex.ru';
  6.         $password = '***';
  7.         $connect = fsockopen($address, $port, $errno, $errstr);
  8.         if (!$connect) {
  9.                 die("Не удалось подключится к серверу: [$errno] $errstr");
  10.         } else {
  11.                 echo 'Подключение к серверу удалось.' . '<br>';
  12.         }
  13.         $info = fgets($connect, 1024) . "<br>";
  14.         if (strpos($info, '+OK') !== 0) {
  15.                 die('Ошибка подключения.');
  16.         } else {
  17.                 echo 'Подключение к почте: ' . $login . ' удалось.' . '<br>';
  18.         }
  19.         fwrite($connect, "USER $login\r\n");
  20.         $user = fgets($connect, 1024) . "<br>";
  21.         fwrite($connect, "PASS $password\r\n");
  22.         $pass = fgets($connect, 1024) . "<br>";
  23.         if (strpos($pass, '+OK') !== 0) {
  24.                 die('Пароль неверный.');
  25.         } else {
  26.                 echo 'Пароль верный.' . '<br>';// . $pass;
  27.         }
  28.         fwrite($connect, "STAT \r\n");
  29.         $status = fgets($connect, 1024) . "<br>";
  30.         preg_match('/[\\s][0-9]+[\\s]/', $status, $numberOfLetters);
  31.         echo 'Количество писем в почтовом ящике: ' . $numberOfLetters[0];
  32.         echo '<form method="post" action="post.php">';
  33.         for ($x = (int)$numberOfLetters[0]; $x >= (int)$numberOfLetters[0] - 20; $x--) {
  34.         //$x = '26';
  35.                 $letterThemes = "TOP {$x} 10\r\n";
  36.                 fwrite($connect, $letterThemes);
  37.                 $get = fgets($connect, 1024);
  38.                 $msg = '';
  39.                 $head = '';
  40.                 while (false !== ($get = fgets($connect))) {
  41.                         if ($get === ".\r\n") {
  42.                                 break;
  43.                         }
  44.                         if ($get == "\r\n" && !$msg) {
  45.                                 $msg = ' ';
  46.                         }
  47.                         if (!$msg) {
  48.                                 $head .= $get . '<br>';
  49.                         } else {
  50.                                 $msg .= $get;
  51.                         }
  52.                 }
  53.                 //echo trim($head);
  54.                 preg_match_all('/(Subject:.*=\?.*\?[a-z]\?.*\?=)/i', $head, $fullCode);                
  55.                 if (!count($fullCode[0])) {
  56.                         $subjectPosStart = strpos($head, 'Subject: ');
  57.                         $subjectSubstr = substr($head, $subjectPosStart);
  58.                         $subjectPosEnd = strpos($subjectSubstr, '<br>');
  59.                         $subjectFull = substr($head, $subjectPosStart, $subjectPosEnd);
  60.                         $subjectReplaced = str_replace('Subject: ', '', $subjectFull);
  61.                         echo "<br><button class='subject' name='message' value=" . $x . ">Письмо №" . '<--->' . "$x: " . "$subjectReplaced" . '</button>';
  62.                         if ($_POST['message'] == $x) {
  63.                                 echo '<br><textarea class="letter">' . $msg . '</textarea>';
  64.                         }
  65.                         // . base64_decode($msg)
  66.                 } else {
  67.                         preg_match('/\?(.*)\?([a-z])\?(.*)\?=/i', $fullCode[0][0], $strCode);  
  68.                         if ($strCode[2] == 'B') {      
  69.                                 $strDecodeB = base64_decode($strCode[3]);
  70.                                 $strIconvB = iconv("$strCode[1]", "UTF-8", $strDecodeB);
  71.                                 echo "<br><button class='subject' name='message' value=" . $x . ">Письмо №" . "$x: " . "$strIconvB" . '</button>';
  72.                                 if ($_POST['message'] == $x) {
  73.                                         //echo mb_detect_encoding($msg);
  74.                                         echo '<br><textarea class="letter">' . iconv("$strCode[1]", "UTF-8", $msg) . '</textarea>';
  75.                                 }
  76.                         } elseif ($strCode[2] == 'Q') {
  77.                                 $strDecodeQ = quoted_printable_decode($strCode[3]);
  78.                                 $strIconvQ = str_replace('_', ' ', (iconv("$strCode[1]", "UTF-8", $strDecodeQ)));
  79.                                 echo "<br><button class='subject' name='message' value=" . $x . ">Письмо №" . "$x: " . "$strIconvQ" . '</button>';
  80.                                 if ($_POST['message'] == $x) {
  81.                                         //echo mb_detect_encoding($msg);
  82.                                         echo '<br><textarea class="letter">' . iconv("$strCode[1]", "UTF-8", $msg) . '</textarea>';
  83.                                 }
  84.                         }
  85.                 }
  86.         }
  87.         echo '</form>';
  88. ?>
  89.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB