Белка по-русски

Руководство по настройке пакета веб-почты SquirrelMail версии 1.4.4+

[Григорий Мохин, (mok@kde.ru)]

Что такое SquirrelMail?

SquirrelMail или Белка – это один из самых удобных и мощных Open Source пакетов веб-почты, написанных на PHP. В нём реализована поддержка протоколов IMAP и SMTP и доступны многие модули, расширяющие его функциональность, например, ведение логов, фильтрация почты на сервере, фильтрация спама, календарь, шифрование почты с помощью GPG и прочее. SquirrelMail полностью русифицирован. В данной статье приводятся краткие рекомендации по настройке SquirrelMail для русскоязычных пользователей, особенно полезные тем, кто хочет обновить свою установку с версии 1.2.х или 1.4.1 и ниже до более свежей версии (1.4.4 на момент написания статьи). Начиная с версии 1.4.2 SquirrelMail поддерживает UTF-8 как кодировку для русского языка по умолчанию, а поскольку большинство русскоязычных пользователей пока ещё применяют восьмибитные кодировки KOI8-R или cp-1251, я расскажу, как это обновление сделать быстро и без потерь.

Установка SquirrelMail

Поскольку SquirrelMail – это почтовый клиент, для его работы требуются настроенные серверы IMAP и SMTP. Для работы с многоязычными файлами, а также для оптимизации сортировки и поиска сервер IMAP должен поддерживать Юникод (например, для Courier IMAP – это опция $ configure --enable-unicode ). Естественно, нужен также веб-сервер с PHP4 (на момент написания статьи с PHP5 версии ниже 5.0.3 могут возникать проблемы из-за изменений в работе с классами и объектами, а работа с 5.0.3 ещё недостаточно протестирована). Рекомендуется, чтобы в PHP были включены следующие опции (в виде встроенных расширений или динамически подгружаемых (=shared) библиотек):
$ ./configure --(ваши опции) \
       --with-gettext --enable-mbstring=all --with-iconv --with-recode
а если собирать PHP в совсем минималистическом варианте, то так:
$ ./configure --disable-all \
       --enable-session --with-pcre-regex --with-gettext 
Тем самым будут включены поддержка сеансов и регулярных выражений. Поддержка gettext обеспечивает использование функций расширения gettext для русскоязычного интерфейса и ускоряет работу в разы. Функции mbstring нужны для работы с русскоязычными именами папок IMAP на сервере (которые согласно RFC-3501 должны быть закодированы в UTF-7, с небольшими отклонениями от собственно UTF-7). Функции iconv или recode используются для перекодировки текста в разрабатываемых cvs-версиях Белки, и их можно включить с прицелом на будущее. Никаких других особенностей при сборке PHP нет.
Может потребоваться внести изменения в параметры php.ini – если вам приходит очень много почты и вся она хранится на сервере, или если нужно работать с большими (>2 МБ) письмами и вложениями, то необходимо увеличить размер памяти, разрешённый для скрипта в php.ini (memory_limit) – с 8 МБ по умолчанию до 16 МБ или более. Для отправки писем с большими вложениями следует также увеличить максимально разрешённый размер файла, загружаемого на сервер (upload_max_filesize).
Дистрибутив SquirrelMail можно скачать по ссылке с сайта проекта. Можно взять последнюю стабильную версию (1.4.4, рекомендуется) в виде архива или более свежую версию стабильной ветки с сайта или непосредственно из хранилища cvs. Процедура установки из архива и из образа cvs ничем не отличается.

Локали для SquirrelMail 1.4.4

Начиная с версии 1.4.4 пакет локалей для SquirrelMail поставляется отдельно. Здесь подготовлены пакеты, включающие перевод интерфейса программы и нескольких её модулей, а также файлов справки в трёх кодировках: По сравнению с официальным пакетом на сайте SquirrelMail в пакете для utf-8 исправлена ошибка в заголовке файла abook_group.po (см. README.UTF8).
Внимание! Если вы меняете кодировку Белки в уже существующей установке (например, с koi8-r на utf-8), не забудьте сконвертировать также адресные книги и параметры пользователей, если они туда что-то заносили по-русски. Проверьте файлы *.pref и *.abook в каталоге data или соответствующие таблицы базы данных.

Первичная настройка SquirrelMail

Допустим, что мы распаковали архивы или скопировали cvs-образ и локали в каталог sm-1.4.4ru. Заходим в него и начинаем работать. Наша задача – установить Белку и настроить русскоязычный интерфейс. Для этого запускаем в этом каталоге.
$ ./configure
Запускается сценарий настройки на Perl, в котором нужно пройтись по пунктам и изменить в минимальном варианте язык по умолчанию (пункт 10-1 – задать ru_RU), кодировку по умолчанию (п. 10-2, какую именно – смотрим ниже, для начала поставим UTF-8), свой домен по умолчанию (п. 2-1, например, belkamail.ru – вроде бы домен пока свободен. Нужно также задать серверы IMAP и SMTP, если они живут не на той же машине. При настройке сервера IMAP (п. 2-A) рекомендуется указать его тип, если он известен, и обязательно включить сортировку писем сервером IMAP (п. 4-10 и 11). Если этого не сделать, сортировать письма придётся самой Белке, а это сильно тормозит работу при большом количестве писем. В качестве метода отправки (п. 2-3) задайте Sendmail вместо SMTP при работе на localhost. Работа по SMTP может быть на удивление медленной, но Белка тут не виновата, а виноваты вы сами, особенно если криво настроить сервер SMTP, чтобы он при подключении по TCP с локального хоста выполнял кучу проверок на вирусы, спам, чёрные списки и пр. Остальное можно не трогать. Расширенную функциональность можно получить, поставив дополнительные модули.
По умолчанию параметры пользователей и их адресные книги будут храниться в отдельном каталоге, это подкаталог data в корне (п. 4-1). Рекомендуется также создать отдельный каталог для вложений (п. 4-2) – например, attach – со временем в нём будет накапливаться мусор в виде забытых вложений, и его можно будет очищать скриптом из crontab. Нужно сделать эти каталоги доступными для записи с правами веб-сервера, то есть чаще всего:
# chown nobody.nobody data
# chmod 700 data
# mkdir attach
# chown nobody.nobody attach
# chmod 700 attach
При желании можно связать SquirrelMail с сервером базы данных (пункт 9), при этом параметры пользователей и их адресные книги будут храниться в базе. Например, для MySQL нужно прописать:
1. DSN for Address Book   : mysql://squirreluser:pass@localhost/sqmail
2. Table for Address Book : address

3. DSN for Preferences    : mysql://squirreluser:pass@localhost/sqmail
4. Table for Preferences  : userprefs
5. Field for username     : user
6. Field for prefs key    : prefkey
7. Field for prefs value  : prefval
Структура этих двух таблиц – address и userprefs – и команды для сервера базы данных, которые нужно выполнить, чтобы их создать, описаны в файле doc/db-backend.txt.
Далее сохраняем конфигурационный файл – он хранится в config/config.php. В принципе, его можно править руками, но осторожно, чтобы не добавить лишних пробелов после последней закрывающей скобки. Всё – система готова к работе. Запускаем браузер по http или https и смотрим, работает ли почта.

Доводка SquirrelMail и настройка русского языка

  • Вопрос 1 – Белка не отвечает.
    Ответ: что-то не так настроили. Проверьте, правильно ли вы настроили веб-сервер и поддержку php.


  • Вопрос 2 – Белка отвечает не по-русски, а по-английски.
    Ответ: не так настроили язык.
    Пояснение. Проверьте, правильно ли настроена локаль. У Белки может быть два режима работы с интерфейсом, отличающимся от английского: с использованием функций gettext и с использованием их программных заменителей, если PHP собран без поддержки gettext. Во втором режиме всё работает без дополнительного шаманства, но медленнее. Первый режим несравненно шустрее, но ему требуется, чтобы система поддерживала локаль, используемую для перевода. Не все дистрибутивы поддерживают русскую локаль UTF-8, поэтому это надо проверить:
    $ locale -a | grep ru
    
    и в случае отсутствия в списке ru_RU.UTF-8 собрать её самому:
    # localedef ru_RU.UTF-8 -i ru_RU -fUTF-8
    
    После этого может потребоваться перезапустить веб-сервер, чтобы новая локаль стала доступна PHP. Использование локали UTF-8 позволит читать и писать письма на любом языке и создавать папки на сервере IMAP также на любом языке. К сожалению, не все почтовые клиенты понимают юникод, поэтому некоторые из ваших адресатов со старыми почтовыми программами будут удивлены приходом письма на незнакомом языке.


  • Вопрос 3 – хочу Белку по-русски в KOI8-R или cp-1251.
    Ответ: пожалуйста. Особенно это необходимо тем, у кого уже работает Белка более старых версий, и параметры пользователей сохранены в восьмибитной кодировке. Поскольку КОИ является преобладающей кодировкой в российской почтовой переписке, её пока что можно использовать с наименьшими проблемами для себя и пользователей.
    Для этого нужно:
    • или самому перекодировать русский файл перевода, который лежит в locale/ru_RU/LC_MESSAGES:
      $ msgconv -t koi8-r squirrelmail.po или $ msgconv -t cp-1251 squirrelmail.po, 
      
      или скачать уже готовые файлы по ссылкам, приведённым выше. При использовании gettext po-файл нужно скомпилировать:
      $ msgfmt squirrelmail.po -o squirrelmail.mo
      
      В архиве есть готовые собранные mo-файлы для Белки и некоторых модулей. Возможно, надо будет перезапустить веб-сервер.

    • найти в файле functions/i18n.php строки:
      $languages['ru_RU']['NAME']    = 'Russian';
      $languages['ru_RU']['CHARSET'] = 'utf-8';
      $languages['ru_RU']['LOCALE'] = 'ru_RU.UTF-8';
      $languages['ru']['ALIAS'] = 'ru_RU';
      
      и заменить их на ту локаль, в которой вы хотите работать, например:
      $languages['ru_RU']['NAME']    = 'Russian';
      $languages['ru_RU']['CHARSET'] = 'koi8-r';
      $languages['ru_RU']['LOCALE'] = 'ru_RU.KOI8-R';
      $languages['ru']['ALIAS'] = 'ru_RU';
      
    • изменить в файле конфигурации default charset на KOI8-R.

  • Вопрос 4 – Что такое lossy encoding?
    Ответ: это опция перекодировки писем (пункт 10-3), часть символов которых отсутствует в текущей (8-битной) кодировке. Проблема состоит в том, что при использовании восьмибитных кодировок могут приходить письма, символы для которых принципиально отсутствуют в KOI8-R, поскольку на их месте стоят русские буквы. Таковы, например, почти все западноевропейские "умляуты". Остаётся два варианта: принудительно считать их восьмибитными русскими символами, и тогда Sebastian превращается в СебастьЮна (SebastiЮn), или включить перекодировку с потерями, чтобы Sebastian отображался со знаком вопроса на месте чужих символов (Sebasti?n). Выбирайте сами, что вам ближе, или работайте в UTF-8 и забудьте об этой проблеме раз и навсегда. Кстати говоря, для перекодировки русских писем эта проблема не возникает, потому что все буквы cp-1251 взаимно однозначно отображаются в буквы KOI8-R. Белка это знает и перекодирует русские письма правильно при любой системной кодировке.


  • Вопрос 5 – Как сделать, чтобы имена папок отображались по-русски?
    Отвечает Tomas Kuliavas <tokul на users.sourceforge.net>: Для обычных папок (не служебных, то есть не INBOX, Sent, Trash и Drafts) достаточно собрать PHP с поддержкой mbstring, как описано выше. Имена служебных папок следует задать в файле конфигурации Белки в UTF-7. Найдите там следующие переменные:
    $trash_folder  = 'INBOX.Trash';
    $sent_folder   = 'INBOX.Sent';
    $draft_folder  = 'INBOX.Drafts';
    
    и замените их на:
    $trash_folder  = 'INBOX.&BBoEPgRABDcEOAQ9BDA-';
    $sent_folder   = 'INBOX.&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-';
    $draft_folder  = 'INBOX.&BCcENQRABD0EPgQyBDgEOgQ4-';
    
    то есть на русские названия Корзина, Отправленные и Черновики в UTF7-IMAP. Для желающих: "Входящие" в этой кодировке пишется как &BBIERQQ+BDQETwRJBDgENQ-.


  • Вопрос 6 – Можно ли использовать Russian Apache?
    Отвечает Tomas Kuliavas: можно, но не рекомендуется. Для того чтобы русский апач не портил кодировки Белки, необходимо отключить функции преобразования кодировок. Опция CharsetDefault портит кодировки, отправляемые Белкой, и перекодирует сам текст.

Настройка модуля шифрования GPG для SquirrelMail

Этот модуль позволяет работать с письмами, зашифрованными с помощью GPG, с использованием веб-интерфейса Белки. Модуль рекомендуется к использованию, поскольку написан он вполне грамотно, с заботой о неискушённом пользователе и позволяет осуществлять настройку шифрования через веб-интерфейс. Насколько я знаю, коммерческих провайдеров, предоставляющих такую возможность, не найти днём с огнём.
Дистрибутив модуля можно скачать по ссылке с сайта автора модуля. Есть также анонимный cvs.
Архив модуля нужно распаковать в каталог plugins, где находятся все остальные модули. После этого в каталоге plugins появится подкаталог gpg. Модуль нужно подключить в конфигурационном файле через скрипт configure или поправив файл вручную. После этого в главном окне Белки появится ссылка "Ключи шифрования.".
Для тонкой настройки модуля можно руками поправить файл plugins/gpg/gpg_local_prefs.txt, а именно: прописать путь к gpg, если он отличается от стандартного; заменить параметры false на true, если вы хотите разрешить пользователям хранить закрытые ключи на сервере (allowprivatekeys=true), генерировать ключи непосредственно на сервере (allowkeygeneration=true), кэшировать пароль на время сеанса работы (allowpassphrasecaching=true) и пр. Модуль хорошо документирован, и почти всё будет понятно непосредственно из веб-интерфейса, если вы хоть раз имели дело с GPG/PGP. Некоторые действия в модуле, затрагивающие вопросы безопасности (например, смена пароля) требуют для своего выполнения защищённого (https) соединения.
Модуль шифрования также переведён на русский, и файлы перевода модуля доступны в архиве.

Вопросы и пожелания можно направлять в рассылки SquirrelMail или автору данного документа. Автор же в свою очередь высказывает пожелание как минимум видеть ссылку на данный документ в случае его копирования на других сайтах.
Copyright © 2004-2005, Gregory MokhinLast modified: 17 Feb 2005
Оригинал статьи расположен по адресу: http://byak.sinp.msu.ru/squirrelmail/.

[ опубликовано 19/02/2004 ]

Григорий Мохин, (mok@kde.ru) - Белка по-русски   Версия для печати