Опубликован: 10.10.2007 | Уровень: специалист | Доступ: платный
Лекция 4:

Почтовые протоколы POP3 и IMAP

Отклики сервера

Существует три вида откликов сервера: отклики состояния, информация сервера и запрос продолжения команды. Информация, содержащаяся в отклике сервера, идентифицируется словом "Содержимое:".

Клиент должен быть готов воспринять любой отклик в любое время. Отклики состояния могут быть маркированными или нет. Маркированные отклики состояния указывают на результат завершения команды клиента (OK, NO или BAD) и имеют метку, соответствующую команде.

Некоторые отклики состояния и любая информация сервера не маркируются. Немаркированный отклик выделяется символом "*" вместо метки. Немаркированные отклики состояния отмечают реакцию сервера, они не указывают на завершение выполнения команды (например, предупреждение о предстоящем отключении системы). По историческим причинам немаркированные информационные отклики сервера называются также незапрашиваемыми данными.

Определенные данные от сервера должны записываться клиентом при получении. Такие данные несут критическую информацию, которая влияет на интерпретацию всех последующих команд и откликов (например, создание или уничтожение сообщений).

Прочие данные сервера следует записывать для последующих ссылок; но если клиент не нуждается в записи данных или если запись данных не имеет очевидного смысла (например, отклик SEARCH, когда никакой команды SEARCH не исполняется), такая информация должна игнорироваться.

Немаркированная информация посылается сервером, когда соединение IMAP находится в состоянии выбрано. В этом состоянии при выполнении команды сервер проверяет наличие новых сообщений в выбранном почтовом ящике. В нормальной ситуации эта часть процедуры выполняется любой командой, следовательно, даже команды NOOP достаточно для проверки наличия новых сообщений. Если обнаружены новые сообщения, сервер посылает немаркированные отклики EXISTS и RECENT, отражающие новые размеры почтового ящика. Реализации сервера, которые предлагают множественный одновременный доступ к одному и тому же ящику, также должны посылать соответствующие немаркированные отклики FETCH и EXPUNGE, если другие агенты изменяют состояние любого флага сообщения или удаляют любое сообщение.

Отклики запросов продолжения команды используют символ "+" вместо метки. Эти отклики посылаются сервером для индикации приема незавершенной команды клиента и готовности приема остальной части команды.

Отклики сервера — отклики состояния

Статусными откликами являются OK, NO, BAD, PREAUTH и BYE. OK, NO и BAD могут быть маркированными или нет. PREAUTH и BYE — всегда не маркированы.

Статусные отклики могут включать опционный код отклика. Код отклика состоит из информации, заключенной в квадратные скобки, в форме атома. Далее может следовать пробел и аргументы. Код отклика содержит дополнительную информацию или статусные коды для программы клиента, помимо условий OK/NO/BAD. Эти данные определяют, когда клиент может предпринять действия на основе этой дополнительной информации. В настоящее время заданы следующие коды откликов.

ALERT Текстовое сообщение, содержащее специальное предупреждение, которое должно быть представлено пользователю в форме, привлекающей внимание.
NEWNAME За этим откликом следует имя почтового ящика и новое имя. Команды SELECT или EXAMINE не пройдут, так как ящик места назначения более не существует из-за переименования. Это является указанием для клиента: попытаться повторить команду с новым именем почтового ящика.
PARSE Текстовое сообщение, которое указывает на ошибку при разборе заголовка [RFC-822] или заголовка [MIME-IMB] сообщения в почтовом ящике.
PERMANENTFLAGS Когда за этим кодом следует в скобках список флагов, это указывает, какие из известных флагов могут быть изменены на постоянной основе. Любые флаги, которые указаны в немаркированном отклике FLAGS, но отсутствуют в списке PERMANENTFLAGS, могут быть установлены на постоянной основе. Если клиент пытается запомнить (STORE) флаг, который отсутствует в списке PERMANENTFLAGS, сервер либо отвергнет этот запрос с помощью отклика NO, либо запомнит состояние только до конца текущей сессии. Список PERMANENTFLAGS может также включать специальный флаг \*, который указывает, что имеется возможность создать новые ключевые слова путем записи этих флагов в почтовом ящике.
READ-ONLY Почтовый ящик выбран в режиме "только для чтения" или доступ к нему был сменен с read-write на read-only.
READ-WRITE Почтовый ящик находится в режиме read-write, или доступ к нему был сменен с read-only на read-write.
TRYCREATE Попытка выполнения APPEND или COPY оказалась неуспешной из-за того, что почтовый ящик места назначения отсутствует. Это указывает клиенту, что операция может оказаться успешной, если почтовый ящик будет сначала создан с помощью CREATE
UIDVALIDITY Когда за этим кодом следует десятичное число, это указывает на значение уникального идентификатора.
UNSEEN Когда за этим кодом следует десятичное число, это указывает на значение номера первого сообщения без флага \Seen.

Отклик OK

Содержимое: опционный код отклика;
текст, читаемый человеком

Отклик OK индицирует информационное сообщение от сервера. Если оно маркировано, сообщение указывает на успешное завершение соответствующей команды. Пользователю может быть предложено текстовое информационное сообщение. Немаркированная форма указывает на чисто информационное сообщение; природа информации может быть указана в коде отклика.

Немаркированная форма используется также как один из трех видов оповещения об установлении начального соединения. Эта форма свидетельствует, что еще не выполнена аутентификация и необходима команда LOGIN.

Отклик NO

Содержимое: опционный код отклика;
текст, читаемый человеком

Отклик NO указывает на сообщение от сервера об операционной ошибке. В помеченной форме он отмечает неудачное завершение соответствующей команды. Непомеченная форма служит для индикации предупреждения, команда все еще может завершиться успешно. Текстовое сообщение описывает условия.

Отклик BAD

Содержимое: опционный код отклика;
текст, читаемый человеком

Отклик BAD отмечает сообщение об ошибке со стороны сервера. В маркированной форме он сообщает об ошибке протокольного уровня в команде клиента; метка определяет команду, которая вызвала ошибку. Непомеченная форма указывает на ошибку протокольного уровня, для которой нельзя указать команду, вызвавшую ошибку; это может также означать внутреннюю ошибку сервера. Текстовое сообщение описывает условия.

Отклик PREAUTH

Содержимое: опционный код отклика;
текст, читаемый человеком

Отклик PREAUTH является всегда непомеченным и представляет собой одну из трех возможных реакций при установлении соединения. Он указывает, что для соединения уже выполнена аутентификация и команда LOGIN не нужна.

Отклик BYE

Содержимое: опционный код отклика;
текст, читаемый человеком

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

  1. как часть нормальной процедуры logout. Сервер закроет соединение после отправки маркированного отклика OK на команду LOGOUT;
  2. как уведомление об аварийном прерывании сессии. Сервер немедленно разрывает соединение;
  3. как уведомление о процедуре автоматического logout по причине отсутствия активности. Сервер немедленно разрывает соединение;
  4. как одно из трех возможных сообщений при установлении соединения, уведомляя, что сервер не может установить соединение с данным клиентом. Сервер немедленно разрывает соединение.

Отличие между откликом BYE, который является частью обычной процедуры LOGOUT (первый вариант), и BYE при отказе (остальные три варианта) заключается в том, что соединение в последнем случае разрывается немедленно.

Отклики сервера — сообщения о состоянии сервера и почтового ящика

Эти отклики всегда не маркированы. Они служат для передачи статусной информации сервера и почтового ящика клиенту. Большинство этих откликов являются результатом команд, носящих то же имя.

Отклик CAPABILITY

Содержимое: список возможностей.

Отклик CAPABILITY возникает в результате исполнения одноименной команды. Список возможностей, который содержится в перечне наименований, разделенных пробелами, характеризует функции, поддерживаемые сервером. Список возможностей должен включать в себя атом IMAP 4.1.

Имя возможности, которое начинается с AUTH=, указывает, что сервер поддерживает данный механизм аутентификации. Другие наименования возможностей отмечают, что сервер поддерживает расширение, модификацию или усовершенствования протокола IMAP 4.1.

Имена возможностей должны либо начинаться с "X", либо быть стандартными, либо соответствовать расширениям IMAP 4.1, модификациям или усовершенствованиям, зарегистрированным IANA. Сервер не должен предлагать незарегистрированные или нестандартные имена возможностей, если их имена не начинаются с символа "X".

Реализациям клиента не следует требовать каких-либо имен возможностей, отличных от IMAP 4.1, они должны игнорировать неизвестные имена возможностей.

Отклик LIST

Содержимое: атрибуты имени, иерархический разделитель, имя.

Отклик LIST посылается как результат команды LIST. Он возвращает одно имя, которое соответствует спецификации LIST. Допускается несколько откликов LIST на одну команду. Определено четыре атрибута имени.

\Noinferiors Дочерние уровни иерархии не могут иметь то же самое имя. Дочерних уровней не существует в настоящее время и они не могут быть созданы в будущем.
\Noselect Не допускается использование данного имени для почтового ящика, который может быть выбран.
\Marked Почтовый ящик помечен сервером как interesting; почтовый ящик, вероятно, содержит сообщения, которые добавлены со времени, когда почтовый ящик последний раз был выбран.
\Unmarked Почтовый ящик не содержит каких-либо дополнительных сообщений со времени, когда почтовый ящик последний раз был выбран.

Если сервер не может определить, является ли почтовый ящик интересным, или, если имя имеет атрибут \Noselect, сервер не должен посылать отклики \Marked или \Unmarked. Иерархическим разделителем является символ, используемый для разграничения уровней иерархии имен почтового ящика. Клиент может использовать разделитель для формирования дочерних уровней в почтовом ящике, а также для поиска в иерархической системе имен. Все дочерние уровни верхнего уровня иерархии должны использовать один и тот же тип разделителя. Иерархический разделитель NIL означает, что никакой иерархии нет.

Имя представляет собой однозначную иерархию слева-направо и должно быть пригодным для использования в качестве шаблона командами LIST и LSUB. Если не использован атрибут \Noselect, имя должно быть пригодно в качестве аргумента команд типа SELECT, которые требуют ввода имени почтового ящика.

Пример: S: * LIST (\Noselect) "/" ~/Mail/foo

Отклик LSUB

Содержимое: атрибуты имени, иерархический разграничитель, имя.

Отклик LSUB является результатом команды LSUB. Он возвращает одно имя, которое соответствует спецификации LSUB. Допускается несколько откликов на одну команду LSUB. Формат данных идентичен используемому в отклике LIST.

Пример: S: * LSUB () "." #news.comp.mail.misc

Отклик STATUS

Содержимое: имя, статусный список, заключенный в скобки.

Отклик STATUS является результатом выполнения команды STATUS. Он возвращает имя почтового ящика, которое соответствует спецификации STATUS, и запрашиваемую статусную информацию почтового ящика.

Пример: S: * STATUS spam_mess (MESSAGES 315 UIDNEXT 52111)

Отклик SEARCH

Содержимое: нуль или более чисел.

Отклик SEARCH является результатом выполнения команды SEARCH или UID SEARCH. Числа относятся к тем сообщениям, которые отвечают критериям отбора. Для SEARCH это порядковые номера сообщений, а для UID SEARCH — их уникальные идентификаторы. Числа отделяются друг от друга пробелами.

Пример: S: * SEARCH 1 2 3

Отклик FLAGS

Содержимое: список флагов, заключенный в скобки.

Отклик FLAGS является результатом выполнения команды SELECT или EXAMINE. Список флагов, заключенный в скобки определяет флаги (системные), которые могут использоваться для данного почтового ящика. Допускаются флаги, отличные от системных, — это зависит от реализации сервера. Отклик FLAGS должен записываться клиентом.

Пример: S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)

Отклик EXISTS

Содержимое: отсутствует.

Отклик EXISTS сообщает о числе сообщений в почтовом ящике. Этот отклик является результатом выполнения команды SELECT, EXAMINE или изменения размера почтового ящика (например, получено новое почтовое сообщение). Отклик EXISTS должен регистрироваться клиентом.

Пример: S: * 23 EXISTS

Отклик RECENT

Отклик RECENT сообщает число сообщений с флагами \Recent. Этот отклик является результатом выполнения команды SELECT, EXAMINE или изменения размера почтового ящика (например, получено новое почтовое сообщение).

Замечание. Нельзя гарантировать, что порядковые номера для последних сообщений образуют в почтовом ящике непрерывный ряд с предыдущими. Примерами, когда складывается такая ситуация, могут служить варианты, когда несколько клиентов имеют один и тот же открытый почтовый ящик или когда сообщения в почтовом ящике переставлены не- IMAP приложением.

Корректным способом идентифицировать последние сообщения является рассмотрение флагов \Recent или выполнение команды SEARCH RECENT. Информация отклика RECENT должна регистрироваться клиентом.

Пример: S: * 5 RECENT

Отклик EXPUNGE

Отклик EXPUNGE уведомляет, сообщение с каким порядковым номером удалено из почтового ящика. Порядковые номера последующих сообщений немедленно уменьшаются на единицу.

Порядковые номера сообщений, появляющиеся при последующих командах EXPUNGE, зависят от того, в каком порядке удаляются сообщения. Например, если последние 5 сообщений в почтовом ящике с 9 сообщениями стерты, сервер, удаляющий записи снизу-вверх, пошлет 5 немаркированных откликов EXPUNGE (с номером 5), в то время как сервер, стирающий записи сверху вниз, пошлет немаркированные отклики с номерами 9, 8, 7, 6 и 5.

Отклик EXPUNGE не должен посылаться, когда не исполняется никакая команда или при отклике на команды FETCH, STORE или SEARCH. Это правило необходимо, чтобы предотвратить потерю синхронизации нумерации для клиента и сервера. Информация отклика EXPUNGE должна записываться клиентом.

Пример: S: * 44 EXPUNGE

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Антон Шавергин
Антон Шавергин
Россия
Степан Крупа
Степан Крупа
Украина, Львів, СЗШ №65, 2012