Постановка задачи

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

Для хранения общих контактов выбран «родной» формат адресных книг — MAB. Другие способы создания общих адресных книг, в том числе через службу каталогов — по результатам испытаний признаны неудобными.

Mozilla Thunderbird не может использовать адресные книги формата MAB напрямую с сервера, поэтому они копируются каждому пользователю. После обновления контактов на сервере все скопированные файлы также необходимо обновлять, т.е. синхронизировать.

Недостатки существующих решений

Для синхронизации адресных книг известны два расширения для Thunderbird.

Расширение "SyncMab" не работает в Thunderbird 3. Ранее в Thunderbird 2 хорошо работала версия 2.0, но не последняя, 3.1. Расширение давно не обновляется, так что ждать исправленной версии не приходится.

Расширение "Addressbooks Synchronizer" работает неустойчиво, при неправильной настройке Thunderbird «зависает», а иногда может совсем «вылететь». Обновление из общей сетевой папки работает только если у пользователя есть разрешение на запись. Но если всем пользователям дать такие права, гарантировать сохранность контактов будет невозможно. С доступом только для чтения синхронизация не работает. Вроде бы можно это обойти — групповой политикой копировать файлы адресных книг на компьютер пользователя в каталог %TEMP%, куда доступ на запись у пользователя есть. Но тогда пользователю придется самостоятельно искать этот каталог, т.к. расширение «не понимает» переменных окружения. Другие поддерживаемые протоколы — FTP, WebDAV или IMAP есть не на каждом сервере в сети Windows и также требуют дополнительной настройки у пользователя.

Описание предлагаемого скрипта

Для обновления общих адресных книг на компьютерах Windows XP/Vista/7 разработан скрипт mab_sync.vbs:

Скрипт для синхронизации общих адресных книг Mozilla Thunderbird в локальной сети, формат VBS, упакован ZIP: mab_sync.zip

В первую очередь скрипт находит путь к профилю Thunderbird. Информация берется из файла настройки профилей profiles.ini. Если имеется несколько профилей, выбирается только один из них — «по умолчанию». Если профиль не найден, выводится предупреждение.

Далее, в найденном каталоге скрипт читает файл пользовательских настроек Thunderbird — prefs.js. Если файл не найден, выводится предупреждение. Из файла отбираются строки с параметрами такого вида:

user_pref("ldap_2.servers.TEST.description", "TEST");
user_pref("ldap_2.servers.TEST.filename", "abook-1.mab");

Из этих строк выясняется соответствие имен адресных книг и MAB-файлов. Учитываются только адресные книги, перечисленные в настройках скрипта. Когда становится известен файл, он копируется с сервера, из указанного в настройках сетевого ресурса.

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

Первоначальная настройка

  1. Определиться с количеством и именами общих адресных книг. Имена должны быть понятными, желательно не слишком длинными, лучше — латиницей.
  2. Создать на сервере общий сетевой ресурс для хранения общих адресных книг. Например, \\SRV\Mab. Доступ на запись дать только тем, кто действительно должен обновлять адресные книги. Остальным — разрешить только чтение.
  3. В скрипте прописать имена адресных книг и сетевой ресурс для их хранения, подробности см. ниже. Настроенный скрипт можно разместить на сервере, рядом с самими адресными книгами. Ярлык поместить в «Автозагрузку» на машине пользователя. Или после тестирования добавить в групповую политику.
  4. Если уже есть MAB-файлы с нужными адресными книгами, разместить их на сервере. Имена файлов должны соответствовать именам адресных книг.
  5. Если MAB-файлов с нужными адресными книгами нет, выгрузить их из Thunderbird, см. ниже п. «Обновление адресных книг на сервере».

Имена адресных книг и сетевой ресурс для их хранения

Настройки хранятся в тексте скрипта, в его начале, в виде значений констант. Рядом есть комментарии:

'Сетевой ресурс, где лежат адресные книги
Const SRC = "\\SRV\Mab"
'Имена общих адресных книг (без расширения ".mab"), через запятую
'Такие же имена ДОЛЖНЫ быть у соответствующих адресных книг!
Const MAB = "Office,Partners,Phones"

Загрузка с сервера

Направление синхронизации задается параметром UPLOAD. По умолчанию уже настроено для загрузки с сервера:

'Направление синхронизации
Const UPLOAD = False 'загрузить С сервера
'Const UPLOAD = True 'выгрузить НА сервер

Сообщение о результатах работы

По умолчанию сообщение выдается. Чтобы его отключить, надо «переставить» символ комментария (одиночную кавычку) с одной строки на другую:

'Выводить сообщения?
'Const NOTIFY = True
Const NOTIFY = False

На компьютере пользователя

В Thunderbird открыть окно «Адресные книги» и создать нужные, см. меню «Файл» — «Создать» — «Адресную книгу...». Очень важно задать правильные имена, т.к. именно по ним скрипт «находит» адресные книги, которые нужно обновлять.

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

Проверка работоспособности

  1. В Thunderbird открыть окно «Адресные книги», выбрать любую общую адресную книгу из списка и удалить несколько контактов из нее. Если адресные книги созданы только что, то они и так будут пустые.
  2. Закрыть Thunderbird и запустить скрипт.
  3. Запустить Thunderbird и проверить адресную книгу — удаленные контакты должны появиться на своих местах.

Обновление адресных книг на сервере (для администраторов)

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

Для выгрузки на сервер используется копия скрипта (ее можно назвать mab_sync_upload.vbs и поместить на своем компьютере), с отличием только в одном параметре:

'Направление синхронизации
'Const UPLOAD = False 'загрузить С сервера
Const UPLOAD = True 'выгрузить НА сервер

Порядок действий:

  1. Загрузить адресные книги с сервера в Thunderbird, как это делают пользователи. Это нужно для учета всех возможных изменений, сделанных ранее другими администраторами.
  2. Внести изменения в контакты через интерфейс Thunderbird.
  3. Запустить скрипт выгрузки — обновленные файлы будут скопированы на сервер.