Передача специальных символов и вложенных сообщений

Почему письма не доходят до адресата

Вероятно, вы встречались с ситуациями, когда электронное письмо так и не доходило до адресата. Это может произойти по нескольким причинам. Возможно, сервер получателя не принимает письма от данного отправителя. Кроме того, послание будет отправлено назад, если сервер перегружен и не может обработать запрос. Даже если письмо не отвергается сервером получателя, оно может вернуться, если, например, вы ошиблись при написании имени получателя – система сообщит, что на сервере не существует получателя с таким именем. И наконец, может возникнуть ситуация, когда получатель с указанным именем хотя и существует, но его почтовый ящик переполнен.

Протокол SMTP позволяет передавать не все символы ASCII, а только те из них, которые характерны для английского алфавита и определяются базовой таблицей кодирования ASCII. Как известно, ASCII определяет две таблицы кодирования: базовую семибитную (символы с номерами 0-127) и расширенную восьмибитную (128-255).

Для кодирования русских букв используется несколько различных кодировок: кириллица Windows, кириллица KOI-8 и т.д. Последняя кодировка была придумана для того, чтобы письма на русском языке оставались читаемыми при перекодировании их каким-либо сервером, встретившимся на их пути, в семибитную кодировку – значения кодов русских символов в этой таблице на 128 больше, чем значения кодов символов соответствующих им букв латинского алфавита. Символы русского алфавита относятся к расширенной таблице кодирования, и для протокола SMTP они являются специальными символами. При передаче специальных символов обычно используется стандарт кодирования MIME (Multipurpose Internet Mail Extensions – многоцелевые расширения почтового стандарта Интернета), который позволяет передавать специальные символы, а также кодировать нетекстовую информацию для передачи по электронной почте, например графики, которые вы помещаете во вложении к письму.

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

Но использование MIME все же не решает всех проблем с передачей русскоязычных текстов. Если вы получаете письма на русском языке, то порой в полученном письме видна лишь нечитаемая смесь букв и знаков. При этом вы можете перебрать все доступные для почтовой программы варианты кодировки русского алфавита, но так и не получить читаемого текста. Дело в том, что при передаче кодировка письма может быть изменена, причем не всегда корректно. Иногда почтовый сервер преобразует письма в KOI8-R, считая, что они имеют кодировку Windows. Между тем возможна ситуация, когда одно из исходных писем уже было преобразовано в KOI8-R системой отправки. В результате оба письма придут в нечитаемом виде.

Таких некорректных перекодировок на пути следования письма может оказаться несколько, и чтобы наконец-то прочесть послание, используются специальные перекодировщики, например бесплатная TotRecode или платная программа «Реаниматор» (http://www.ars.ru/products/reanim/), позволяющая спасти текст, прошедший до 10 неправильных перекодировок. Используя эту программу, можно восстановить даже безнадежно испорченные письма, при пересылке которых был «потерян 8-й бит», то есть та информация, которая связана с кодами русских букв. Расшифровка в этом случае становится неоднозначной, однако на основе словаря русского языка «Реаниматор» предложит несколько вариантов для каждого из слов сообщения, из которых вы легко выберете слова, складывающиеся в осмысленные фразы.


Лекция 7