РД 45.134-2000, часть 5
3.4.2. Ответы статуса сервера и почтового ящика
С помощью данных ответов сервер передает данные клиенту. В табл. 4 приведен список ответов статуса сервера и почтового ящика
Таблица 4
Список ответов статуса сервера и почтового ящика.
Ответ: |
Описание |
CAPABILITY |
Ответ на команду CAPABILITY. Выдается перечень возможностей, поддерживаемых сервером. Должен быть включен атом "IMAP4rev1". Возможность "AUTH=" показывает, что сервер поддерживает данный механизм идентификации. Имена, данные в списке ответа, должны быть либо стандартными, либо начинаться с буквы X. |
LIST |
Ответ на команду LIST. Выдается одно имя, удовлетворяющее спецификации команды LIST. Может быть несколько ответов LIST на команду LIST. В ответе LIST указывается разделитель иерархии. Если почтовый ящик неиерархический, в качестве разделителя иерархии должен стоять NUL. |
LSUB |
Ответ на команду LSUB. Выдается одно имя, удовлетворяющее спецификации команды. Может быть несколько ответов на команду. |
STATUS |
Ответ на команду STATUS. Возвращает имя почтового ящика, удовлетворяющее спецификации команды, и запрошенную информацию статуса. |
SEARCH |
Ответ на команду SEARCH. Возвращает список номеров сообщений, удовлетворяющих критерию поиска. Для команды SEARCH выдаются порядковые номера, для команды UID SEARCH - UID. |
FLAGS |
Ответ на команду SELECT или EXAMINE. Выдает список в скобках, содержащий флаги, которые можно использовать в данном почтовом ящике. |
3.4.3. Ответы размера почтового ящика
С помощью данных ответов сервер передает клиенту информацию об изменениях размера почтового ящика. В табл.5 приведен список ответов размера почтового ящика.
Таблица 5
Список ответов размера почтового ящика.
Ответ: |
Описание |
EXISTS |
Указывает количество сообщений в почтовом ящике. Выдается в ответ на команды SELECT или EXAMINE, или когда меняется размер почтового ящика. |
RECENT |
Указывает количество сообщений в почтовом ящике с установленным флагом \Recent. Выдается в ответ на команды SELECT или EXAMINE, или когда меняется размер почтового ящика. |
3.4.4. Ответы статуса сообщений
С помощью данных ответов сервер передает клиенту данные сообщений. В табл. 6 приведен список ответов статуса сообщений. Сразу за символом "*" находится последовательный номер сообщения.
3.4.5. Ответ запроса продолжения команды
Данный ответ показывает, что сервер готов принять продолжение команды от клиента. Данный ответ используется в команде AUTHORIZATION для выполнения передачи данных сервера клиенту и запроса дополнительных данных клиента.
Данный ответ может также использоваться для любой команды в случае, если аргументом является литерал. Клиент не должен высылать октеты текста литерала, пока сервер не выдаст запрос. Остаток команды, включая <CRLF>, следует за октетами литерала. В случае, если присутствуют дополнительные аргументы, за литералом должен следовать пробел и эти аргументы.
Таблица 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 Bo dy 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 quote mark, 0x22>
;; метка ограничителя 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 ::= <any CHAR except atom_specials>
;; любое 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 ::= <any 7-bit US-ASCII character except NUL,
0x01 - 0x7f>
CHAR8 ::= <any 8-bit octet except NUL, 0x01 - 0xff>
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 ::= <ASCII CR, carriage return, 0x0D>
create ::= "CREATE" SPACE mailbox
;; Use of INBOX gives a NO error
;; (Использование INBOX дает ошибку NO)
CRLF ::= CR LF
CTL ::= <any ASCII control character and DEL,
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
["<" number "." nz_number ">"]
flag ::= "\Answered" / "\Flagged" / "\Deleted" /
"\Seen" / "\Draft" / flag_keyword / flag_extension
flag_extension ::= "\" atom
;; Future expansion. Client implementations
;; MUST accept flag_extension flags. Server
;; implementations MUST NOT generate
;; flag_extension flags except as defined by
;; future standard or standards-track
;; revisions of this specification.
;; ( Будущее перспективное расширение. Клиентские реализации
;; должны иметь доступ к флагам flag_extension. Реализации
;; сервера не должны осуществлять
;; генерацию флагов flag_extension, за
;; исключением случаев, определенных вводимыми стандартами
;; или поправками - версиями ревизий - данной спецификации)
flag_keyword ::= atom
flag_list ::= "(" #flag ")"
greeting ::= "*" SPACE (resp_cond_auth / resp_cond_bye) CRLF
header_fld_name ::= astring
header_list ::= "(" 1#header_fld_name ")"
HTAB ::= <ASCII HT, horizontal tab, 0x9>
LF ::= <ASCII LF, line feed, 0x0A>
linear-white-space ::= 1*([CRLF] LWSP-char)
list ::= "LIST" SPACE mailbox SPACE list_mailbox
list_mailbox ::= 1*(ATOM_CHAR / list_wildcards) / string
list_wildcards ::= "%" / "*"
literal ::= "{" number "}" CRLF *CHAR8
;; Number represents the number of CHAR8 octets
;; (Number представляет число октетов CHAR8)
login ::= "LOGIN" SPACE userid SPACE password
lsub ::= "LSUB" SPACE mailbox SPACE list_mailbox
LWSP-char ::= SPACE / HTAB
mailbox ::= "INBOX" / astring
;; INBOX is case-insensitive. All case variants of
;; INBOX (e.g. "iNbOx") MUST be interpreted as INBOX
;; not as an astring. Refer to section 5.1 for
;; further semantic details of mailbox names.
;; (INBOX зависит от ргистра букв. Все варианты случаев
;; INBOX ( напрмер "iNbOx") должны быть интерпретированы
;; и не astring . См. раздел 5.1 для
;; более подробного рассмотрения имен почтовых яиков.)
mailbox_data ::= "FLAGS" SPACE flag_list /
"LIST" SPACE mailbox_list /
"LSUB" SPACE mailbox_list /
"MAILBOX" SPACE text /
"SEARCH" [SPACE 1#nz_number] /
"STATUS" SPACE mailbox SPACE
"(" #<status_att number ")" /
number SPACE "EXISTS" / number SPACE "RECENT"
mailbox_list ::= "(" #("\Marked" / "\Noinferiors" /
"\Noselect" / "\Unmarked" / flag_extension) ")"
SPACE (<"> QUOTED_CHAR <"> / nil) SPACE mailbox
media_basic ::= (<"> ("APPLICATION" / "AUDIO" / "IMAGE" /
"MESSAGE" / "VIDEO") <">) / string)
SPACE media_subtype
;; Defined in [MIME-IMT] (Определены в [MIME-IMT])
media_message ::= <"> "MESSAGE" <"> SPACE <"> "RFC822" <">
;; Defined in [MIME-IMT] (Определены в [MIME-IMT])
media_subtype ::= string
;; Defined in [MIME-IMT] (Определены в [MIME-IMT])
media_text ::= <"> "TEXT" <"> SPACE media_subtype
;; Defined in [MIME-IMT] (Определены в [MIME-IMT])
message_data ::= nz_number SPACE ("EXPUNGE" /
("FETCH" SPACE msg_att))
msg_att ::= "(" 1#("ENVELOPE" SPACE envelope /
"FLAGS" SPACE "(" #(flag / "\Recent") ")" /
"INTERNALDATE" SPACE date_time /
"RFC822" [".HEADER" / ".TEXT"] SPACE nstring /
"RFC822.SIZE" SPACE number /
"BODY" ["STRUCTURE"] SPACE body /
"BODY" section ["<" number ">"] SPACE nstring /
"UID" SPACE uniqueid) ")"
nil ::= "NIL"
nstring ::= string / nil
number ::= 1*digit
;; Unsigned 32-bit integer ( Целые без знака.32 бита)
;; (0 <= n < 4,294,967,296)
nz_number ::= digit_nz *digit
;; Non-zero unsigned 32-bit integer (Ненулевые целые без
;; знака, 32 бита)
;; (0 < n < 4,294,967,296)
password ::= astring
quoted ::= <"> *QUOTED_CHAR <">
QUOTED_CHAR ::= <any TEXT_CHAR except quoted_specials> /
"\" quoted_specials
quoted_specials ::= <"> / "\"
rename ::= "RENAME" SPACE mailbox SPACE mailbox
;; Use of INBOX as a destination gives a NO error
;; ( Использование INBOX, выдающего сообщение об отсутствии
;; ошибок как пункта назначения)
response ::= *(continue_req / response_data) response_done
response_data ::= "*" SPACE (resp_cond_state / resp_cond_bye /
mailbox_data / message_data / capability_data)
CRLF
response_done ::= response_tagged / response_fatal
response_fatal ::= "*" SPACE resp_cond_bye CRLF
;; Server closes connection immediately
;; ( Сервер немедленно закрывает соединение)
response_tagged ::= tag SPACE resp_cond_state CRLF
resp_cond_auth ::= ("OK" / "PREAUTH") SPACE resp_text
;; Authentication condition (Условие аутоидентификации)
resp_cond_bye ::= "BYE" SPACE resp_text
resp_cond_state ::= ("OK" / "NO" / "BAD") SPACE resp_text
;; Status condition (Условие статуса)
resp_text ::= ["[" resp_text_code "]" SPACE] (text_mime2 / text)
;; text SHOULD NOT begin with "[" or "="
;; ( текст не следует начинать с символа "[" или "=")
resp_text_code ::= "ALERT" / "PARSE" /
"PERMANENTFLAGS" SPACE "(" #(flag / "\*") ")" /
"READ-ONLY" / "READ-WRITE" / "TRYCREATE" /
"UIDVALIDITY" SPACE nz_number /
"UNSEEN" SPACE nz_number /
atom [SPACE 1*<any TEXT_CHAR except "]">]
search ::= "SEARCH" SPACE ["CHARSET" SPACE astring SPACE]
1#search_key
;; [CHARSET] MUST be registered with IANA
;; ( [CHARSET] должен быть зарегистрирован с именем IANA)
search_key ::= "ALL" / "ANSWERED" / "BCC" SPACE astring /
"BEFORE" SPACE date / "BODY" SPACE astring /
"CC" SPACE astring / "DELETED" / "FLAGGED" /
"FROM" SPACE astring /
"KEYWORD" SPACE flag_keyword / "NEW" / "OLD" /
"ON" SPACE date / "RECENT" / "SEEN" /
"SINCE" SPACE date / "SUBJECT" SPACE astring /
"TEXT" SPACE astring / "TO" SPACE astring /
"UNANSWERED" / "UNDELETED" / "UNFLAGGED" /
"UNKEYWORD" SPACE flag_keyword / "UNSEEN" /
;; Above this line were in [IMAP2]
;; ( Ранее эта строка была в [IMAP2])
"DRAFT" /
"HEADER" SPACE header_fld_name SPACE astring /
"LARGER" SPACE number / "NOT" SPACE search_key /
"OR" SPACE search_key SPACE search_key /
"SENTBEFORE" SPACE date / "SENTON" SPACE date /
"SENTSINCE" SPACE date / "SMALLER" SPACE number /
"UID" SPACE set / "UNDRAFT" / set /
"(" 1#search_key ")"
section ::= "[" [section_text / (nz_number *["." nz_number]
["." (section_text / "MIME")])] "]"
section_text ::= "HEADER" / "HEADER.FIELDS" [".NOT"]
SPACE header_list / "TEXT"
select ::= "SELECT" SPACE mailbox
sequence_num ::= nz_number / "*"
;; * is the largest number in use. For message
;; sequence numbers, it is the number of messages
;; in the mailbox. For unique identifiers, it is
;; the unique identifier of the last message in
;; the mailbox.
;; (* - наибольше используемое число. Для последовательного
;; подсчета сообщений - это число сообщений в почтовом ящике.
;; Для уникального идентификатора - это уникальный иденти-
;; фикатор последнего сообщения в почтовом ящике)
set ::= sequence_num / (sequence_num ":" sequence_num) /
(set "," set)
;; Identifies a set of messages. For message
;; sequence numbers, these are consecutive
;; numbers from 1 to the number of messages in
;; the mailbox
;; Comma delimits individual numbers, colon
;; delimits between two numbers inclusive.
;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13,
;; 14,15 for a mailbox with 15 messages.
;; ( Определяет набор сообщений. Для подсчета последовательных
;; сообщений это - последовательные числа от 1 до числа
;; сообщений в почтовом ящике. Запятая разделяет отдельные
;; числа, двоеточие указывает наличие промежуточных чисел.
;; Например, 2,4:7,9,12:* это 2,4,5,6,7,9,12,13,14,15 для
;; почтового ящика с 15-ью сообщениями)
SPACE ::= <ASCII SP, space, 0x20>
status ::= "STATUS" SPACE mailbox SPACE "(" 1#status_att ")"
status_att ::= "MESSAGES" / "RECENT" / "UIDNEXT" /
"UIDVALIDITY" / "UNSEEN"
store ::= "STORE" SPACE set SPACE store_att_flags
store_att_flags ::= (["+" / "-"] "FLAGS" [".SILENT"]) SPACE
(flag_list / #flag)
string ::= quoted / literal
subscribe ::= "SUBSCRIBE" SPACE mailbox
tag ::= 1*<any ATOM_CHAR except "+">
text ::= 1*TEXT_CHAR
text_mime2 ::= "=?" <charset> "?" <encoding> "?"
<encoded-text> "?="
;; Syntax defined in [MIME-HDRS]
;; (Синтаксис определен в [MIME-IMT])
TEXT_CHAR ::= <any CHAR except CR and LF>
time ::= 2digit ":" 2digit ":" 2digit
;; Hours minutes seconds (Часы минуты секунды)
uid ::= "UID" SPACE (copy / fetch / search / store)
;; Unique identifiers used instead of message
;; sequence numbers
;; ( Уникальные идентификаторы, используемые вместо
;; номера последовательных сообщений)
uniqueid ::= nz_number
;; Strictly ascending ( Строго по восходящей)
unsubscribe ::= "UNSUBSCRIBE" SPACE mailbox
userid ::= astring
x_command ::= "X" atom <experimental command arguments>
zone ::= ("+" / "-") 4digit
;; Signed four-digit value of hhmm representing
;; hours and minutes west of Greenwich (that is,
;; (the amount that the given time differs from
;; Universal Time). Subtracting the timezone
;; from the given time will give the UT form.
;; The Universal Time zone is "+0000".
;; ( 4-х значное величина hhmm со знаком, отображающая
;; часы и минуты по Гринвичу, то есть значение, которое
;; дает отличие времени от значения Универсального
;; времени). Вычитание временной зоны из данного времени
;; даст значение UT- формы - формы Универсального времени.
;; Зона У ниверсального времени - это "+0000".)
5. Структура почтового сообщения в соответствии с RFC 822
Сообщение состоит из заголовка и необязательного тела сообщения. Тело сообщения является простым набором линий, содержащих символы ASCII. Тело сообщения отделено от заголовка NULL-строкой (строкой, состоящей только из символов <CRLF> ) .
Заголовок сообщения состоит из полей заголовка. Каждое поле состоит из имени поля, двоеточия - символа ":" и значения поля. Значение поля может быть разбито на части символами <CRLF>. При этом символы <CRLF> должны немедленно следовать за символом <LWSP>. Далее поля заголовка описываются в предположении, что из их значений выброшены символы <CRLF>.
Приведено определение структуры сообщения с использованием формы Наура-Бекуса. В определениях используются элементы, определенные в п. 5.
<"> = <ASCII quote mark> ; ( 42, 34.)
addr-spec = local-part "@" domain ; глобальный адрес
address = mailbox ; один адресат
/ group ; именованный список
ALPHA = <любой алфавитный символ ASCII >
; (101-132, 65.- 90.)
; (141-172, 97.-122.)
atom = 1*<любой CHAR кроме specials, SPACE и CTL>
authentic = "From" ":" mailbox ; Единственный автор
/ ( "Sender" ":" mailbox ; Настоящий отправитель
"From" ":" 1#mailbox) ; Много авторов
CHAR = <любой символ ASCII> ; ( 0-177, 0.-127.)
CTL = <любой символ ASCII control ; ( 0- 37, 0.- 31.)
и DEL> ; ( 177, 127.)
comment = "(" *(ctext / quoted-pair / comment) ")"
CR = <ASCII CR, возврат каретки> ; ( 15, 13.)
CRLF = CR LF
ctext = <any CHAR excluding "(", ; => may be folded
")", "\" & CR, & including
linear-white-space>
date = 1*2DIGIT month 2DIGIT ; day month year
; e.g. 20 Jun 82
date-time = [ day "," ] date time ; dd mm yy