Здавалка
Главная | Обратная связь

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



Поле типа используется для описания типа данных, которые содержатся в теле почтового сообщения. Это поле сообщает программе чтения почты какого сорта преобразования необходимы для того, чтобы сообщение правильно проинтерпретировать. Эта же информация используется и программой рассылки при кодировании/декодировании почты. Стандарт MIME определяет семь типов данных, которые можно передавать в теле письма: текст (text); смешанный тип (multipart); почтовое сообщение (message); графический образ (image); аудио информация (audio); фильм или видео (video); приложение (application). Общая форма записи поля выглядит в записи Бекуса-Наура как:

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 называются тагами. Таги представляют из себя последовательность символов типа "<строка-символов>". "Строка-символов" определяет управляющее действие. Таги делятся на таги начала элемента текста ("<......>") и таги конца элемента текста ("</......>"). В качестве примера такой разметки можно привести следующий фрагмент текста:

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

Специальный тип разметки задается подтипом "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 readers.

--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", который позволяет ссылаться на внешние, относительно сообщения, информационные источники. Этот подтип похож на гипертекстовую ссылку из типа "text".Приведем конкретный пример:

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". Данный подтип определяет сообщения стандарта RFC822.

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

· "image" для описания графических образов. Наиболее часто используются файлы форматов GIF и JPEG.

· "audio" для описания аудио информации. Для воспроизведения сообщения данного типа требуется специальное оборудование.

· "video" для передачи фильмов. Наиболее популярным является формат MPEG.

· "application" для передачи данных любого другого формата, обычно используется для передачи двоичных данных для последующего промежуточного преобразования. Так если на машине стоит видео-карта с 512Kb памяти, а графика подготовлена в 256 цветах, то сначала ее следует преобразовать и здесь может помочь тип "application". Основной подтип данного типа - "octet-stream", но существуют "ODA" и "Postscript".

Назначение данных типов ясно из названия - обозначение данных для последующей обработки как данных в форматах, определяемых подтипом.

Поле типа кодирования почтового сообщения (Content-Transfer-Encoding). Многие данные передаются по почте в их исходном виде. Это могут быть 7bit символы, 8bit символы, 64base символы и т.п. Однако при работе в разнородных почтовых средах необходимо определить механизм их представления в стандартном виде - US-ASCII. Для этого существуют процедуры кодирования такого сорта данных. Наиболее широко применяемая - uuencode. Для того, чтобы при получении данные были бы правильно распакованы и введено в стандарт поле "Сontent-Transfer-Encoding". Синтаксис этого поля следующий:

Content-Transfer-Encoding:= "BASE64" / "QUOTED-PRINTABLE" /

"8BIT" / "7BIT" /

"BINARY" / x-token

Каждая из альтернатив применяется в своем подходящем случае. Альтернативы "8bit", "7bit", "BINARY" реально никакого преобразования не требуют, так как почта передается байтами и SMTP не делает различия между ними. Однако они введены для строгости описания типов. "BASE64" обычно используется в связке с типом "text/ISO-8859-1", "x-token" позволяет пользователю описать свою процедуру преобразования.

Дополнительные необязательные поля. Как уже говорилось ранее, стандарт определяет еще два дополнительных поля: "Content-ID" и"Content-Description". Первое поле определяет уникальный идентификатор содержания, а второе служит для комментария содержания. Ни то, ни другое программами просмотра обычно не отображаются.

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

MIME-Version: 1.0

From: Nathaniel Borenstein <nsb@bellcore.com>

Subject: A multipart example

Content-Type: multipart/mixed;

boundary=unique-boundary-1

 

This is the preamble area of a multipart message.

Mail readers that understand multipart format

should ignore this preamble.

If you are reading this text, you might want to

consider changing to a mail reader that understands

how to properly display multipart messages.

--unique-boundary-1

 

...Some text appears here...

[Note that the preceding blank line means

no header fields were given and this is text,

with charset US ASCII. It could have been

done with explicit typing as in the next part.]

 

--unique-boundary-1

Content-type: text/plain; charset=US-ASCII

 

This could have been part of the previous part,

but illustrates explicit versus implicit

typing of body parts.

 

--unique-boundary-1

Content-Type: multipart/parallel;

boundary=unique-boundary-2

 

--unique-boundary-2

Content-Type: audio/basic

Content-Transfer-Encoding: base64

 

... base64-encoded 8000 Hz single-channel

u-law-format audio data goes here....

 

--unique-boundary-2

 

Content-Type: image/gif

Content-Transfer-Encoding: Base64

 

... base64-encoded image data goes here....

 

--unique-boundary-2--

 

--unique-boundary-1

Content-type: text/richtext

 

This is <bold><italic>richtext.</italic></bold>

<nl><nl>Isn't it <bigger><bigger>cool?</bigger></bigger>

 

--unique-boundary-1

Content-Type: message/rfc822

 

From: (name in US-ASCII)

Subject: (subject in US-ASCII)

Content-Type: Text/plain; charset=ISO-8859-1

Content-Transfer-Encoding: Quoted-printable

 

... Additional text in ISO-8859-1 goes here ...

 

--unique-boundary-1--

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







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.