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]   

> Без описания
ViTYAi
Отправлено: 30 Ноября, 2009 - 06:29:00
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2009  


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




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

Работаю с POP3-сервером через сокеты.
Отправляю письмо, подключаюсь к серверу и считываю письмо. Тело письма состоит из нескольких строк:

//24355:091124:900212:++
(2):2050:2009:2009:2065:2071.145:2147:2147:2065:2070:2070:2070:2070:2070:2075:2117.377:2152:2140:2140:2140:2140:2125:2125:2125:2125:50317.522
(1001):36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:878.4
(1002):41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:42.5:42.5:43:43:44:45:46:46:46:46:46:46:1034
(1003):34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:816
(1004):105:105:105:105:105:108:108:108:108:108:108:108:108:108:108:108:108:108:105:105:105:105:105:105:2559
...
(40042):560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560==


Вывожу многострочное тело письма функцией get_data() и командой TOP (пробовал RETR):

PHP:
скопировать код в буфер обмена
  1. function get_data($soket)
  2. {
  3. $data="";
  4. while (!feof($soket)) {
  5. $buffer = chop(fgets($soket,1024));
  6. $data .= "$buffer\r\n";
  7. if(trim($buffer) == ".") break;
  8. }
  9. return $data;
  10. }
  11. fputs($soket,"TOP 3 100\r\n");
  12. $out = get_data($soket);
  13. echo $out;



Но выводится следующее:

//24355:091124:900212:++ (2):2050:2009:2009:2065:2071.145:2147:2147:2065:2070:2070:2070:2070:2070:= 2075:2117.377:2152:2140:2140:2140:2140:2125:2125:2125:2125:50317.522 (1001):36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:3= 6.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:36.6:878.4 (1002):41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:41.5:42.5:4= 2.5:43:43:44:45:46:46:46:46:46:46:1034 (1003):34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:34:= 34:34:816 (1004):105:105:105:105:105:108:108:108:108:108:108:108:108:108:108:108:10= 8:108:105:105:105:105:105:105:2559
...
(40042):560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:560:5= 60:560:560:560:560:560:560:560=3D=3D


то есть убрались переносы строк, появились символы "= " (или это и есть переносы, но не там, где надо почему-то), и в последней строке символ "==" заменился на символ "=3D=3D"...
Как можно получить в переменную многострочное тело письма с переносами строк (в том же виде, в каком отправляется), чтобы потом функцией explode() разбить это сообщение на строки для анализа???
 
 Top
Nestor
Отправлено: 30 Ноября, 2009 - 11:42:59
Post Id



Частый гость


Покинул форум
Сообщений всего: 220
Дата рег-ции: Март 2009  


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






-----
Aurus CMS
 
 Top
ViTYAi
Отправлено: 30 Ноября, 2009 - 14:59:09
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2009  


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






Там же работают только с заголовками писем:
PHP:
скопировать код в буфер обмена
  1. write_pop3_response($socket, 'TOP '.$i.' 0');


А как работать с многострочным телом письма?
Стандарт MIME подразумевает разбиение строк в теле письма по 76 символов с использованием "мягких переносов" (знак "=")... А как обработать эту ситуацию?
 
 Top
JustUserR
Отправлено: 30 Ноября, 2009 - 20:58:58
Post Id



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


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


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




ViTYAi А это случаное не URL-decoded символы только со знаком = вместо % И вообще где сами заголовки письма - ведь они обычно multipart
И про описание протокола POP3 можно почитать тут http://www[dot]codenet[dot]ru/webmast/pop3.php http://webi[dot]ru/webi_files/26_14_f[dot]html http://base[dot]vingrad[dot]ru/view/1693[dot][dot][dot]e-protokola-POP3 http://www[dot]oszone[dot]net/1390/


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ViTYAi
Отправлено: 01 Декабря, 2009 - 12:23:51
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2009  


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




JustUserR пишет:
А это случаное не URL-decoded символы только со знаком = вместо %
затрудняюсь ответить, а если так, то что с ними делать?
JustUserR пишет:
И вообще где сами заголовки письма - ведь они обычно multipart
заголовки письма:
CODE (text):
скопировать код в буфер обмена
  1. Received: by mail1.nske.ru
  2. id <01CA719E.34A502A2@mail1.nske.ru>; Mon, 30 Nov 2009 15:19:23 +0600
  3. MIME-Version: 1.0
  4. Content-Type: multipart/alternative;
  5. boundary"----__NextPart_001_01CA719E.34A502A2"
  6. Content-class: urn:content-classes:message
  7. X-MimeOLE: Produced By Microsoft Exchange V6.5
  8. Subject: Tema
  9. Date: Mon, 30 Nov 2009 15:19:11 +0600
  10. Message-ID: <720D41E8C569D84EB3A419EFB58702EF460211@mail1.nske.ru>
  11. X-MS-Has-Attach:
  12. X-MS-TNEF-Correlator:
  13. Thread-Topic: Tema
  14. Thread-Index: Acpxni2OgXig6FfNSvmdxhbmcTuVKA
  15. From: ?koi8-r?B?8MHXzM/XIPcu9y4?
  16. To: ?koi8-r?B?6evtICLwydLBzcnEwSI?
  17.  
  18. This is a multi-part message in MIME format.
  19.  
  20. ------__NextPart_001_01CA719E.34A502A2
  21. Content-Type: text/plain;
  22. charset"koi8-r"
  23. Content-Transfer-Encoding: quoted-printable


JustUserR пишет:
И про описание протокола POP3 можно почитать тут http://www[dot]codenet[dot]ru/webmast/pop3.php http://webi[dot]ru/webi_files/26_14_f[dot]html http://base[dot]vingrad[dot]ru/view/1693[dot][dot][dot]e-protokola-POP3 http://www.oszone.net/1390/

Читал...
Про ограничение строки в 76 символов написано в стандарте MIME...
У меня письмо без вложений и нформация содержится в теле письма!
Не пойму, как от этого избавиться?
 
 Top
JustUserR
Отправлено: 01 Декабря, 2009 - 12:44:30
Post Id



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


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


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




ViTYAi Да это обычное multipart-сообщение - соответственно чтобы вручную его считать необходимо разбить его на части по boundaryпотом поределить тип части писать и раскодировать содержимое для текстовых частей (Вроде как = заменяется на % и делается фукнция urldecode)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ViTYAi
Отправлено: 02 Декабря, 2009 - 04:24:30
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2009  


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




JustUserR пишет:
чтобы вручную его считать необходимо разбить его на части по boundary

что такое boundary? Граница чего?
JustUserR пишет:
поределить тип части

Что за тип? У меня письм без вложений, просто многострочное сообщение в теле письма (текст).
JustUserR пишет:
раскодировать содержимое для текстовых частей (Вроде как = заменяется на % и делается фукнция urldecode)

Пробовал раскодировать тело письма, предварительно заменив "=" на "%".
В итоге "=3D=3D" заменилось на "==", но "мягкие переносы" строк остались...
 
 Top
JustUserR
Отправлено: 02 Декабря, 2009 - 21:51:43
Post Id



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


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


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




ViTYAi пишет:
Что такое boundary? Граница чего?
Что за тип? У меня письм без вложений, просто многострочное сообщение в теле письма (текст).
Насколько мне известно исторически сложилось все практически все email письма даже без вложений пересылаются в multipart-формате
Что такое по сути multipart-формат - обычно какойто высылаемый серверов контент идет в следующем виде - заголовки (В том числе тип контента + дата время + длина контента + другая инфорация) + пустая строка + идет контент который может содержать любые символы - ибо все равно он ограничен известной длиной
Можно несколько пересылаемый данных со своими собственными заголовками всунуть в один общий multipart-формат - при это формат основного контент multipart а внутри него уже более мелкие контены работающеие по вышеуказанной схеме Но как их разделить между собой - ведь они внутри могут содержеать абсолютьно произвольные данные
Именно поэтому придумали boundary - разделитель-строка которая указывается в multipart-сообщении и потом выводится в формате --СТРОКА для разделениме передаваемого контента

ViTYAi пишет:
Пробовал раскодировать тело письма, предварительно заменив "=" на "%".
В итоге "=3D=3D" заменилось на "==", но "мягкие переносы" строк остались...
Что касается вашей основной проблемы у меня есть несколько идей
Когда я увидел ваш е сообщение то заметил что в нем символы обозначаются не 2 а 4 цифрами что похоже не на ASCII а на юникод - то есть по сути вы работаете с multibyte-строками которые для своей работы требудет отдельных функций
Так что замену вероятно надо проводить с помощью них - часть информации есть тут http://php.su/functions/?cat=mbstring
Также вероятно у вас имеются езе какието проблемы с кодировками


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB