Электронная почта по-русски

Сергей Мелихов, DataX/FLORIN, Inc.

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

Таблица символов ASCII

Так вот, в те годы (давным-давно) нормальные американцы, те что делают компьютеры, еще не знали, что кроме американского народа существуют другие народы. Открытие Европы и других стран тогда еще не состоялось. Другие американцы, которым по долгу службы полагалось, конечно знали о существовании других частей света, а некоторые из них даже догадывались о существовании других языков, кроме американского, поскольку когда они общались с иноземцами, те иногда вдруг вместо нормальных, человеческих, звуков, вдруг ничинали издавать нечто нечленораздельное и непонятное никому, кроме них самих. Но даже эти, высоко-эрудированные, американцы, воспринимали столь странное поведение собеседников лишь как легкое недоразумение, не более. Тем паче, что за недоразумением почти всегда следовали глубочайшие извинения.

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

Но время шло, число иноземцев, имеющих доступ к компьютерам, росло, и - о ужас - однажды они возжелали общаться между собой через электронные средства коммуникации, причем на своем тарабарском языке! Им так видите-ли было естественнее. И тут-то и выяснилось, что американские программы для общения на тарабатском языке не очень-то и годятся, поскольку расчитаны только на американский алфавит. Если кто не знает, американский набор символов самый маленький, даже англичанам, от которых американцы произошли, требуются странные дополнительные значки для обозначения их денег. А французам простых букв-то надо раза в полтора больше. Про нас, русских (или российских?), мы вообще до поры до времени скромно умолчим из политических соображений.

Так вот, американцы, когда создавали свои компьютеры, как вы помните из сказанного выше, о наличии иных алфавитов помимо их собственного не задумывались, и решили, что для представления всяких печатных символов с лихвой хватит 128 чисел. Ну в самом деле, 27 строчных букв, 27 прописных, 10 цифр, десяток знаков препинания - от силы 80 получается. Так что еще и запас оставался, ничего не скажешь.

Ну дальше понятно, 128 это 2 в степени 7, значит для представления всевозможных символов было достаточно 7 бит. Именно такой, 7-битной, является таблица символов ASCII. Первая буква означает "для Америки".

Таблица символов Latin-1

Иноземцы, недовольные дискриминацией их родных языков какими-то компьютерными железками, стали жаловаться американцам. Те сначала свои компьютеры защищали и предлагали несчастным бросить мучаться попусту и переходить на нормальный язык. Как всегда бывает, ряды недовольных были расколоты, нашлись штрейкбрехеры, и не ясно, чем бы дело кончилось, не вмешайся Правительство иноземцев. У правительств, как известно, резоны не всегда понятны, зато результаты может почуствовать каждый на своей шкуре. Правительства запретили родной язык забывать а с американцами даже пригрозили поссориться. И те начали наконец чесать репу.

Вообще-то для представления каждого печатного символа с самого начала разработчики компьютеров и программного обеспечения выделяли один байт. В байте всегда несколько бит, в процессе естественного отбора выжили и размножились только байты, состоящие из 8 бит. Лишний бит - это еще 128 символов и там можно разместить все крючки и завитушки, столь милые сердцу западных европейцев. Так была создана таблица символов Latin-1.

Но хорошо не стало. И хорошо не стало до сих пор. А если бы было хорошо, нечего было бы и эту статью писать.

Партизаны на рельсах Сети

Появление таблицы Latin-1 решило проблему представления некоторых национальных алфавитов. Но теперь нужны были программы, способные с этими представлениями работать! Те программы, которые американцы написали до этого, не расчитаны на наличие информации в 8-м бите! Разумеется, программа, не расчитанная на 8-й бит, может неожиданно заработать и с 8-м битом. Но это некачественная программа. Те программисты, что хорошо учились в школе, твердо запомнили: следует проверять параметры функции на область определения, а результат - на область допустимых значений. И проверяли, тем более что это было элементарно - 8-битные символы выглядели точь-в-точь как отрицательные числа. Сравнил с нулем и все. То, что выходило за рамки, признавалось мусором. А рамки-то жестко запрограммированы, значит надо программу переделывать, а программ много, а люди не вечны...

Теперь представим себе европейца, создающего информационную систему для своего предприятия. Ему нужна таблица Latin-1, он ищет ПО, которое ее поддерживает, если он чего-то не нашел, он разрабатывет сам. В конце концов проблема решается. Теперь тот же самый европеец решил сообщить о своем успехе другому европейцу посредством крайне удобного средства общения - электронного письма. У каждого из них почтовая система пропускает 8-й бит (предположим). Но пути Господни неисповедимы, и по дороге сообщение попадает на промежуточную почтовую машину, где 8-й бит по старинке считают мусором и ОБНУЛЯЮТ. Все, привет.

Хорошо, если упомянутая выше нехорошая машина находится там же, в Европе. Можно, что называется, пойти и договориться. А если не в Европе? А если почтовых машин сто тысяч, и только тысяча из них "режет" (обнуляет) 8-й бит? А письма ходят разными, подчас непредсказуемыми путями? Вы наверное согласитесь со мной, если я сравню такие почтовые машины с диверсантами, залегшими возле железнодорожного полотна. И, как и в случае с настоящими диверсантами, борьба с ними была долгой и мучительной. Сейчас их почти не осталось, они на грани полного уничтожения и редкие встречи с ними вызывают не раздражение, а удивление, смешанное с уважением: "надо же, живучесть-то какая! Даже старость их не берет!" Но до "сейчас" мы в нашем повествовании еще не добрались.

Таблица символов КОИ-8

Теперь оставим западных европейцев, не такие уж они в конце концов несчастные. Ну потеряли пару завитушек в письме, остальные буквы-то читаются! Неприятно, но понятно. Давайте подумаем о нас, европейцах не просто восточных, а, как бы это сказать.. дальне-восточных. Наш алфавит отличается от латинского полностью, символов в нем много (66), поэтому в таблицу Latin-1 вместе с латинскими завитушками он не уместился. Придумали ему отдельную таблицу, она получилась пятой по счету. В конце концов называться эта таблица стала ISO 8859-5. Кто придумал эту таблицу, непонятно. ISO 8859-5 - это продукт в чистом виде, вещь в себе, прекрасная в своей чистоте и возвышенности. Создатели ISO 8859-5 абстрагировались от массы технических проблем, которые могли бы повлиять на расположение русских букв в таблице. Например, она конфликтует с псевдографикой в DOS, почему-то не подошла для Windows. А тема нашего разговора - электронная почта?

Представьте себе письмо, написанное по-русски, отправленное электронной почтой и нарвавшееся по пути на "диверсанта", срезающего у всех писем 8-й бит. После такого "обрезания" те буквы, что были русскими, становятся латинскими. Теми, чей номер в таблице меньше ровно на 128.

Теперь представим себя на месте разработчиков таблицы символов кириллицы, желающих повысить устойчивость передаваемой текстовой информации к "обрезанию". Наверное, мы захотим сделать так, чтобы адресат смог понять содержание письма, если оно написано по-русски, пусть и латинскими буквами. К счастью, значительное число букв кириллицы имеет фонетические аналоги в латинском алфавите. Например П и P, Р и R. Есть несколько совпадающих к тому же и по написанию. Значит, разумно так расположить русские буквы, чтобы они отличались от АНАЛОГИЧНЫХ ЛАТИНСКИХ на число 128! Тогда потеря 8-го бита превратит текст хоть и в состоящий из одной латиницы, но все равно читаемый по-русски. Неприятно, зато понятно.

Таблица символов КОИ-8 как раз и есть такая таблица. И именно она применяется для обмена почтой и новостями в Internet. Надеюсь, я смог доказать вам, что КОИ-8 не блажь, а суровая необходимость. Если же вы полагаете, что с истреблением "диверсантов" КОИ-8 больше не актуальна, приведу один свежий случай.

Одна моя знакомая поехала в качестве аспирантки в Англию. Там была машина и электронная почта. Первое письмо, которое я от нее получил, было на языке "ruglish", том самом фонетическом эквиваленте, когда "здравствуй" выглядит как "zdrawstwuj". Брр... Я, знаете ли, предпочитаю творение Кирилла и Мефодия для общения с соплеменниками, поэтому часть своего ответа написал по-русски, в КОИ-8. Я это сделал в надежде, что мой корреспондент - не первый русский в Англии, и, может быть, просто не знает, что все уже налажено. Если нет, то по симптомам (закорючки таблицы Latin-1 вместо русских букв, например), можно было бы предложить простой выход, например, прислать правильный экранный шрифт.

Но не тут-то было. Во-первых, в том английском университете, где работает моя знакомая, затаился "диверсант", и он срезал 8-й бит в каждом символе моего послания (вот он, консерватизм!). В результате же письмо было прочитано! Оно стало похоже на близкий сердцу уехавших русских "ruglish", хотя и отличалось в способе имитации ряда букв. Вокруг этих различий и завязался воспитательный процесс - меня, недоумка, взялись обучать писать правильно! Ни о каком использовании кириллицы и речи больше не было, ведь "ruglish" это так удобно -"my vse tak pishem". Но это уже тема для социологической науки.

Другие таблицы символов

Итак, придумали таблицу символов (мы еще говорим: "кодировку", поскольку с помошью таблицы "закодирован" русский алфавит) для обмена почтой и назвали ее КОИ-8, что означает "код отображения информации 8-битный). И, скажете вы, наконец-то все образовалось. Нет, дорогие читатели, не образовалось (хотя и стало легче, конечно). Потому что случился очередной качественный скачок в наступлении компьютеров на нашу маленькую планету. Недорогие персональные компьютеры сделали огромное количество ничего не подозревавшего народа ПОЛЬЗОВАТЕЛЯМИ. А когда огромное количество народа овладевает какой-нибудь идеей или вешью, эта идея или вешь настолько видоизменяется, что хорошо, если не становится своей противоположностью. Так и с компьютерами. Персоналки перевернули все вверх-тормашками.

Раньше занятие с компьютером было делом элитным - теперь стало скорее вульгарным.

Раньше компьютеры большую часть времени расчитывали формулы и строили чертежи - теперь служат для игр или в лучшем случае для рисования красивых докладов начальству.

Раньше котировались мощные и надежные многозадачные операционные системы - VMS, VMS, UNIX - теперь всем подавай DOS и Windows.

Раньше компьютерный пользователь кое-что знал о своем компьютере и грамотно его использовал - теперь большинство ожидает от машины, что она сама себя настроит, наладит, договорится с другими машинами, а пользователю останется только получать удовольствие. Просить пользователя прочитать пяток страниц руководства и ввести пару Internet-адресов - чуть ли не дурной тон.

Не подумайте только, что я хочу сказать, что это ПЛОХО - просто это ДРУГАЯ жизнь.

Надо ли объяснять, что огромная масса персоналок имела свои собственные проблемы и устанавливала свои собственные стандарты. Одна из таких проблем нас с вами касается - это поддержка русского языка. Электронная почта мало кого тогда тревожила, а вот вводить и обрабатывать русские тексты в многочисленных программах для DOS надо было всем. Кодировка КОИ-8 не подходила для этой цели (так же как и ISO 8859-5), в ее таблице некоторые русские буквы находились на тех местах, которые импортные программы предполагали заполненными графическими символами - вертикальными и горизонтальными черточками, различными уголками, прямоугольниками и так далее. Псевдо-графические символы были очень важны - с их помощью достигалась привлекательность персоналок для пользователей. Поэтому была придумана еще одна кодировка кириллицы, в таблице которой русские буквы "обтекали" со всех сторон графические символы. Назвали эту кодировку "Альтернативной", поскольку она была альтернативой официальному стандарту - кодировке ISO-8859-5. Последнюю, чтобы не обиделась, стали величать "Основной". Но ей все равно почти никто не пользовался.

Когда настала очередная революция и все бросились осваивать Windows, выяснилось, что Альтернативная кодировка не подходит - говорят, какую-то ее часть первые версии Windows не обрабатывали ("не пропускали"). "Основная" тоже не подошла. Ничтоже сумняшеся кто-то подвинул русские буквы в таблице так, чтобы все они "пролезали", благо псевдо-графика в Windows не требуется, и получилась кодировка "Windows 1251", самая, наверное, теперь распространенная.

А как же с почтой

Итак, мы назвали четыре кодировки кириллицы. Все они объективно существуют, всеми пользуются. А почта? Internet - это то место, где вопрос, какую кодировку применять, перестает быть личным делом каждого. Если вы отправляете кому-то сообщение, то затем, вероятно, чтобы его прочитали. Если ваш получатель работает в DOS, а вы в Windows, то простая пересылка текста вам вряд ли поможет. Даже если письмо, отправленное в Альтернативной кодировке из DOS, дойдет до адресата в неискаженном виде, получателю придется:

- либо также запустить программу для DOS, чтобы его прочитать,

- либо каким-то образом перекодировать полученный текст, чтобы его смогла отобразить программа для Windows,

- либо обучить программу для Windows отображать "неродную" кодировку кириллицы,

- либо любоваться "зюками" на экране.

Проще говоря, для того, чтобы обмениваться почтой по-русски НАДО ЧТО-ТО НАЛАДИТЬ. Об этом мы и поговорим.

А если не налаживать

Для тех, кто не хочет ничего налаживать, есть готовые решения. Например для DOS - пакет под названием UUPC. Вам придется его установить и пользоваться только им и только в DOS и только в сочетании с модемом. Зато он будет конвертировать отправляемую корреспонденцию в кодировку КОИ-8, а приходящую - в Альтернативную. Вам об этом думать не надо. Если хочется чего-нибудь покрасивее - читайте дальше.

Для остальных сообщаем...

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

user agent - delivery agent - (delivery agent) - delivery agent - user agent
Пользователь взаимодействует с почтовой программой (user agent), которая позволяет ему вводить и читать письма, организовывать хранение пришедших писем, вести адресные книги и так далее. Можно сказать, что основная функция user agent - предоставить удобный пользовательский интерфейс. Чтобы доставить или получить письмо user agent обращается к ДОСТАВЩИКУ (delivery agent), который пользовательского интерфейса не имеет, зато владеет тонкостями маршрутизации корреспонденции. ДОСТАВЩИК напрямую или через промежуточные машины передает письмо другому ДОСТАВЩИКУ, который обслуживает адресата. Тот кладет письмо в персональный почтовый ящик, откуда его забирает user agent (почтовая программа) получателя. Это схема общая, в реальной жизни пользовательская почтовая программа может включать в себя часть функций ДОСТАВЩИКА. Мы рассмотрим некоторые варианты ниже.

Итак, где-то надо перекодировать письма. Уходящие - в КОИ-8, приходящие - в ту кодировку, которую предпочитает пользователь. Исходя из нашей схемы, это может сделать: - user agent - delivery agent

Рассмотрим каждый вариант.

Перекодировка в почтовой программе

Вообще-то в идеале надо приводить почту к стандартному виду как можно раньше, еще перед отправкой. В этом случае мы не рискуем нарваться на на ошибку или сбой при доставке, связанную с неправильной кодировкой письма. Однако здесь есть сложности.

Как вы, наверное, заметили, модульность приведенной выше схемы предоставляет нам свободу выбора почтовой программы. Таких программ достаточно много. Их десятки для UNIX и сотни для Windows. Один этот факт должен нас насторожить, если мы собираемся выработать сколько-нибудь общее решение. Ведь все это изобилие создано другими людьми, в большинстве своем американцами (см. выше), которые не подозревали о нашей с вами потребности почту перекодировать. И никак не приспособили свои (в большинстве - просто чудесные) программы к такой перекодировке.

Здесь стоит упомянуть одну замечательную почтовую программу - Zmail, в которую с самого начала была заложена возможность автоматической обработки приходящей, уходящей и сохраняемой в папках корреспонденции. Однако все усилия автора и его коллег использовать эту возможность для перекодировки пошли в свое время прахом. Этого Zmail не смогла.

Большой выбор означает, что даже если мы научим конкретную программу почту перекодировать, это все равно будет частное решение - мы не сможем заставить всех пользоваться именно этой программой (даже если мы - Microsoft), а нам ведь с ними (всеми) переписываться...

Тем не менее, бывают ситуации, когда оторванный от Родины простой русский человек, не имеющий ни понимающего его проблемы провайдера, ни UNIX на своей машине, просто вынужден что-то предпринимать. Давайте сразу дадим таким пользователям пару советов:

- если сможете, найдите почтовую программу, умеющую перекодировать корреспонденцию. Или напишите такую программу сами, если это дело вам по душе;

- иначе, достаньте руссификатор для Windows (пользователи DOS перестали читать раньше, а пользователи UNIX и локальных сетей будут обслужены далее по тексту), который позволяет вводить и отображать (то-есть имеет соответствующий набор шрифтов) кодировку КОИ-8. В качестве такого руссификатора мы можем скромно предложить наш собственный. Настройте почтовую программу таким образом, чтобы она использовала шрифты КОИ-8, а для ввода текста переключайте клавитуру не на стандартную для Windows кодировку 1251, а на ту же КОИ-8.

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

В большинстве случаев почтовые программы пугаются любых 8-битных символов и начинают их шифровать при отправке так, что потом 90% народа прочесть не может. Это гордо называется MIME, "quoted-printable" и проч. Если вы хотите быть понятыми, ОТКЛЮЧАЙТЕ шифровку 8-битных символов. Далеко не все почтовые программы могут автоматически и корректно восстановить текст из бессодержательного набора букв, цифр и знаков препинания.

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

Наиболее одиозный случай из моей практики - письмо, содержащее зашифрованный программой UUENCODE ZIP-архив, содержащий в свою очередь текст в Альтернативной кодировке. Сколько надо потратить времени, чтобы его прочесть пользователю Windows? При этом письмо не очень большое, компрессия дает экономию только отправителю, рассылающему его по сотням, если не тысячам адресов.

Перекодировка доставщиком

Итак, не мытьем так катанием можно заставить почтовую программу для Windows отправлять письма в КОИ-8. Но усилия требуются значительные, и не всегда удобно получается.

Гораздо удобнее, если программное обеспечение почтовой машины само может перекодировать почту. Тогда вы берете тот user agent, который вам больше по душе, и все. Только не забудьте отключить шифрацию 8-битных символов.

Коль у нас речь идет все больше о персональных компьютерах и их пользователях, необходимо сказать, что им приходится общаться сразу с двумя серверными программами, выполняющими роль доставщика.

Первая служит для отправки почты, и называется "служба SMTP". SMTP - протокол передачи писем в Internet. Вообще-то, служба SMTP и принимает письма тоже, не только отправляет. Однако расчитывать на SMTP для приема корреспонденции пользователям персоналок не приходится. Дело в том, что служба SMTP исходит из того, что машина-получатель всегда готова к приему почты. 24 часа в сутки, 7 дней в неделю. Конечно, она сможет переждать кратковременный сбой, но это уже ненормально, ЧП. Понятно, что постоянная готовность к приему почты по инициативе удаленного сервера - не есть свойство персональных компьютеров. Их просто выключают, когда не используют, не говоря уже о низкой надежности, ущербной многозадачности и т.д.

Поэтому почта, предназначенная для пользователя ПК, складируется на почтовой машине. Передается она на персоналку ПО ИНИЦИАТИВЕ ПОЛЬЗОВАТЕЛЯ, когда он будет готов ее принять. Этим заведует служба POP (Post Office Protocol).

Дальше все очевидно: надо научить сервер SMTP переводить письма из той кодировки, в которой по воле аллаха представлено отправляемое письмо, в кодировку КОИ-8. Сервер же POP должен переводить письма из КОИ-8 в ту кодировку, которую сможет понять пользователь. В какую только... И кто будет учить...

Как настроить перекодировку на почтовой машине

Как и в случае с почтовыми программами, доставщики уже написаны, причем не нами с вами. Наиболее известные программы такого рода - sendmail и MMDF. Причем sendmail является стандартом de-facto. В любой UNIX sendmail входит, и, кроме того, доступен в исходных текстах.

Мы сейчас не будем говорить о несовместимых с SMTP (то-есть с Internet) почтовых системах, таких как Lotus cc:Mail, Microsoft Mail. Внутри сетей, обслуживаемых такими системами наверняка либо все в порядке с русским языком, либо безнадежно. Нас это не касается, мы рассуждаем о почте в Сети, с которой несовместимые почтовые системы совмещаются с помощью шлюзов, на которых и следует заодно преобразовывать и кодировку символов кириллицы.

Кстати, в очередной раз прозвучало слово "UNIX", и надо наконец объясниться с теми, кто это имя переносит плохо. Итак, если UNIX вызывает у вас аллергию, подставляйте вместо него далее по тексту одно из слов: NT, VMS, DOS, NetWare. Чем дальше выбранное вами слово стоит в списке, тем ДОРОЖЕ и НЕУДОБНЕЕ будет ваше решение.

В своем оригинальном виде ни sendmail ни MMDF не предназначены для перекодировки почты. Однако и тот и другой имеют модульную структуру, то есть состоят из нескольких самостоятельных программ, каждая из которых выполняет свою задачу. Одна принимает корреспонденцию от локальной почтовой программы (то есть от user agent, работающего на той же машине, что и доставщик), другая отправляет письма через медленные модемные соединения по протоколу UUCP, третяя заведует коммуникациями по SMTP, четвертая кладет почту в почтовые ящики пользователей. И есть центральный распорядитель, который всем управяет. Для того, чтобы организовать перекодировку, надо модифицировать нужные нам модули. Для этого вовсе не обязательно их переписывать и перекомпилировать. Можно "обернуть" модуль в универсальный перекодировщик. Такой универсальный перекодировщик вызывается вместо оригинального модуля, принимает вместо него письма, перекодирует их и передает в обработанном виде оригинальному модулю. Аналогично можно "обернуть" и сервер POP.

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

Из какой и в какую таблицу перекодировать

Тут главное не ошибиться. Если текст представлен в Альтернативной кодировке, а вы его конвертируете, как будто он в Windows 1251, то я вам гарантирую, что информация будет серьезно повреждена, если не уничтожена.

В случае с приходящими письмами (мы предполагаем, что они в КОИ-8, но расчитывать на это тоже нельзя!) надо знать, какую кодировку использует получатель. Пользователи Windows желают получать письма в 1251, DOS - в Альтернативной, а на UNIX вообще могут существовать все кодировки одновременно.

Это была постановка проблемы, далее идет решение. Решение называется Cyrillic Support Manager или сокращенно CSM. CSM - это комплексный кириллизатор UNIX, он имеется для всех коммерческих реализаций этой операционной системы а так же для Linux, правда в неполном объеме. Система перекодировки почты является составной частью CSM. Давайте посмотрим, как она решает поставленную нами задачу (откуда и во что перекодировать письма).

Откуда

Как всегда, есть несколько подходов к проблеме. Вот вам несколько:

- Брать информацию о кодировке из служебных полей заголовка письма; - Брать информацию из конфигурационных файлов; - Иметь выделенный виртуальный сервер для работы с каждой из кодировок. - Определять кодировку по содержимому письма;

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

Второй подход гораздо мощнее. Администратор почтовой машины один раз определяет, что клиентная машина с таким-то сетевым именем или адресом работает в кодировке, скажем, Windows 1251. И теперь вся корреспонденция, отправляемая с данной машины, считается представленной только в этой кодировке. А если у машины нет постоянного адреса? Она может перемещаться по странам и континентам, подключаясь к различным узлам Internet, но все равно обращаясь к своему почтовому серверу и почтовому ящику. Даже если пользователь соединяется с одним и тем же провайдером, он может получать на время каждой сессии другой IP-адрес. Да и в локальных сетях динамическое распределение адресов случается.

Выделенный виртуальный сервер. Давайте запустим на одной почтовой машине четыре почтовых сервера одновременно, по одному на каждую кодировку. Каждому серверу присвоим отдельное сетевое имя и отдельный IP-адрес, например win.mail.access.ru, alt.mail.access.ru, koi.mail.access.ru, iso.mail.access.ru. Предложим пользователям Windows обращаться со своей почтой на сервер win.mail.access.ru, DOS - alt.mail.access.ru и т.д. Этот вариант не требует фиксировать IP-адрес клиента, не заставляет пользователя в каждое письмо вводить информацию о его кодировке. Пользователю достаточно при конфигурации своей почтовой программы правильно указать адрес почтовой машины. Если он с этим справится, то все ОК. А если не справится? Они такие, пользователи. Или включит в письмо, отправляемое из Windows, текст в Альтернативной кодировке? У него же на машине еще и DOS есть! Если бы у нас не было четвертого варианта, мы бы сказали, что это проблемы пользователя. Однако у нас четвертый подход есть.

Идея автоматического определения кодировки существенно лучше смотрится, и это решение гораздо ближе к идеальному. Однако необходим хороший алгоритм распознавания, которому мы могли бы доверить свою информацию. Ведь ошибочная перекодировка приводит, как мы уже упоминали выше, к ее потере. Простая проверка байтов на потенциальную пренадлежность к той или иной таблице символов не годится. Дело в том, что все четыре кодировки сильно пересекаются между собой, и нужен очень большой текст, чтобы собрать достаточно статистики. Поэтому, если мы хотим надежно определить, в какой кодировке представлен текст, мы должны попробовать его ПРОЧИТАТЬ, перебирая все варианты. Именно так бы поступил человек. Но как научить читать компьютер? К счастью, компьютеру в данном случае не надо уметь полноценно читать, достаточно научиться отличать русский язык от абракадабры. Можно было бы попытаться применить одну из программ коррекции правописания, например. Однако что делать с грамматическими ошибками? Есть такие "писатели", что способны свести подобные программы с ума...

В общем, пришлось разработать свой алгоритм анализа текста, простой, неизбыточный (то есть не проверяющий правописания там, где это не требуется) и надежный. Теперь можно ответственно заявить, что автоматическое определение кодировки существует и работает достаточно хорошо (достаточно - это значит, что со сбоями мы не сталкиваемся уже пару лет). Однако, случайно, у кого-нибудь может возникнуть нужда передать по почте ту самую абракадабру. Система распознавания выдаст сообщение о том, что кодировка не определена, и письмо уйдет без перекодировки (или не уйдет вообще, если так установлено администратором). Тем не менее, отправлять по почте абракадабру - конституционное право пользователей электронной почты. И поэтому в CSM реализованы ВСЕ ЧЕТЫРЕ подхода к определению кодировки письма. Основной метод - автоматическое определение. Однако всегда есть возможность явно задать кодировку одним из способов.

Куда

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

- Брать информацию о кодировке из служебных полей заголовка письма; - Брать информацию из конфигурационных файлов; - Иметь выделенный виртуальный сервер для работы с каждой из кодировок.

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

Конфигурационные файлы- вещь хорошая, но не годятся в случае с непостоянными IP-адресами (см. выше). Когда же речь идет о локальных пользователях UNIX, это наилудший выход. Рабочая кодировка пользователя или предпочитаемая им кодировка почтового ящика всегда известна из системных или персональных конфигурационных файлов CSM.

Виртуальный POP-сервер (именно по POP- протоколу получают свою корреспонденцию пользователи персоналок) не только дает нам возможность менять IP-адрес клиентной машины по своему усмотрению, но и облегчает администрирование локальной сети. Не надо описывать каждую новую машину в конфигурационном файле. А вводить имя почтовой машины в почтовую программу надо и так и так.

Заключение

Надеюсь, что этой статьей автор внес некоторую ясность в вопрос о том, как должна передаваться русскоязычная почта. Да, в настоящее время для организации нормальной работы почты требуются дополнительные усилия. Хорошо, если эта работа возлагается на плечи профессиональных (то есть получающих зарплату) администраторов почтовых машин. Это их работа, но мы рады, если смогли нашим программным продуктом им помочь. Хуже, если проблемой перекодировки приходится заниматься конечному пользователю. Это случается редко, в основном за границей, но тем сложнее человеку - не с кем посоветоваться, в конце концов. Может быть, ситуация скоро изменится. Но пока это не произошло - обращайтесь, постараемся помочь. Нам очень хочется переписываться с вами по-русски, а не "po-russki".