rd_45.134-2000 (524304), страница 6
Текст из файла (страница 6)
Сервер переходит в состояние TRANSACTION в случае успешной идентификации клиента и успешного открытия почтового ящика.
Если сервер получает команду QUIT, он должен перейти в состояние UPDATE.
В состоянии TRANSACTION должны быть реализованы следующие команды: STAT, LIST, RETR, DELE, NOOP, RSET, QUIT.
2.2.1.3. Состояние UPDATE
Сервер переходит в состояние UPDATE в случае получения команды QUIT в состоянии TRANSACTION. В состоянии UPDATE (и только в этом состоянии) сервер удаляет из почтового ящика сообщения, помеченные как удаленные.
2.2.2. Механизмы идентификации клиента
В сервере могут быть реализованы следующие механизмы идентификации клиента:
с помощью команд USER и PASS
с помощью команды APOP
с помощью команды AUTH (дополнительный механизм идентификации)
2.2.2.1. На сервере должен быть реализован механизм идентификации с помощью команд USER и PASS. Команда PASS должна следовать непосредственно за командой USER. Формат команд USER и PASS описан в п. 4.1. настоящего Руководящего Документа.
2.2.2.2. Механизм идентификации с помощью команды APOP позволяет избежать посылки пароля по сети. Сервер, в котором реализована команда APOP, должен в сообщение приветствия включить метку времени. Должна обеспечиваться уникальность метки времени для каждого сообщения приветствия, выдаваемого сервером.
Клиент должен запомнить последнюю присланную ему метку времени и использовать ее в команде APOP.
Формат команды APOP: APOP
Более подробно формат команды описан в п. 4.1. настоящего Руководящего Документа.
Значение параметра name такое же, как в команде NAME. Параметр digest должен вычисляться согласно алгоритму MD5 в соответствии с RFC 1321[5], применяемому к метке времени и следующей за ней строке пароля. Параметр digest должен иметь формат 16-октетного числа в 16-ричном формате, представленного в ASCII - коде, используя строчные буквы.
Получая команду APOP, сервер должен проверить соответствие параметра digest. В случае соответствия выдается положительный ответ, и сервер переходит в состояние TRANSACTION. В случае несоответствия сервер выдает отрицательный ответ и остается в состоянии AUTHORIZATION.
2.2.2.3. Механизм идентификации с помощью команды AUTH.
Механизмы идентификации и защиты, используемые командой AUTH в протоколе POP3 должны быть аналогичны используемым в протоколе IMAP4 и соответствовать RFC 1731[6], 1734[4].
Формат команды AUTH описан в п. 4.1. настоящего Руководящего Документа.
Команда передает серверу параметр с указанием, какой механизм идентификации должен быть использован. Если в сервере поддерживается запрошенный механизм, сервер производит обмен сообщениями с клиентом для идентификации пользователя. Также может быть выполнено согласование механизма защиты для последующих сессий.
В случае, если команда AUTH не поддерживается, сервер должен послать отрицательный ответ.
Обмен сообщениями протокола идентификации состоит из серий вызовов, исходящих от сервера, и ответов клиента, являющихся специфичными для каждого механизма идентификации. В качестве вызова сервера используется ответ "готов". Вызов сервера должен иметь формат строки в коде BASE64 с первым символом "+". Ответ клиента должен иметь формат строки в коде BASE64. Ответ клиента "*" вызывает прерывание процедуры идентификации и последующий отрицательный ответ сервера.
Если установлен механизм защиты, он применяется ко всем последующим пересылкам данных по соединению. Механизм защиты должен активизироваться сразу после получения символа положительного ответа сервера после обмена сообщениями протокола идентификации. При активном механизме защиты потоки символов команд и ответов преобразуются в зашифрованные буферы. Каждый буфер передается как поток октетов, которому предшествует 4-х октетное поле длины последующих данных. Максимальная длина шифрованного буфера определяется механизмом защиты.
2.2.3. В сервере может быть реализован таймер разъединения по отсутствию активности. Установленное время таймера разъединения по отсутствию активности должно быть как минимум 10 минут. Получение любой команды должно сбрасывать таймер. При закрытии сессии по отсутствию активности сервер:
- не должен входить в состояние UPDATE,
- не должен удалять сообщения,
- не должен посылать ответ клиенту.
3. Перечень и структура сообщений
Все сообщения протокола POP3 должны быть стандартными текстовыми сообщениями в соответствии с RFC822 [2].
3.1. Команды
Сообщения, посылаемые от клиента серверу, называются командами.
3.1.1. Структура команд
Команды состоят из печатных символов кода ASCII. Структура команды:
ключевое слово
один или более аргументов (могут отсутствовать)
символ
Ключевое слово и аргументы, а также аргументы между собой разделяются одним символом (пробел).
Максимальная длина аргумента составляет 40 символов.
Длина ключевого слова составляет 3 или 4 символа.
3.1.2. Перечень команд
Перечень команд приведен в табл. 1.
Таблица 1
Перечень команд
| Команда | STAT |
| Аргументы | - |
| Описание | Информация о статусе почтового ящика. |
| Возможные ответы | +OK <статус> |
| Разрешенные состояния | TRANSACTION |
| Команда | LIST [ |
| Аргументы | msg - номер сообщения. Не должен ссылаться на удаленное сообщение. |
| Описание | Если указан аргумент, сервер высылает положительный однострочный ответ с информацией о данном сообщении. Если нет сообщения с таким номером, выдается отрицательный ответ. Если аргумент не указан, сервер высылает положительный многострочный ответ с информацией обо всех сообщениях в почтовом ящике. В случае, если почтовый ящик пуст, выдается положительный ответ, состоящий только из ".CRLF". |
| Возможные ответы | +OK <скан-список> -ERR |
| Разрешенные состояния | TRANSACTION |
| Команда | RETR |
| Аргументы | msg - номер сообщения |
| Описание | Сервер высылает положительный многострочный ответ с сообщением, соответствующим указанному номеру. |
| Возможные ответы | +OK <верх сообщения> -ERR |
| Разрешенные состояния | TRANSACTION |
| Команда | DELE |
| Аргументы | msg - номер сообщения |
| Описание | Сервер помечает сообщение как удаленное. Команда с аргументом, указывающим на несуществующее сообщение, либо на уже удаленное сообщение, вызывает отрицательный ответ. |
| Возможные ответы | +OK -ERR |
| Разрешенные состояния | TRANSACTION |
| Команда | NOOP |
| Аргументы | - |
| Описание | Нет операции |
| Возможные ответы | +OK |
| Разрешенные состояния | TRANSACTION |
| Команда | RSET |
| Аргументы | - |
| Описание | Сбрасываются все метки удаленных сообщений |
| Возможные ответы | +OK |
| Разрешенные состояния | TRANSACTION |
| Команда | QUIT |
| Аргументы | - |
| Описание | Удаление всех сообщений, отмеченных как удаленные из почтового ящика, закрытие почтового ящика и разрыв соединения TCP. Если при удалении сообщений возникает ошибка, выдается сообщение об ошибке. |
| Возможные ответы | +OK -ERR |
| Разрешенные состояния | TRANSACTION |
| Команда | QUIT |
| Аргументы | - |
| Описание | Разрыв соединения TCP. |
| Возможные ответы | +OK |
| Разрешенные состояния | AUTHORIZATION |
| Команда | TOP |
| Аргументы | msg - номер сообщения n - число строк (положительное чмсло либо равное 0) |
| Описание | Сервер выдает положительный многострочный ответ, включающий: заголовок сообщения, пустую строку, указанное число строк сообщения. |
| Возможные ответы | +OK <ответ> -ERR |
| Разрешенные состояния | AUTHORIZATION |
| Команда | UIDL [ |
| Аргументы | msg - номер сообщения |
| Описание | В случае, если аргумент задан, сервер выдает однострочный положительный ответ "unique-id listening" для почтового сообщения с указанным номером. Если аргумент не задан, сервер выдает многострочный положительный ответ, состоящий из - первой строки +OK, - строк "unique-id listening" для каждого сообщения в почтовом ящике. Отрицательный ответ выдается в случае отсутствия сообщения с указанным номером. |
| Возможные ответы | +OK <список uid> -ERR |
| Разрешенные состояния | TRANSACTION |
| Команда | USER |
| Аргументы | name - идентификатор почтового ящика |
| Описание | Идентификатор почтового ящика. Используется в механизме идентификации по комбинации команд USER PASS. Положительный ответ выдается, если существует почтовый ящик с указанным именем, отрицательный - если такой почтовый ящик отсутствует. |
| Возможные ответы | +OK -ERR |
| Разрешенные состояния | AUTHORIZATION |
| Команда | PASS |
| Аргументы | string - пароль почтового ящика |
| Описание | Пароль почтового ящика Используется в механизме идентификации по комбинации команд USER PASS. Положительный ответ выдается, если клиенту позволен доступ к соответствующему почтовому ящику, и отрицательный - в противном случае. |
| Возможные ответы | +OK -ERR |
| Разрешенные состояния | AUTHORIZATION, после выполнения команды USER |
| Команда | APOP |
| Аргументы | name - идентификатор почтового ящика digest - строка MD5 |
| Описание | Пароль почтового ящика Используется в механизме идентификации по методу "разделяемого секрета". Положительный ответ выдается, если клиенту позволен доступ к соответствующему почтовому ящику, и отрицательный - в противном случае. |
| Возможные ответы | +OK -ERR |
| Разрешенные состояния | AUTHORIZATION |
| Команда | AUTH |
| Аргументы | str - идентификатор идентификационного механизма в соответствии с RFC 1731[6] |
| Описание | Команда начала процедуры идентификации по механизму IMAP4 |
| Возможные ответы | +OK -ERR |
| Разрешенные состояния | AUTHORIZATION |
3.1.3. Обязательными для реализации являются команды: QUIT, STAT, LIST, RETR, DELE, NOOP, RSET, USER, PASS.
3.2. Ответы
Сообщения, посылаемые от сервера клиенту называются ответами.














