3.6.10. Транзакции РОР3

После того как программа установила TCP-соединение с портом протокола РОР3 (официальный номер 110), необходимо послать команду USER с именем пользователя в качестве параметра. Если ответ сервера будет +ОК, нужно послать команду PASS с паролем этого пользователя:

CLIENT:          USER kcope

SERVER:         +OK

CLIENT:          PASS secret

SERVER: .       +OK kcope’s maildrop has 2 messages (320 octets)

(В почтовом ящике kcope есть 2 сообщения (320 байтов) …)

После того как стадия авторизации окончена, обмен переходит на стадию транзакции. В следующих примерах демонстрируется возможный обмен сообщениями на этой стадии. Команда STAT возвращает количество сообщений и количество байтов в сообщениях:

CLIENT:         STAT

SERVER:        +OK  2   320

Команда LIST (без параметра) возвращает список сообщений в почтовом ящике и их размеры:

CLIENT:          LIST

SERVER:         +OK 2 messages (320 octets)

SERVER:         1 120

SERVER:         2 200

SERVER:         . …

Команда LIST с параметром возвращает информацию о заданном сообщении:

CLIENT:        LIST  2

SERVER:        +OK  2   200   . . .

CLIENT:        LIST   3

SERVER:   -ERR no such message, only 2 messages in maildrop

Команда TOP возвращает заголовок, пустую строку и первые десять строк тела сообщения:

CLIENT:          TOP 10

SERVER:         +OK

SERVER:         <the POP3 server sends the headers of the message, a blank line, and the first 10 lines of the message body>

(сервер POP высылает заголовки сообщений, пустую строку и первые десять строк тела сообщения)

SERVER:         ….

CLIENT:   TOP 100

SERVER:   -ERR no such message

Команда NOOP не возвращает никакой полезной информации, за исключением позитивного ответа сервера. Однако позитивный ответ означает, что сервер находится в соединении с клиентом и ждет запросов:

CLIENT:        NOOP

SERVER:         +ОК

Следующие примеры показывают, как сервер РОР3 выполняет действия. Например, команда RETR извлекает сообщение с указанным номером и помещает его в буфер местного UA:

CLIENT:   RETR 1

SERVER:   +OK 120 octets

SERVER:   <the POP3 server sends the entire message here>

(РОР3-сервер высылает сообщение целиком)

SERVER:         .

Команда DELE отмечает сообщение, которое нужно удалить:

CLIENT:   DELE 1

SERVER:   +OK message 1 deleted …

(сообщение 1 удалено)

CLIENT:   DELE 2

SERVER:   -ERR message 2 already deleted

(сообщение 2 уже удалено)

Команда RSET снимает метки удаления со всех отмеченных ранее сообщений:

CLIENT:        RSET

SERVER:   +OK maildrop has 2 messages (320 octets)

(в почтовом ящике 2 сообщения (320 байтов))

Как и следовало ожидать, команда QUIT закрывает соединение с сервером:

CLIENT:          QUIT

SERVER:         +OK dewey POP3 server signing off

CLIENT:          QUIT

SERVER:         +OK dewey POP3 server signing off (maildrop empty)

CLIENT: .        QUIT

SERVER:         +OK dewey POP3 server signing off (2 messages left) . . .

Обратите внимание на то, что отмеченные для удаления сообщения на самом деле не удаляются до тех пор, пока не выдана команда QUIT и не началась стадия обновления. В любой момент в течение сеанса клиент имеет возможность выдать команду RSET, и все отмеченные для удаления сообщения будут восстановлены.

Другими словами, после того как SMTP или РОР3-клиент установят соединение, они подают команду и ожидают ответа от сервера. Как только ответ получен, процесс повторяется снова: выдача команды — ожидание ответа — получение ответа. Протокол SMTP предназначен для передачи сообщений, а РОР3 — для получения сообщений.