Thunderbird и его конфиги

Настройки Thunderbird с помощью конфигов

Идеальный корпоративный почтовый клиент

В дебрях конфигов

Основной конфигурационный файл Thunderbird хранится в профиле пользователя и называется prefs.js. На всякий случай: профиль Thunderbird находится либо в домашней папке (для Linux), либо в AppData (для Windows), либо в папке программы (для Thunderbird Portable).

Формат указанного файла весьма простой, он весь состоит из строчек вида

Я думаю понятно, что подобные строчки задают некоторое значение указанным в качестве первого аргумента параметрам.

Однако редактировать prefs.js вручную нельзя, поскольку он должен исправляться только самим Thunderbird. При этом непосредственно в программе есть встроенный редактор конфигурации, который позволяет получить доступ ко всем опциям из prefs.js. Попасть в него можно зайдя в меню Инструменты->Настройки..., в открывшемся окне перейдя в раздел Дополнительные, затем выбрав вкладку Основные и нажав на ней кнопку Редактор настроек...

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

Mozilla AutoConfig (aka Mission Control)

Вот мы и подошли к самому интересному. Как я уже сказал, напрямую редактировать prefs.js нельзя, но это и не проблема, поскольку в Thunderbird есть ещё один уровень настроек, с помощью которого можно как угодно управлять пользовательскими параметрами из prefs.js.

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

Для включения дополнительного механизма настройки надо немного поменять файлы в установочной директории Thunderbird. Для начала необходимо добавить две строчки в конец файла greprefs/all.js, найти который можно в /usr/lib/thunderbird-xxx/ в Ubuntu Linux или рядом с Thunderbird.exe в Windows. Вот эти строчки:

Вторая содержит собственно имя конфигурационного файла, который должен использовать Thunderbird, а первая отвечает за его шифрование. Обычно шифровать ничего не нужно, поэтому значение первого параметра лучше выставлять равным 0.

Теперь необходимо создать указанный файл thunderbird.cfg. Располагаться он должен в той же папке, что и основной исполняемый файл Thunderbird. Узнать, где находится Thunderbird в Linux можно  командой

Ну а в Windows вы можете заглянуть, например, в свойства ярлыка.

Что может располагаться в thunderbird.cfg? Любой JavaScript код, который сможет выполнить Thunderbird. Однако нам-то надо работать с опциями настройки, для этого можно использовать следующие функции:

Есть ещё парочка доступных функций, но они вам вряд ли понадобятся. Самая полная статья, которую я нашёл на эту тему, находится здесь.

Хорошо, что же делают все эти функции?

  1. pref — устанавливает значение для указанного параметра. При этом пользователь сможет поменять это значение после запуска Thunderbird, однако если вы не измените thunderbird.cfg, то при следующем перезапуске эта функция выполниться снова и снова изменит значение параметра.
  2. defaultPref — устанавливает для указанного параметра значение по умолчанию. Может оказаться полезной при создании нового профиля.
  3. lockPref — самая полезная, пожалуй, функция. Устанавливает значение для некоторого параметра и блокирует его, таким образом запрещая пользователю этот параметр изменять.
  4. unlockPref — как не трудно догадаться, разблокирует ранее заблокированный параметр.
  5. getPref — возвращает текущее значение указанного параметра.
  6. clearPref — сбрасывает значение указанного параметра.
  7. getenv — возвращает текущее значение указанной системной переменной.

Можно ещё получать данные из LDAP, но при этом не поддерживается авторизация, что сводит на нет полезность этого механизма. Да и он не нужен, как вы вскоре убедитесь.

Вот простейший пример файла thunderbird.cfg, который немного «тюнит» Thunderbird:

Файл подробно комментирован, так что надеюсь вы разберётесь, что к чему. Блок try нужен для перехвата ошибок, лучше его не убирайте (иначе в случае чего Thunderbird просто не запустится). Кроме того, все параметры и нужные значения для них для своей конкретной инфраструктуры я скопировал из упоминавшегося редактора конфигурации, настроив предварительно всё вручную обычным способом. Рекомендую всегда именно так и делать, иначе вы будете долго гадать какое значение нужно указать, например, для параметра mail.server.server.socketType в вашем случае.

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

Теперь достаточно при установке Thunderbird положить этот скрипт в папочку с исполняемым файлом (и не забыть добавить две строчки в all.js!), и все ваши пользователи, которые будут открывать Thunderbird на этом компьютере, получат автоматически настроенные параметры своих аккаунтов, а так же подключённую адресную LDAP книгу с сотрудниками организации.

Для проверки работоспособности скрипта можно заглянуть всё в тот же редактор настроек Thunderbird. В нём статус параметров, для которых была выполнена функция lockPref(), должен быть «заблокировано». Если это не так — значит вы где-то ошиблись и ваш скрипт не работает.

Кстати, обратите внимание, хитрый трюк с указанием в качестве localfoldersserver сервера IMAP позволяет отключить локальные папки в клиенте. Это бывает немаловажно в организации с внутренним IMAP сервером и блондинками, которые не понимают, что локальные папки на то и локальные, что хранятся в профиле пользователя на конкретном компьютере, а не на сервере.

Как я уже сказал, вы можете использовать практически все возможности стандартного JavaScript в скрипте автоконфигурации, плюс можете получать значение системных переменных. Это уже очень неплохо, и пытливые администраторы уже наверно стали прикидывать варианты автоматического обновления скриптов thunderbird.cfg на локальных компьютерах. К счастью, изобретать велосипед вовсе не обязательно.

Настройка через сервер

В механизм автонастройки Thunderbird встроена возможность загрузки конфигурационного файла с сервера по указанному URL. Воспользоваться ей очень просто — необходимо в файле, на который ссылается опция general.config.filename из all.js (то есть в нашем случае thunderbird.cfg) указать всего две строчки:

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

Итого: мы получили достаточно эффективный механизм централизованной настройки Thunderbird. Однако ему явно не хватает гибкости, поскольку JavaScript, увы, многого не умеет. Например — обращаться к внешним источникам данных, как то SQL базы или LDAP каталоги. Соответственно провести тонкую настройку клиента под конкретного пользователя у вас вряд ли получится.

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

Осталось дело за малым — для тонкой настройки под конкретного пользователя конфигурационного скрипта, а следовательно и Thunderbird, необходимо, чтобы клиент каким-то образом сообщал серверу хотя бы имя пользователя. Thunderbird его может легко вычислить с помощью уже описанной функции getent, ну а передать его можно прямо в URL в виде GET-переменной. Но тут возникает одна проблема: Thunderbird почему-то упорно игнорирует URL с GET-переменными в параметре autoadmin.global_config_url. Хотя это конечно тоже не проблема, ведь с помощью mod_rewrite мы можем на стороне сервера преобразовать обычный URL некоторого вида в URL c GET-переменными и передать уже этот URL скрипту.

Чтобы долго не объяснять, перейдём к практике. Конечный содержимое моего файла thunderbird.cfg, лежащего рядом с бинарником самого Thunderbird, имеет такой вот вид:

Таким образом запущенный из под учётной записи пользователя malamut Thunderbird за настройками полезет по адресу

 

 
На сервере mail.domain.com у меня стоит Apache с mod_rewrite и mod_perl, как это дело настраивать вместе пожалуй объяснять не буду. В папочке tb/ в каталоге сайта mail.domain.com лежит Perl-скрипт conf.pl, который собственно генерирует конфигурационные файлы для Thunderbird, и файл .htaccess такого вот содержания:

Таким образом запросы по URL вида

 

 
преобразуются в запросы по URL вида

 

 
Осталось только написать Perl скрипт, который будет брать из GET-переменных имя пользователя и выдавать соответствующий конфигурационный файл для Thunderbird.

Вот пример такого скрипта:

Некоторые комментарии чуть ниже. А пока при обращении по адресу

 

 
получим примерно следующий вывод, сгенерированный приведённым скриптом:

Вот и всё, мы получили файл конфигурации для Thunderbird, сгенерированный Perl скриптом на сервере.

Самое великолепное в этом то, что с помощью описанного механизма можно неограниченно гибко управлять любыми настройками Thunderbird, включая настройки плагинов, которые также подчиняются менеджеру конфигурации. Единственное, что не подвластно такому централизованному конфигурированию — это пользовательский интерфейс, то есть расположение панелек и их размер.

Настройка аккаунтов через конфигурационный файл

Сначала, на всякий случай, рассмотрим основной принцип настроек аккаунтов в Thunderbird, поскольку он не совсем очевиден.

Все множественные данные одного типа Thunderbird нумерует и различает по номерам. Если нужно добавить новый аккаунт, почтовый адрес, SMTP сервер или ещё что, то Thunderbird во внутренних настройках присвоит новому объекту первый доступный номер. Поэтому когда вы добавляете какие-то объекты через скрипт автоконфигурации, то присваивайте номера, заведомо бОльшие, чем уже могут быть в клиенте. Иначе вы можете переписать случайно настройки какого-то пользовательского почтового ящика, что вряд ли понравится пользователю. Исключение — основной корпоративный аккаунт, который имеет номер 1.

Для того, чтобы привязать множественные записи к какому-то объекту, например, несколько почтовых адресов отправки к аккаунту, Thunderbird использует простые списки, разделённые запятой. Например:

Thunderbird поддерживает множественные аккаунты (account), кроме того, у каждого аккаунта может быть несколько почтовых идентификаторов (identity). Названия всех опций, относящихся непосредственно к аккаунту, начинаются с mail.account.accountN, где N — внутренний номер аккаунта. Названия всех опций, относящихся к почтовым идентификаторам, начинаются соответственно с mail.identity.idN, где N — внутренний номер идентификатора.

Список всех аккаунтов Thunderbird хранится в переменной mail.accountmanager.accounts. Кстати, порядок перечисления аккаунтов в этой переменной определяет порядок их следования в левой панели навигации пользовательского интерфейса Thunderbird. Если удалить аккаунт из этого списка, то он пропадёт из Thunderbird, даже не смотря на то, что все его настройки могут остаться на месте.

Список почтовых идентификаторов для аккаунта N указывается в переменной mail.account.accountN.identities. IMAP сервер привязывается к аккаунту с помощью переменной mail.account.accountN.server, SMTP же сервер привязывается к почтовому идентификатору с помощью переменной mail.identity.idN.smtpServer.

В общем, перед тем, как что-то настраивать, крайне рекомендуется разобраться в том, что от чего зависит и что с чем связано.

Полезные трюки для скрипта автоконфигурации

Во-первых, обратите внимание на JavaScript код, который добавляет переменные в список себе подобных. Например, вот так можно добавить аккаунт к уже существующим:

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

Кроме того, на уровне Perl скрипта можно организовать какую угодно обработку в зависимости от переданного имени пользователя. Я добавил для примера функцию, которая подключает аккаунт с Yandex по его имени, и добавил вызов этой функции для себя. Теперь мне потребуется всего лишь закрыть Thunderbird и открыть его заново, затем ввести свой пароль и всё, мой Yandex аккаунт будет подключён! Такую технику очень удобно использовать для удалённого управления почтовыми клиентами отдельных  пользователей.

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

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

Не моё, но может понадобится.

Оригинал, естесственно, на Хабре: http://habrahabr.ru/blogs/sysadm/101905/