|
|
|
| Подскажите как это все исполнить грамотно.
Вот нашел протокол POP3 http://zeus.sai.msu.ru:7000/nets/semenov/4/44/pop34414.shtml
по нему я и собираюсь этому научиться, может уже и начал неправильно?
Короче, там сказано, что
USER name, где name - характеризует почтовый ящик сервера.
Команда используется на фазе авторизации или после неудачного завершения команд USER
или PASS. При авторизации клиент должен сначала послать команду USER и лишь после
получения положительного отклика команду PASS. Команда может вызвать следующие отклики:
+OK name is a valid mailbox
-ERR never heard of mailbox name
Примеры использования команды USER:
К: USER frated
С: -ERR sorry, no mailbox for frated here
...
К: USER mrose
С: +OK mrose is a real hoopy frood
|
как все это отослать и куда честно сказать не очень представляю :(. Но очень хочется :)
1. Я не понимаю как отослать эту команду и куда и на какой порт. Я делал что-то типа
$fp = fsockopen("pop.list.ru", 80, $errno, $errstr);
|
почему 80 я не знаю :( и вообще как определить номер порта на какой отсылать?
2. Я не знаю как общаться с сервером. Как отправить и получить запрос. Я пытался что-то сделать с помощью fgets() и fwrite(), но ничего путного из этого не вышло :(
Короче, если не знаете как получить почту, то объясните хотябы как "общаться" с удаленным сервером.
P.S. Пишите, если не сложно, на простом языке, а то я в этой теме полный 0.
P.P.S. Если глупость где сморозил ногами не бить :)
Заранее ОГРОМНОЕ спасибо!!! | |
|
|
|
|
|
|
|
для: Ziq
(11.10.2006 в 21:47)
| | Хм... почту лучше с помощью IMAP получать - она всё равно на сервере хранится. | |
|
|
|
|
|
|
|
для: cheops
(11.10.2006 в 22:37)
| | Честно говоря я не знаю просто что лучше. Где-то читал на форуме, что самый простой способ это POP3 вот и решил начать с простого. | |
|
|
|
|
|
|
|
для: Ziq
(11.10.2006 в 22:42)
| | порт сервера POP3 - 110.
В остальном Вы идете в верном направлении.
Устанавливать соединение нужно с помощью fsockopen
Отправлять команды - с помощью fwrite
Принимать ответы - с помощью fgets
Обратите внимание на то, что некоторые команды выдают ответ одной строкой,
а некоорые другие - многострочный ответ, заканчивающийся строкой с точкой. | |
|
|
|
|
|
|
|
для: Trianon
(12.10.2006 в 09:29)
| | попытался что-то сделать короче вот
<?
$fp = fsockopen("pop.list.ru", 110, $errno, $errstr);
if(!$fp) echo $errstr.'dd';
fwrite($fp, "USER ziq@list.ru");
while (!feof($fp)) {
echo fgets($fp, 128);
}
f
echo fgets($fp, 128);
}
fclose($fp);
?>
|
ответ такой
+OK
Fatal error: Maximum execution time of 30 seconds exceeded in D:\www\lab\index.php on line 7
|
Что не так делаю? Помогите, пожалуйста. | |
|
|
|
|
|
|
|
для: Ziq
(12.10.2006 в 22:36)
| | while (!feof($fp)) здесь не пройдет ..
в данном случае можно попробовать просто fgets($fp);
или послать кучу команд, закрыть соединение и читать уже while (!feof($fp)) | |
|
|
|
|
|
|
|
для: kasmanaft
(12.10.2006 в 22:40)
| | ... | |
|
|
|
|
|
|
|
для: kasmanaft
(12.10.2006 в 22:40)
| | изменил код на
<?
$fp = fsockopen("pop.list.ru", 110, $errno, $errstr);
if(!$fp) echo $errstr.'dd';
fwrite($fp, "USER ziq@list.ru");
echo fgets($fp, 128)."a";
fwrite($fp, "PASS sdfdsfdsf");
echo fgets($fp, 128)."s";
fwrite($fp, "LIST");
echo fgets($fp, 128)."d";
fwrite($fp, "QUIT");
echo fgets($fp, 128)."f";
fclose($fp);
?>
|
ответ
+OK a
Fatal error: Maximum execution time of 4 seconds exceeded in D:\www\lab\index.php on line 11
|
Вы говорили закрыть соединение и читать уже while (!feof($fp)). Если закрыть соединение (fclose()), то feof() выдает ошибку. | |
|
|
|
|
|
|
|
для: Ziq
(12.10.2006 в 23:01)
| | Уберите команду LIST
Это команда с многострочным ответом, и его Вы до конца не считываете. Отсюда и проблемы.
Кроме того, Вы переусердствовали с ограничением: 4 секунды на всю сессию может и не хватить. | |
|
|
|
|
|
|
|
для: Ziq
(12.10.2006 в 23:01)
| | >> закрыть соединение и ....
я имел ввиду QUIT послать ...
а LIST можно читать до тех пор, пока не встретим точку:
while (trim($str) != '.')
$str = fgets($fp, 128);
|
еще вы забыли про " \n " ... "Maximum execution time" тут наверное из-за етого
fwrite($fp, "USER ziq@list.ru\n");
|
(аналогично в остальных случаях) | |
|
|
|
|
|
|
|
для: kasmanaft
(13.10.2006 в 12:35)
| | Да, действительно. Почти наверняка сервер ожидает конца строки.
Только не \n а \r\n
fwrite($fp, "USER ziq@list.ru\r\n");
|
| |
|
|
|