rd_45.134-2000 (524304), страница 11
Текст из файла (страница 11)
Данный ответ может также использоваться для любой команды в случае, если аргументом является литерал. Клиент не должен высылать октеты текста литерала, пока сервер не выдаст запрос. Остаток команды, включая , следует за октетами литерала. В случае, если присутствуют дополнительные аргументы, за литералом должен следовать пробел и эти аргументы.
Таблица 6
Список ответов статуса сообщений.
| Ответ: | Описание |
| EXPUNGE | Указывает, что определенный последовательный номер сообщения был удален из почтового ящика. Последовательные номера сообщений в данном почтовом ящике немедленно уменьшаются на 1. В случае, если удаляются несколько сообщений, выдается соответствующее количество ответов EXPUNGE. Корректировка номеров оставшихся сообщений производится после каждого ответа EXPUNGE. Таким образом, номера, выдаваемые ответами EXPUNGE, при удалении нескольких сообщений не будут соответствовать номерам, указанным в команде EXPUNGE. Ответ EXPUNGE не должен посылаться во время выполнения команд FETCH, STORE, SEARCH. |
| FETCH | Выдает клиенту данные о сообщении. Данные передаются в виде пар: имя элемента данных и его значение. Данный ответ может быть послан при выполнении команд FETCH или STORE или без команды. Определены элементы данных: BODY – форма BODYSTRUCTURE без данных расширения BODY []<> - текст отдельной секции тела сообщения, начиная с начального октета. Данные могут быть в 8-битовом формате, если в список параметров данной секции включен идентификатор [CHARSET]. 7-битные и 8-битные символы запрещены в заголовках. Нетекстовые данные должны передаваться в форме BASE64. BODYSTRUCTURE - список в скобках, описывающий структуру сообщения согласно MIME-IMB. Порядок описания данных: Данные расширения части сложного тела: Body parameter parenthesized list Body discription Body language Первичные поля части простого тела: Body type Body subtype Body patameter parenthesized list Body id Body description Body encoding Body size Данные расширения части простого тела: Body MD5 Body disposition Body language ENVELOPE - список в скобках, описывающий структуру конверта сообщения. Порядок полей должен быть следующим: date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to, message-id. Порядок полей списка адреса: personal name, at-domain-list, mailbox name, host name. Все поля с отсутствующими значениями должны иметь значения NIL. Сервер должен определить поля reply-to и sender из поля from. FLAGS – список в скобках флагов, установленных для данного сообщения INTERNALDATE - строка, представляющая внутреннюю дату сообщения RFC822 – эквивалентно BODY[] RFC822.HEADER - эквивалентно BODY.PEEK[HEADER] RFC822.SIZE – числовое выражение, показывающее размер сообщения по RFC 822 [2] RFC822.TEXT – эквивалентно BODY[TEXT] UID – числовое выражение, показывающее UID сообщения |
4.Синтаксис команд и ответов
В приведенном ниже определении синтаксиса команд и ответов сервера IMAP4 используется расширенная форма Наура-Бекуса, приведенная в рекомендации RFC 822 [2].
Замечание: в качестве разделителя в конструкции "#" используется один пробел и не используются запятые. В случае противоречия в приведенных определениях должно использоваться правило, указанное выше по списку. Различие между строчными и прописными символами алфавита является несущественным.
::=
;; метка ограничителя ASCII, код 0х22
address ::= "(" addr_name SPACE addr_adl SPACE addr_mailbox
SPACE addr_host ")"
addr_adl ::= nstring
;; Holds route from [RFC-822[2]] route-addr if
;; non-NIL
;; (Содержит маршрутизацию от [RFC-822[2]] адреса маршрутизации,
;; если не-NIL)
addr_host ::= nstring
;; NIL indicates [RFC-822[2]] group syntax.
;; Otherwise, holds [RFC-822[2]] domain name
;; (NIL указывает [RFC-822[2]] синтаксис группы.
;; Иначе, содержит имя домена по [RFC-822[2]])
addr_mailbox ::= nstring
;; NIL indicates end of [RFC-822[2]] group; if
;; non-NIL and addr_host is NIL, holds
;; [RFC-822[2]] group name.
;; Otherwise, holds [RFC-822[2]] local-part
;; (NIL указывает на конец групы по [RFC-822[2]];
;; Если не-NIL и addr_host - NIL, то содержит имя группы
;; по [RFC-822[2]]. Иначе, содержит локальную часть.)
addr_name ::= nstring
;; Holds phrase from [RFC-822[2]] mailbox if
;; non-NIL
;; (Содержит фразу из [RFC-822[2]] почтового ящика, если не-NIL)
alpha ::= "A" / "B" / "C" / "D" / "E" / "F" / "G" / "H" /
"I" / "J" / "K" / "L" / "M" / "N" / "O" / "P" /
"Q" / "R" / "S" / "T" / "U" / "V" / "W" / "X" /
"Y" / "Z" /
"a" / "b" / "c" / "d" / "e" / "f" / "g" / "h" /
"i" / "j" / "k" / "l" / "m" / "n" / "o" / "p" /
"q" / "r" / "s" / "t" / "u" / "v" / "w" / "x" /
"y" / "z"
;; Case-sensitive (Есть зависимость от регистра букв)
;; (65. - 90.), (97. - 122.)
append ::= "APPEND" SPACE mailbox [SPACE flag_list]
[SPACE date_time] SPACE literal
astring ::= atom / string
atom ::= 1*ATOM_CHAR
ATOM_CHAR ::=
;; любое CHAR, кроме atom_specials
atom_specials ::= "(" / ")" / "{" / SPACE / CTL / list_wildcards /
quoted_specials
authenticate ::= "AUTHENTICATE" SPACE auth_type *(CRLF base64)
auth_type ::= atom
;; Defined by [IMAP-AUTH] (Определяется документом [IMAP-AUTH])
base64 ::= *(4base64_char) [base64_terminal]
base64_char ::= alpha / digit / "+" / "/"
base64_terminal ::= (2base64_char "==") / (3base64_char "=")
body ::= "(" body_type_1part / body_type_mpart ")"
body_extension ::= nstring / number / "(" 1#body_extension ")"
;; Future expansion. Client implementations
;; MUST accept body_extension fields. Server
;; implementations MUST NOT generate
;; body_extension fields except as defined by
;; future standard or standards-track
;; revisions of this specification.
;; (Будущее перспективное расширение. Клиентские реализации
;; должны иметь доступ к полям body_extension. Реализации
;; сервера не должны осуществлять
;; генерацию полей body_extension, за
;; исключением случаев, определенных вводимыми стандартами
;; или поправками - версиями ревизий - данной спецификации)
body_ext_1part ::= body_fld_md5 [SPACE body_fld_dsp
[SPACE body_fld_lang
[SPACE 1#body_extension]]]
;; MUST NOT be returned on non-extensible
;; "BODY" fetch
;; (не должны возвращаться на нерасширенный вызов BODY )
body_ext_mpart ::= body_fld_param
[SPACE body_fld_dsp SPACE body_fld_lang
[SPACE 1#body_extension]]
;; MUST NOT be returned on non-extensible
;; "BODY" fetch
;; (не должны возвращаться на нерасширенный вызов BODY )
body_fields ::= body_fld_param SPACE body_fld_id SPACE
body_fld_desc SPACE body_fld_enc SPACE
body_fld_octets
body_fld_desc ::= nstring
body_fld_dsp ::= "(" string SPACE body_fld_param ")" / nil
body_fld_enc ::= ( ("7BIT" / "8BIT" / "BINARY" / "BASE64"/
"QUOTED-PRINTABLE") ) / string
body_fld_id ::= nstring
body_fld_lang ::= nstring / "(" 1#string ")"
body_fld_lines ::= number
body_fld_md5 ::= nstring
body_fld_octets ::= number
body_fld_param ::= "(" 1#(string SPACE string) ")" / nil
body_type_1part ::= (body_type_basic / body_type_msg / body_type_text)
[SPACE body_ext_1part]
body_type_basic ::= media_basic SPACE body_fields
;; MESSAGE subtype MUST NOT be "RFC822"
;; (Под-тип сообщения не должен определяться RFC822[2])
body_type_mpart ::= 1*body SPACE media_subtype
[SPACE body_ext_mpart]
body_type_msg ::= media_message SPACE body_fields SPACE envelope
SPACE body SPACE body_fld_lines
body_type_text ::= media_text SPACE body_fields SPACE body_fld_lines
capability ::= "AUTH=" auth_type / atom
;; New capabilities MUST begin with "X" or be
;; registered with IANA as standard or
;; standards-track
;; (Новые возможности не должны начинаться с "X" или
;; регистрироваться с именем IANA в качестве
;; стандартного или стандартной записью)
capability_data ::= "CAPABILITY" SPACE [1#capability SPACE]
"IMAP4rev1" [SPACE 1#capability]
;; IMAP4rev1 servers which offer RFC1730[10], RFC2060[11]
;; compatibility MUST list "IMAP4" as the first
;; capability.
;; IMAP4revq серверы, которые предлагают
;; совместимость по RFC1730[10] и RFC2060[11], должны определить
;; список "IMAP4" в качестве первоначально-определяемой
;; совместимости
CHAR ::= 0x01 - 0x7f> CHAR8 ::= command ::= tag SPACE (command_any / command_auth / command_nonauth / command_select) CRLF ;; Modal based on state (Форма базируется на утверждении) command_any ::= "CAPABILITY" / "LOGOUT" / "NOOP" / x_command ;; Valid in all states (Годится в любых состояниях) command_auth ::= append / create / delete / examine / list / lsub / rename / select / status / subscribe / unsubscribe ;; Valid only in Authenticated or Selected state ;; (Годится только в режиме Аутоидентификации и Выбора) command_nonauth ::= login / authenticate ;; Valid only when in Non-Authenticated state ;; (Годится только в режиме Не-Аутоидентификации) command_select ::= "CHECK" / "CLOSE" / "EXPUNGE" / copy / fetch / store / uid / search ;; Valid only when in Selected state ;; (Годится только в режиме Выбора) continue_req ::= "+" SPACE (resp_text / base64) copy ::= "COPY" SPACE set SPACE mailbox CR ::= create ::= "CREATE" SPACE mailbox ;; Use of INBOX gives a NO error ;; (Использование INBOX дает ошибку NO) CRLF ::= CR LF CTL ::= 0x00 - 0x1f, 0x7f> date ::= date_text / date_text date_day ::= 1*2digit ;; Day of month (День месяца) date_day_fixed ::= (SPACE digit) / 2digit ;; Fixed-format version of date_day ;; (Версия формата даты/дня) date_month ::= "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" date_text ::= date_day "-" date_month "-" date_year date_year ::= 4digit date_time ::= date_day_fixed "-" date_month "-" date_year SPACE time SPACE zone delete ::= "DELETE" SPACE mailbox ;; Use of INBOX gives a NO error ;; (Использование INBOX дает ошибку NO) digit ::= "0" / digit_nz digit_nz ::= "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" ;; (48. - 57.) envelope ::= "(" env_date SPACE env_subject SPACE env_from SPACE env_sender SPACE env_reply_to SPACE env_to SPACE env_cc SPACE env_bcc SPACE env_in_reply_to SPACE env_message_id ")" env_bcc ::= "(" 1*address ")" / nil env_cc ::= "(" 1*address ")" / nil env_date ::= nstring env_from ::= "(" 1*address ")" / nil env_in_reply_to ::= nstring env_message_id ::= nstring env_reply_to ::= "(" 1*address ")" / nil env_sender ::= "(" 1*address ")" / nil env_subject ::= nstring env_to ::= "(" 1*address ")" / nil examine ::= "EXAMINE" SPACE mailbox fetch ::= "FETCH" SPACE set SPACE ("ALL" / "FULL" / "FAST" / fetch_att / "(" 1#fetch_att ")") fetch_att ::= "ENVELOPE" / "FLAGS" / "INTERNALDATE" / "RFC822" [".HEADER" / ".SIZE" / ".TEXT"] / "BODY" ["STRUCTURE"] / "UID" / "BODY" [".PEEK"] section














