Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 05.08.2008, 18:19   #1
HAMANN
Нуждающийся
 
Аватар для HAMANN
 
Регистрация: 05.08.2008
Сообщений: 73
Написано 11 полезных сообщений
(для 24 пользователей)
Счастье POP3

Ну значит приступим.
Через протокол POP3 сервер прослушивает порт 110. Когда клиент хочет использовать этот протокол, он должен создать TCP соединение с сервером. Когда соединение установлено, сервер отправляет приглашение. Затем клиент и POP3 сервер обмениваются информацией пока соединение не будет закрыто или прервано.
Ответы в POP3 состоят из индикатора состояния и ключевого слова, за которым может следовать дополнительная информация. Ответ заканчивается парой CRLF. Существует только два индикатора состояния: "+OK" - положительный и "-ERR" - отрицательный.
Ответы на некоторые команды могут состоять из нескольких строк. В этих случаях каждая строка разделена парой CRLF, а конец ответа заканчивается ASCII символом 46 (".") и парой CRLF.
POP3 сессия состоит из нескольких режимов. Как только соединение с сервером было установлено и сервер отправил приглашение, то сессия переходит в режим AUTHORIZATION (Авторизация). В этом режиме клиент должен идентифицировать себя на сервере. После успешной идентификации сессия переходит в режим TRANSACTION (Передача). В этом режиме клиент запрашивает сервер выполнить определённые команды. Когда клиент отправляет команду QUIT, сессия переходит в режим UPDATE. В этом режиме POP3 сервер освобождает все занятые ресурсы и завершает работу. После этого TCP соединение закрывается.
В общем это все теория. Приступим исключительно к практике.
Итак, открываем TCP соединение. Будем работать с POP3 сервером mail.ru (pop.mail.ru). Помним, что прослушивается порт 110. И прочтем ответ сервера, если соединение установлено.
OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 
WaitKey()
Вот наш результат:

Теперь POP3 сессия находится в режиме AUTHORIZATION. Клиент должен идентифицировать себя на сервере, используя команды USER и PASS. Сначала надо отправить команду USER, после которой в качестве аргумента следует имя пользователя. Если сервер отвечает положительно, то теперь необходимо отправить команду PASS, за которой следует пароль. Если после отправки команды USER или PASS сервер отвечает негативно, то можно попробовать авторизоваться снова или выйти из сессии с помощью команды QUIT.
Попробуем, я специально зарегил ящик [email protected] с паролем 12344321
OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex "
Print ReadLine$(tcp) 

WaitKey()

Итак, сервер ответил нам положительно. Теперь он ждет когда мы введем пароль. Не будем его томить.
OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp)) 

WaitKey()
Итак, наш результат:

Сервер ответил нам положительно и так же сообщил что в нашем ящике 1 письмо общим размером 13312 байт.
После успешной идентификации пользователя на сервере POP3 сессия переходит в режим TRANSACTION, где пользователь может передавать ниже следующие команды. После каждой из таких команд следует ответ сервера. Вот доступные команды в этом режиме:
Команда STAT
У этой команды нету аргументов. Ответ сервера следующий: +OK n s (где n-кол-во писем, а s-их общий размер.
Испробуем:
tcp=OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp)
 
WriteLine tcp,"STAT"
Print ReadLine$(tcp) 

WaitKey()
Результат:

Значит в нашем ящике 1 письмо, общим размером 13312 байта.
Команда: LIST [сообщение]
Если был передан аргумент, то сервер выдаёт информацию о указанном сообщении. Если аргумент не был передан, то сервер выдаёт информацию о всех сообщениях, находящихся в почтовом ящике. Сообщения, помеченные для удаления не перечисляются.
Попробуем (сначала без аргумента):
tcp=OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp) 

WriteLine tcp,"LIST"
While Not Eof (tcp)
Print ReadLine$(tcp) 
Wend

WaitKey()
Результат:

То есть в нашем ящике 1 сообщение. Общий размер 13312 байт. Далее идет перечень. Сообщение с номером 1 размер 12290 байт (учитываются только символы). В конце перечня ставится знак «.»
Теперь попробуем эту команду с параметром, номер сообщения, берем 1.
tcp=OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp) 

WriteLine tcp,"LIST 1"
While Not Eof (tcp)
Print ReadLine$(tcp) 
Wend

WaitKey()
Результат:

Ну думаю комментировать не нужно.
А теперь попробуем указать номер несуществующего письма. Допустим 2
tcp=OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp) 

WriteLine tcp,"LIST 2"
While Not Eof (tcp)
Print ReadLine$(tcp) 
Wend

WaitKey()
Результат:

Ошибка). Сервер сообщает что нету письма с номером 2 ((((.
Команда: RETR [сообщение]
После положительного ответа сервер передаёт содержание сообщения. Аргумент [сообщение] обязательный.
Пробуем:
tcp=OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp) 

WriteLine tcp,"RETR 1"
While Not Eof (tcp)
Print ReadLine$(tcp) 
Wend

WaitKey()
В общем то длиннющее письмо. Я заскриню тока начало и конец.


В конце ответа следует знак «.»
Команда: DELE [сообщение]
POP3 сервер помечает указанное сообщение как удалённое, но не удаляет его, пока сессия не перейдёт в режим UPDATE (то есть после этого всего надо отослать команду QUIT) я этого не делаю так как не желаю удалять это единственное письмо)).
Пример:
tcp=OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp) 

WriteLine tcp,"DELE 1"
While Not Eof (tcp)
Print ReadLine$(tcp) 
Wend

WaitKey()
Результат:

Команда: NOOP
Бесполезная команда)) Сервер отвечает всегда положительно и ничего не делает.
Пример:
tcp=OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp) 

WriteLine tcp,"NOOP"
Print ReadLine$(tcp) 

WaitKey()
Результат:

Ну и последняя команда RSET
Если какие - то сообщения были помечены для удаления, то с них снимается эта метка.
Пример (мы пометим письмо как удаленное, командой (DELE) и снимем удаление командой RSET):
tcp=OpenTCPStream("pop.mail.ru",110)
If Not tcp Then
	Print "Connection Faild."
	WaitKey
	End
EndIf

If Eof(tcp) Then
	Print "Failed."
	WaitKey
	End 
End If

Print ReadLine$(tcp) 

WriteLine tcp,"USER boolean_pop3_ex"
Print ReadLine$(tcp) 

WriteLine tcp,"PASS 12344321"
Print ReadLine$(tcp) 

WriteLine tcp,"DELE 1"
Print ReadLine$(tcp) 

WriteLine tcp,"RSET"
Print ReadLine$(tcp) 


WaitKey()
Результат:

Вот и все на этом. Удачи)
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо HAMANN за это полезное сообщение:
ABTOMAT (05.08.2008), Android (05.08.2008), FrankH (05.08.2008), H@NON (05.08.2008), HolyDel (05.08.2008)
Старый 05.08.2008, 18:21   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: POP3

HAMANN, спасибо!
(Offline)
 
Ответить с цитированием
Старый 05.08.2008, 18:29   #3
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: POP3

Молодец! Хороший тутор! Обязательно прочитаю!
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прием e-mail pop3 (sources) abcdef Основной форум 2 02.05.2009 19:42


Часовой пояс GMT +4, время: 01:51.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com