Электронная почта как сервис глобальной сети. Протоколы передачи почты
Реферат - Компьютеры, программирование
Другие рефераты по предмету Компьютеры, программирование
матированный текст.RichtextТекст с элементами форматирования и выделениями, например с курсивом, подчеркиваниями, жирными буквами и т.д.EnrichedУсовершенствованный и упрощенный вариант подтипа richtext.MultipartMixedТело сообщения состоит из нескольких частей; обрабатывать последовательно.ParallelТело сообщения состоит из нескольких частей; обрабатывать параллельно.DigestДайджест электронной почты.AlternativeТело сообщения состоит из нескольких частей; все части семантически идентичны.MessageRFC822В теле содержится почтовое сообщение стандарта RFC 822.PartialФрагмент почтового сообщения.External-BodyУказатель на действительное почтовое сообщение (не включенное в тело данного сообщения).ApplicationOctet-StreamПроизвольные двоичные данные.PostscriptПрограмма на языке Postscript.ImageJPEGФормат ISO 10918.GIFГрафический формат фирмы Compuserve.AudioBasicЗвук в 8-битном ISDN-формате mu-law.VideoMPEGФормат ISO11172Поля заголовка Content-ID и Content-Description могут отсутствовать. Первое служит для идентификации MIME-содержимого электронного письма, а второе может содержать дополнительное описание. Например, если MIME-содержимым является графический образ, в поле Content-Description можно поместить описание этого образа. В табл. 5 перечислены возможные значения Content-Transfer-Encoding, доступные в настоящее время.
Таблица 5
Допустимые значения поля Content-Tfansfer-Encoding
Content-Transfer-EncodingОписание7bitФормат NVT-ASCII стандартный формат почтовых сообщений.Quoted-printableПолезен в случае, если текст содержит небольшое количество восьмибитных символов.Base64Формат, в котором три байта данных упакованы в четыре шестибитных значения.8bitСодержит текст, в котором не все символы принадлежат стандартному набору ASCII (то есть в некоторых установлен восьмой бит).BinaryВосьмибитные данные без символов окончания строки.
По умолчанию формат почтовых сообщений удовлетворяет кодовому набору NVT-ASCII. 8-битные агенты МТА сейчас практически отсутствуют, но как только они получат широкое распространение, вероятно, передача бинарной и текстовой информации в 8-битной кодировке возрастет. В настоящий момент для передачи 8-битной информации по 7-битным каналам Internet лучше всего использовать кодировки quoted-printable или base64.
2.2.3. Способы кодирования MIME.
Для кодирования небольшого количества 8-битных данных в 7-битный формат NVT ASCII лучше всего подходит схема quoted printable. 8-битный символ в этой схеме представляется в виде последовательности из трех символов. Последовательность всегда начинается со знака “равно” (=). Сразу за знаком “равно” следует двузначное шестнадцатиричное число, представляющее код ASCII кодируемого символа. Рассмотрим закодированную quoted printable последовательность JAMSA PRESS. Хоть она и не содержит 8-битных символов, зато позволяет хорошо проиллюстрировать принцип кодирования. Закодированное сочетание JAMSA PRESS выглядит так:
=4A=41=4D=53=41=20=50=52=45=53=53
Другими словами, буква J имеет шестнадцатиричный код ASCII 0x4A, буква А 0х41 и т.д. Схема quoted printable передает ASCII код для каждого символа последовательности. То есть для знака А (ASCII 0x4A) передается код знака “равно” (ASCII 0x3D), код цифры 4 (ASCII 0x34) и код знака А (0х41). Данную схему довольно удобно использовать, но она утраивает общее количество информации в сообщении. Таким образом, область применения quoted printable сообщение с небольшим количеством символов, в которых установлен старший (восьмой) бит. Основная часть сообщения должна состоять обычных семибитных символов.
В отличие от quoted printable, кодирование Base-64 увеличивает размер сообщения всего лишь на одну треть. Каждая последовательность из трех байтов (24 бита) превращается в четыре шестибитовых (тоже 24 бита). Шестибитные символы соответствуют формату NVT ASCII и приведены в табл. 6.
Таблица 6
Таблица кодировки Base-64
6 битASCII6 битASCII6 битASCII6 битASCII0A16Q32g48w1B17R33h49x2C18S34i50y3D19T35j51z4E20U36k5205F21V37l5316G22W38m5427H23X39n5538I24Y40o5649J25Z41p57510K26a42q58611L27b43r59712M28c44s60813N29d45t61914O30e46u62+15P31f47v63/
Если количество байтов (символов) в сообщении не кратно трем, используются дополняющие символы “равно”. Например, слово KEN в формате Base-64 выглядит как “S0VO” (дополнительных символов не требуется). Слово COPE в формате Base-64 выглядит как “Q09QRQ==” (требуются два дополнительных символа-нуля). Слово JAMSA в формате Base-64 выглядит как “SkFNU0E=” (требуется один дополнительный символ-ноль).
2.2.4. Реализации метода Base-64.
Далее рассмотрен процесс кодирования слова KEN методом Base-64. Описания участвующих в процессе переменных:
BYTE cTemp, cTempHigh, cTempLow;
BYTE cFirst6Bits, cSecond6Bits;
BYTE cThird6Bits, cFourth6Bits;
BYTE cFirstLetter = K;
BYTE cSecondLetter = E;
BYTE cThirdLetter = N;
Кодирование данных по методу Base-64
Операторы языка C/C++, реализующие способ кодирования Base-64:
cFirst5Bits = cFirthLetter >> 2; (1)
cTemp = cFirstLetter << 4; (2A)
cTempHigh = cTemp & 0x30; (2B)
cTempLow = cSecondLetter >> 4; (2C)
cSecond6Bits = cTempHigh | cTempL w; (2D)
cTemp = cSecondLetter << 2; (3A)
cTempHigh = cTemp & 0x3C; (3B)
cTempLow = cThirdLetter >> 6; (3C)
cThird6Bits = cTempHigh | c TempLow; (3D)
cFourth6Bits = cThirdLetter & 0x3F; (4)
Первым делом биты переменной сFirstLetter (символа K) сдвигаются вправо на две позиции. Получается новый байт, содержащий первые шесть бит нашей последовательности. Далее полученное значение записывается в переменную cFirst6Bits. Дальше, чтобы получить следующее значение, нужно объединить два младших бита первого символа (K) с четырьмя старшими второго (E), т.е. нужно переместить первый и второй биты буквы K на позиции 5 и 6 они будут старшими битами следующего шестибитного символа. Операция 2А, двоичный сдвиг влево на четыре позиции демонстрирует, как это делается. Результат сдвига зап