rd_45.134-2000 (524304), страница 8
Текст из файла (страница 8)
2.3.5. Таймер автоотсоединения
Если в сервере реализован таймер автоотсоединения, установленное время таймера автоотсоединения должно быть как минимум 30 минут. Получение любой команды от клиента должно сбрасывать таймер автоотсоединения.
2.3.6. Выполнение нескольких команд
От клиента не требуется ждать ответа о результатах выполнения команды перед тем, как отправить следующую команду. Точно так же сервер может не ждать завершения выполнения текущей команды для начала выполнения следующей, кроме тех случаев, когда при одновременном выполнении команд могут возникнуть неоднозначности. В этом случае сервер должен выполнять команды в той последовательности, в которой они получены.
Однако, все ответы на запросы продолжения команды и продолжения команды должны быть согласованы перед инициализацией следующей команды.
2.3.7. Идентификация
Команды AUTHENTICATE и LOGIN запускают процесс идентификации в состоянии Non-authenticated. В сервере может быть реализован неидентифицированный доступ к определенным почтовым ящикам. Для этого должна использоваться команда LOGIN с идентификатором пользователя "anonimus". Наличие пароля является необходимым.
2.3.8. Атрибуты почтового ящика
Должны быть реализованы следующие атрибуты почтового ящика:
\Noinferiors - порожденные уровни не существуют и не могут быть созданы;
\Noselect - невозможно использовать данное имя в качестве выбираемого почтового ящика;
\Marked - почтовый ящик отмечен сервером, как почтовый ящик, в который были добавлены новые сообщения;
\Unmarked - после того, как почтовый ящик был выбран последний раз, в него не были добавлены новые сообщения.
3. Перечень и структура сообщений протокола IMAP4
3.1. Форматы данных, используемые в сообщениях
Протокол IMAP4 использует текстовые команды и ответы. Данные могут быть представлены в одной из 5 форм:
атом;
число;
строка;
список в скобках;
NIL.
Формальное определение форматов данных приведено в Приложении 5.2.
3.1.1. Строки.
Должны быть реализованы два вида строки: литерал и строка в кавычках.
3.1.2. Восьмибитные и бинарные строки.
Восьмибитная текстовая и бинарная почта поддерживается с помощью кодирования MIME-IMB (RFC 2045 [8]). Возможно использование литералов для передачи восьитбитовых или многооктетных символов, но только тогда, когда определен набор символов CHARSET (RFC 1700 [9]).
Несмотря на существование кодирования BINARY для тела сообщения, некодированные бинарные строки запрещены.
Реализации должны кодировать бинарные данные в текстовую форму, такую как BASE64, перед выполнением передачи. Строка, включающая символы CTL, также может считаться бинарной.
3.2. Атрибуты почтовых сообщений
3.2.1. Уникальный номер почтового сообщения (UID), порядковый номер почтового сообщения и идентификатор валидности
Длина уникального идентификатора должна составлять 32 бита.
Длина идентификатора валидности должна составлять 32 бита.
UID должны выделяться в строго возрастающем порядке для вновь поступающих сообщений. Два соседних UID могут отличаться более, чем на 1. UID могут сохраняться неизменными для различных сессий. В случае, если UID не сохраняется для различных сессий, вновь выделяемые UID должны быть больше, чем UID, использованные предыдущими сессиями.
При удалении почтового ящика и создании почтового ящика с таким же именем, идентификатор валидности нового почтового ящика должен быть отличным от предыдущего.
Два соседних порядковых номера сообщения должны отличаться точно на 1. Порядковые номера сообщений могут изменяться в течение сессии.
3.2.2. Флаги почтового сообщения
Должны быть реализованы флаги:
\Seen
\Answered
\Flagged
\Deleted
\Draft
\Recent
Могут быть реализованы дополнительные флаги.
3.3. Команды
Сообщения, направляемые от клиента серверу, называются командами.
Формат команд приведен в п.5.
Список команд с описанием назначения приведен в табл.1.
Таблица 1
Список команд.
| Команда | CAPABILITY |
| Аргументы | - |
| Описание | Запрашивает список возможностей, поддерживаемых сервером. Сервер должен ответить единственным ответом CAPABILITY без тега с указанием "IMAP4rev1", в качестве одной из возможностей в списке, а затем ответом OK с тегом. Выдаваемый список не должен зависеть от состояния или клиента. |
| Возможные ответы без тега | Обязательный ответ без тега: CAPABILITY |
| Возможные ответы с тегом | OK - команда выполнена BAD - неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Любое состояние |
| Команда | NOOP |
| Аргументы | - |
| Описание | Нет операции. |
| Возможные ответы без тега | - |
| Возможные ответы с тегом | OK - команда выполнена BAD - неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Любое состояние |
| Команда | LOGOUT |
| Аргументы | - |
| Описание | Команда информирует сервер, что клиент хочет закрыть соединение. |
| Возможные ответы без тега | Обязательный ответ без тега: BYE |
| Возможные ответы с тегом | OK - команда выполнена BAD - неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Любое состояние |
| Команда | AUTHENTICATE |
| Аргументы | am - название механизма идентификации |
| Описание | По этой команде сервер начинает процесс идентификации в соответствии с указанным механизмом по RFC 1731 [6]. Сервер может также согласовать механизм дополнительной защиты для последующих взаимодействий протокола. Если механизм идентификации не поддерживается, сервер должен ответить NO и отклонить команду. При успешной идентификации выдается сообщение OK, и сервер переходит в состояние Authenticated. |
| Возможные ответы без тега | Могут быть запрошены данные продолжения |
| Возможные ответы с тегом | OK - идентификация выполнена NO - идентификация не выполнена, механизм идентификации не поддерживается BAD - неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Not-Authenticated |
| Команда | LOGIN |
| Аргументы | user - идентификатор клиента pass – пароль |
| Описание | Идентификация клиента и пересылка серверу незакодированного текстового пароля. |
| Возможные ответы без тега | |
| Возможные ответы с тегом | OK - идентификация выполнена, состояние authenticated NO - идентификация не выполнена BAD - неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Not-Authenticated |
| Команда | SELECT |
| Аргументы | mn - имя почтового ящика |
| Описание | Команда выбирает почтовый ящик для доступа к его сообщениям. Если клиенту разрешено модифицировать почтовый ящик, сервер может в ответе с тегом OK перед текстом указать код ответа "[READ-WRITE]" Если клиенту не разрешено модифицировать почтовый ящик, сервер должен в ответе с тегом OK перед текстом указать код ответа "[READ-ONLY]" |
| Возможные ответы без тега | Обязательные ответы без тега: FLAGS, EXISTS, RECENT Необязательные ответы ОК без тега: UNSEEN, PERMANENTFLAGS |
| Возможные ответы с тегом | OK - выбор выполнен, состояние selected NO - ошибка выбора, состояние authenticated BAD – неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Authenticated, Selected |
| Команда | EXAMINE |
| Аргументы | mn - имя почтового ящика |
| Описание | Команда EXAMINE является идентичной команде SELECT. Выбранный почтовый ящик всегда открывается без разрешения модификации (READ-ONLY). |
| Возможные ответы без тега | Обязательные: FLAGS, EXISTS, RECENT Необязательные ответы OK: UNSEEN, PERMANENTFLAGS |
| Возможные ответы с тегом | OK - команда выполнена, состояние selected NO - ошибка выбора, состояние authenticated BAD – неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Authenticated, Selected |
| Команда | CREATE |
| Аргументы | mn - имя почтового ящика |
| Описание | Создание почтового ящика с заданным именем. В случае, если клиент намерен создать иерархический почтовый ящик, после имени почтового ящика может следовать символ отделения уровня иерархии. Сервер, для которого не требуется подобный символ, должен его игнорировать. Если символ отделения уровня иерархии появляется внутри имени почтового ящика, сервер может создавать почтовые ящики (несколько почтовых ящиков) таким образом, чтобы их структура соответствовала заданному имени. Например, при попытке создать ящик "foo/bar/zap" (символ “/" является отделителем иерархии) сервер создает иерархические ящики foo/, foo/bar и foo/bar/zap. Если новый почтовый ящик создается с таким же именем, как и ранее удаленный почтовый ящик, сервер должен выделить для нового ящика идентификационный номер больший, чем номера предыдущих ящиков с таким же именем, если только новый ящик не имеет другое уникальное значение валидности идентификатора. |
| Возможные ответы без тега | - |
| Возможные ответы с тегом | OK - команда выполнена NO - ошибка создания BAD – неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Authenticated, Selected |
| Команда | DELETE |
| Аргументы | mn - имя почтового ящика |
| Описание | Удаление почтового ящика. Команда не должна удалять ящики низших иерархических имен при удалении ящика высшего иерархического имени. (Удаление foo не должно удалить foo/bar). Является ошибкой попытка удаления ящика высших иерархических имен, клиентом почтового ящика имеющего низшие иерархические имена и атрибут /Noselect. Команда может удалять ящики высшего иерархического имени без атрибута /Noselect. При этом все сообщения из данного почтового ящика удаляются и устанавливается атрибут /Noselect. |
| Возможные ответы без тега | - |
| Возможные ответы с тегом | OK - команда выполнена NO - ошибка удаления BAD – неизвестная команда или ошибка в аргументах |
| Разрешенные состояния | Authenticated, Selected |















