RFC: 1521
Оригинал: MIME - Multipurpose Internet Mail Extensions
Другие версии: RFC 1341, RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049
Категория: Проект стандарта
Дата публикации:
Авторы: ,
Перевод: Антон Воронин
7.3.3.5. Примеры и дополнительные пояснения

С появлением возможности очень широких (протяженных) файловых систем стало непредсказуемым, на каком наборе машин файловой системы данный файл будет доступен напрямую, а на каком — нет. Поэтому, имеет смысл указывать как имя файла, так и сетевой адрес (адреса) машин, на которых файл доступен.

Если внешнее тела письма доступно посредством нескольких различных механизмов, отправитель может включить несколько частей типа message/external-body в письмо типа multipart/alternative.

Однако, механизм external-body не должен быть ограничен получением удаленных файлов. Например, можно представить использование видеосервера с внешними ссылками на видеофрагменты.

Если письмо / часть письма имеет тип "message/external-body", то оно / она будет содержать поля заголовка вложенного письма. Тело само по себе неходится где-либо во вне. Это значит, что если тело типа "message/external-body" содержит два последовательных конца строки (CRLF), то все, что идет далее, не является чстью сообщения и просто должно игнорироваться. Однако, этот "хвост" — удобное место для каких-либо дополнительных данных, которые не могут быть помещены в поле заголовка Content-Type. В частности, если значение "access-type" есть "mail-server", то "хвост" может содержать команды, посылаемые затем mail-серверу по адресу, на который указывает параметр SERVER.

Поля заголовка вложенного письма, которые на самом деле являются телом общего письма типа "message/external-body", должны нести информацию о типе содержимого внешнего (удаленного) тела, если оно не является простым ASCII-текстом (что подразумевается по умолчанию), поскольку эти внешние данные сами по себе не имеют заголовка, опрпеделяющего их тип. Также, необходимо указывать Content-transfer-encoding, если он имеет значение, отличное от "7-bit". Так, полное письмо типа message/external-body, ссылающееся на документ в формате PostScript, может выглядеть следующим образом:

From: Whomever
To: Someone
Subject: whatever
MIME-Version: 1.0
Message-ID:
Content-Type: multipart/alternative; boundary=42
Content-ID:

--42
Content-Type: message/external-body;
     name="BodyFormats.ps";
     site="thumper.bellcore.com";
     access-type=ANON-FTP;
     directory="pub";
     mode="image";
     expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)"

Content-type: application/postscript
Content-ID:

--42
Content-Type: message/external-body;
     name="/u/nsb/writing/rfcs/RFC-MIME.ps";
     site="thumper.bellcore.com";
     access-type=AFS
     expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)"

Content-type: application/postscript
Content-ID:

--42
Content-Type: message/external-body;
     access-type=mail-server
     server="listserv@bogus.bitnet";
     expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)"

Content-type: application/postscript
Content-ID:

get RFC-MIME.DOC

--42--

В приведенных примерах значение Content-transfer-encoding для внешних данных в формате postscript полагается по умолчанию как "7bit".

Заголовки общего и вложенного(их) писем (имеющих внешнее тело) должны удовлетворять тем же правилам, что и для типа message/partial во избежание путаницы.

Поскольку внешнее тело не пересылается в виде почты, то оно не обязано удовлетворять требованиям длины строк и иметь 7-битную форму, оно может быть просто бинарным файлом. Поэтому поле Content-Transfer-Encoding не является необходимым, хотя его наличие допускается.

Тело письма типа "message/external-body" обрабатывается в сответствии с основным синтаксисом стандарта RFC 822, в частности, все, что идет до первой последовательной пары концов строки (CRLF), является заголовком письма, а все, что идет после, является "мнимым" телом письма, которое игнорируется для большинства типов доступа.

Формальный синтаксис поля заголовка 'content-type' для данных типа 'message' — следующий:

message_тип := "message" "/" message_подтип

message_подтип := "rfc822"
                / "partial" 2-3 partial_параметра
                / "external-body" 1 external_параметр
                / расширение (не предопределенный подтип)

partial_параметр := (";" "id" "=" значение)
                 /  (";" "number" "=" 1*ЦИФРА)
                 /  (";" "total" "=" 1*ЦИФРА)
; id и number требуются всегда; total требуется для последнего  фрагмен-
; та послания.

external_параметр := (";" "access-type" "=" тип_доступа)
                   / (";" "expiration" "=" дата-время)
             ; Дата-время должны быть экранированы кавычками
                   / (";" "size" "=" 1*Цифра)
                   / (";"  "permission"  "="  ("read"  /  "read-write"))
             ; Значение permission нечувствительно к регистру букв
                   / (";" "name" "=" значение)
                   / (";" "site" "=" значение)
                   / (";" "dir" "=" значение)
                   / (";" "mode" "=" значение)
                   / (";" "server" "=" значение)
                   / (";" "subject" "=" значение)
; access-type требуется всегда; все остальное — в зависимости от  значе-
; ния access-type

тип_доступа := "ftp" / "anon-ftp" / "tftp" / "local-file"
               / "afs" / "mail-server" /
               / расширение (непредопределенный параметр)
; Нечувствителен к регистру букв
2007 - 2017 © Русские переводы RFC, IETF, ISOC.