logo search
Администрирование ИС ПОСОБИЕ

3.2.3.2. Поле типа содержания тела почтового сообщения (Content-Type)

Поле типа используется для описания типа данных, которые содержатся в теле почтового сообщения. Это поле сообщает программе чтения почты, какого сорта преобразования необходимы для того, чтобы сообщение правильно проинтерпретировать. Эта же информация используется и программой рассылки при кодировании/декодировании почты. Стандарт MIME определяет семь типов данных, которые можно передавать в теле письма:

Общая форма записи поля выглядит в записи Бекуса-Наура следующим образом:

Content-Type := type "/" subtype *[";" parameter]

type := "application" / "audio"

/ "image" / "message"

/ "multipart" / "text"

/ "video" / x-token

x-token := <Два символа "X-", за которыми без пробела

следует последовательность любых символов>

subtype := token

parameter := attribute "=" value

attribute := token

value := token / quoted-string

token := 1*<любой символ кроме пробела и управляющего символа,

или tspecials>

tspecials := "(" / ")" / "<" / ">" / "@" ; Обязательно

/ "," / ";" / ":" / "\" / <"> ; должны быть,

/ "/" / "[" / "]" / "?" / "." ; заключены в

/ "=" ; кавычки.

Остановимся подробнее на каждом из типов, разрешенных стандартом MIME.

Text. Этот тип указывает на то, что в теле сообщения содержится текст. Основным подтипом типа "text" является "plain", что обозначает так называемый планарный текст. Понятие планарного текста появилось в связи с тем, что существует еще размеченный текст, т.е. текст со встроенными в него символами управления отображением, и гипертекст, т.е. текст, который можно просматривать не последовательно, а произвольно, следуя гипертекстовым ссылкам. Для обозначения размеченного текста используют подтип "richtext", а для обозначения гипертекста - подтип "html". Вообще говоря, "html" - это специальный вид размеченного текста, который используется для представления гипертекстовой информации в системе World Wide Web, которая получила в последнее время широкое распространение в Internet. Понятие размеченного текста требует более подробного обсуждения, так как его передача и интерпретация являются одной из причин появления стандарта MIME.

"Richtext" определяет текст со встроенными в него специальными управляющими последовательностями, которые в соответствии со стандартом языка разметки документов SGML (Standard Generalized Markup Language) называются тагами. Таги представляют из себя последовательность символов типа "<строка-символов>". "Строка-символов" определяет управляющее действие. Таги делятся на таги начала элемента текста ("<......>") и таги конца элемента текста ("</......>"). В качестве примера такой разметки можно привести следующий фрагмент текста:

<bold>Now</bold> is the time for

<italic>all</italic> good men

<smaller>(and <lt>women>)</smaller> to

<ignoreme></ignoreme> come

to the aid of their

<nl>

В этом фрагменте <bold> означает выделение "жирным" шрифтом, <italic> - курсив, <smaller> - мелкий шрифт, <lt> - знак "<", игнорирование обозначено как <ignoreme>, новая строка как <nl>. Далее приведен полный перечень управляющих последовательностей:

Bold

"жирный" шрифт

Italic

курсив

Fixed

causes the subsequent text to be in a fixed width font

Smaller

уменьшенный шрифт

Bigger

увеличенный шрифт

Underline

подчеркнутый текст

Center

отцентрированный текст

FlushLeft

выровненный по левому краю

FlushRight

выровненный по правому краю

Indent

отступ от левого края

IndentRight

отступ от правого края

Outdent

отмена левого отступа

OutdentRight

отмена правого отступа

SamePage

размещение текста на одной странице

Subscript

подстрочный текст

Superscript

надстрочный текст

Heading

заголовок

Footing

текст ссылки

ISO-8859-X

текст в кодировке ISO-8859-X

US-ASCII

текст в кодировке US-ASCII

Excerpt

цитата

Paragraph

параграф

Signature

автограф (подпись)

Comment

комментарий (не отображается)

No-op

нет операции

lt

знак "меньше"("<")

nl

новая строка

np

новая страница

Специальный тип разметки задается подтипом "html". Это так называемый гипертекст. Разметка гипертекста строится по тому же принципу, как и в тексте типа "richtext". Однако применяются таги, позволяющие описать гипертекстовые ссылки. К таким тагам относятся "<A HREF="......">.....</A>", <IMG ....>, <A NAME="...."></A>. Таг "<A HREF="......"> .......</A>" определяет следующий фрагмент текста, который будет просматриваться. При этом текст между тагом начала и тагом конца выделяется в программе просмотра цветом или другим способом и используется как контекстная гипертекстовая ссылка. Таг <IMG .....> задет встроенный в текст документа графический образ. В некотором смысле этот таг аналогичен "multipart", который разрешает комбинировать сообщение из нескольких фрагментов разного типа. Таг <A NAME...> определяет "якорь", т.е. место внутри документа, на которое можно сослаться как на метку. В качестве примера такой разметки текста можно привести следующий фрагмент:

Это пример разметки документа в формате HTML.

<H1> Это заголовок документа</H1>

<P> - Это параграф.

<A HREF="test.html#mark1"> Это пример гипертекстовой ссылки.</A>

<IMG SRC="test.gif" ALIGN=Bottom> Это встроенный image.

<A NAME="mark1"></A> Это "якорь" внутри текста документа.

Multipart. Этот тип содержания тела почтового сообщения определяет смешанный документ. Смешанный документ может состоять из фрагментов данных разного типа. Данный тип имеет ряд подтипов.

Подтип "mixed" может создавать сообщения, состоящие из нескольких фрагментов, которые разделены между собой границей, задаваемой в качестве параметра подтипа. Приведем простой пример:

From: Nathaniel Borenstein <nsb@bellcore.com>

To: Ned Freed <ned@innosoft.com>

Subject: Sample message

MIME-Version: 1.0

Content-type: multipart/mixed; boundary="simple boundary"

This is the preamble. It is to be ignored, though it is

a handy place for mail composers to include an explanatory

note to non-MIME compliant read ers.

--simple boundary

This is implicitly typed plain ASCII text.

It does NOT end with a linebreak.

--simple boundary

Content-type: text/plain; charset=us-ascii

This is explicitly typed plain ASCII text.

It DOES end with a linebreak.

--simple boundary--

This is the epilogue. It is also to be ignored.

В данном примере поле "Content-Type" определяет подтип "mixed" и границу между фрагментами, как строку "--simple boundary--". В начале каждого фрагмента может быть задана своя строка с полем "Content-Type". Как видно из примера, существует два фрагмента, которые не отображаются: преамбула и эпилог, в которые можно поместить комментарии.

Другим подтипом может быть подтип "alternative". Данный подтип позволяет организовать вариабельный просмотр почтового сообщения в зависимости от типа программы просмотра. Приведем пример:

From: Nathaniel Borenstein <nsb@bellcore.com>

To: Ned Freed <ned@innosoft.com>

Subject: Formatted text mail

MIME-Version: 1.0

Content-Type: multipart/alternative; boundary=boundary42

--boundary42

Content-Type: text/plain; charset=us-ascii

...plain text version of message goes here....

--boundary42

Content-Type: text/richtext

.... richtext version of same message goes here ...

--boundary42

Content-Type: text/x-whatever

.... fanciest formatted version of same message goes here

...

--boundary42--

В этом примере для работы с планарным текстом при использовании алфавитно-цифровых программ просмотра предназначен первый фрагмент текста. Для просмотра размеченного текста используется второй фрагмент, для специальной программы просмотра может быть подготовлен специальный вариант (фрагмент 3).

Подтип "digest" предназначен для многоцелевого почтового сообщения, когда различным частям хотят приписать более детальную информацию, чем просто тип:

From: Moderator-Address

MIME-Version: 1.0

Subject: Internet Digest, volume 42

Content-Type: multipart/digest;

boundary="---- next message ----"

------ next message ----

From: someone-else

Subject: my opinion

...body goes here ...

------ next message ----

From: someone-else-again

Subject: my different opinion

... another body goes here...

------ next message ------

Приведенный пример показывает как можно воспользоваться подтипом "digest" для рассылки разным пользователям и по разному поводу почты, используя поля "From" и "Subject" в качестве частных заголовков.

Подтип "parallel" предназначен для составления такого почтового сообщения, части которого должны отображаться одновременно, что предполагает запуск сразу нескольких программ просмотра. Синтаксис такого сообщения аналогичен рассмотренным выше.

Тип "message" предназначен для работы с обычными почтовыми сообщениями, которые однако не могут быть переданы по почте по разного рода причинам. Эти причины объясняются подтипами данного типа.

Подтип "partial" предназначен для передачи одного большого сообщения по частям для последующей автоматической сборки у получателя. Приведем пример передачи аудио-сообщения разбитого на части:

X-Weird-Header-1: Foo

From: Bill@host.com

To: joe@otherhost.com

Subject: Audio mail

Message-ID: id1@host.com

MIME-Version: 1.0

Content-type: message/partial;

id="ABC@host.com";

number=1; total=2

X-Weird-Header-1: Bar

X-Weird-Header-2: Hello

Message-ID: anotherid@foo.com

Content-type: audio/basic

Content-transfer-encoding: base64

... first half of encoded audio data goes here...

and the second half might look something like this:

From: Bill@host.com

To: joe@otherhost.com

Subject: Audio mail

MIME-Version: 1.0

Message-ID: id2@host.com

Content-type: message/partial;

id="ABC@host.com"; number=2; total=2

... second half of encoded audio data goes here...

Атрибуты подтипа определяют идентификатор сообщения (id), номер порции (number) и общее число порций (total). Следует обратить внимание на то, что каждая часть имеет свое поле "Content-Type". Это означает, что все сообщение может состоять из частей разных типов.

Другим подтипом является "External-Body", который позволяет ссылаться на внешние, относительно сообщения, информационные источники. Приведем конкретный пример:

From: Whomever

Subject: whatever

MIME-Version: 1.0

Message-ID: id1@host.com

Content-Type: multipart/alternative; boundary=42

--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

--42

Content-Type: message/external-body;

name="/u/nsb/writing/rfcs/RFC-XXXX.ps";

site="thumper.bellcore.com";

access-type=AFS

expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)"

Content-type: application/postscript

--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

get rfc-xxxx doc

--42--

В данном примере использованы "External-Body" и "multipart/alternative". Все сообщение разбито на несколько фрагментов. В каждом из фрагментов находится ссылка на внешний файл. Реально, тела почтового сообщения нет (границы программами просмотра не отображаются). Однако, если программа просмотра способна работать с внешними протоколами, то можно ссылки разрешить автоматически, запуская соответствующий сервис.

Стандартным подтипом типа "message" является "rfc822". Данный подтип определяет сообщения стандарта RFC-822.

Типы описания нетекстовой информации. Таких типов имеется четыре: