SquirrelMail

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

Установка SquirrelMail

Поскольку белка написана на PHP, она требует для работы веб-сервер с PHP4. Рекомендуется, чтобы в PHP была включена поддержка gettext или в виде встроенного расширения (параметр при сборке PHP –with-gettext) или в виде динамически подгружаемой (shared) библиотеки (gettext.so). Никаких других особенностей при сборке PHP нет, но если вам приходит очень много почты и вы всю её храните на сервере, то лучше увеличить размер памяти, разрешённый для скрипта в php.ini - с 8 MB по умолчанию до 16 MB. Это помогает, если в ящике больше пары тысяч писем, и белке не хватает памяти. Дистрибутив SquirrelMail можно скачать по ссылке с сайта проекта. Можно взять последнюю стабильную версию или снапшот cvs-версии стабильной ветки (1.4.3cvs, рекомендуется) в виде архива или непосредственно из cvs. Анонимный cvs проекта живёт на sourceforge, и сервер нередко бывает недоступен, поэтому проще скачать сам архив. Процедура установки из архива и из cvs-образа ничем не отличается. Допустим, что мы распаковали архив или скопировали cvs-образ в каталог sm-1.4.3ru. Заходим в него и начинаем работать. Наша задача - установить белку и настроить русскоязычный интерфейс.Для этого запускаем в этом каталоге.

$ ./configure

Запускается перловый скрипт настройки, в котором нам нужно пройтись по пунктам и изменить в минимальном варианте язык по умолчанию (пункт 1-6 - задать ru_RU), свой домен по умолчанию (пункт 2-1, например, belkamail.ru - вроде, домен пока свободен , кодировку по умолчанию (какую именно - смотрим ниже. Для начала поставим UTF-8). Нужно также задать серверы IMAP и SMTP, если они живут не на той же машине. При настройке сервера IMAP можно указать его тип, если он известен. Остальное можно не трогать, но неплохо будет также поставить дополнительные модули (пункт 8). По умолчанию настройки пользователей и их адресные книги будут храниться в отдельном каталоге, это подкаталог data в корне. Нужно сделать этот каталог доступным для записи с правами веб-сервера, то есть чаще всего:

$ chown nobody.nobody data
$ chmod 700 data

При желании можно связать SquirrelMail с сервером базы данных, при этом настройки пользователей и их адресные книги будут храниться в базе. Например, для 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 также на любом языке. К сожалению, не все почтовые клиенты понимают юникод, поэтому некоторые из ваших адресатов со старыми почтовыми программами будут удивлены приходом письма на незнакомом языке. К тому же перекодировка писем в UTF-8 пока что не полностью реализована в белке. и это очень быстро проявится с письмами, приходящими в восьмибитных кодировках - их можно будет прочитать, но при ответе или пересылке цитируемые письма превращаются в нечитаемый набор иероглифов. Это исправлено в ветке HEAD - 1.5.0cvs, но на момент написания ветка ещё не созрела для стабильной работы на production-сервере.

Вопрос третий - хочу белку по-русски в KOI8-R или cp1251.

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

Для этого нужно:

или самому перекодировать русский файл перевода, который лежит в locale/ru_RU/LC_MESSAGES:
$ msgconv -t koi8-r squirrelmail.po или $ msgconv -t cp-1251 squirrelmail.po,
или скачать уже готовые файлы отсюда: в KOI8-R или в 1251. При использовании gettext po-файл нужно скомпилировать:
$ msgfmt squirrelmail.po -o squirrelmail.mo
В архиве по ссылке выше есть готовые собранные mo-файлы. Возможно, надо будет перезапустить веб-сервер.
Для полноты настройки русские файлы справки help/ru_RU также надо перекодировать в соответствующую кодировку.
найти в файле 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.

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

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

Дистрибутив модуля можно скачать по ссылке с сайта автора модуля. Можно взять версию из каталога dailybuild, например ту, на которой работаю я сам от 30 января. Есть также анонимный cvs. Архив модуля нужно распаковать в каталог plugins, где находятся все остальные модули. После этого в каталоге plugins появится подкаталог gpg. Модуль нужно подключить в конфигурационном файле через скрипт configure или поправив файл вручную. После этого в главном окне белки появится ссылка "Ключи шифрования.".

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

Модуль шифрования также переведён на русский, и при использовании восьмибитных кодировок файл перевода (plugins/gpg/locale/ru_RU/gpg.po) тоже нужно будет сконвертировать в эту кодировку или взять отсюда: в KOI8-R или в 1251.