НОВОСТИ [Из песочницы] Zimbra — Генерация HTML подписи на основе данных LDAP

Alvaros
Онлайн
Регистрация
14.05.16
Сообщения
21.452
Реакции
101
Репутация
204
Введение


В Веб-Админке Zimbra отсутствуют инструменты для генерации подписи к письмам. Перелопатив кучу мануалов — понял, что ни один из Них меня не устраивает.

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

С моей же стороны это вклад в сообщество, за ранее использованные наработки.

Системные требования


система: Linux Ubuntu 18.04
версия Zimbra: Zimbra 8.8.15

Скрипт генерации HTML подписи


Начнем сразу с самого скрипта… ниже дам пояснения и описание работы скрипта.


#!/bin/bash
# created by Parfentiev Aleksey, Shultz Denis

SRC_LOGO=" "
SRC_TXT="ЛОГО организации"
SIGN_NAME="Подпись_Организации"
DOMEN="domen.ru"

# Check for run as zimbra user
ID=`id -u -n`
if [ x$ID != "xzimbra" ]; then
echo "Please run as ZIMBRA user"
echo "Exiting..."
exit 1
fi

# Obtain all user accounts in $DOMEN (template: [email protected] or [email protected])
accounts=`zmaccts | grep 'active'| grep $DOMEN | grep -P "(\b[A-z]+)\.(\D{2,5}@).*" | awk '{print $1}'`

for ac in $accounts; do
echo -ne "Checking account: $ac \t"

# Try delete signature
/opt/zimbra/bin/zmprov dsig $ac $SIGN_NAME

echo -ne "Setting signature... "

# Obtain signature from LDAP user atributes

declare -A arr
mapfile -t ARRAY < opt/zimbra/bin/zmprov ga $ac | egrep "(^cn|^title|^mobile|^zimbraPrefFromAddress|^st|^l|^street|^telephoneNumber|^pager|^postalCode)" | sed 's/: /:/')
for sgn in "${ARRAY[@]}" ; do
KEY=${sgn%%:*}
VALUE=${sgn#*:}
arr[$KEY]=$VALUE
done

HTML='
'
HTML+='
'
HTML+='
'
HTML+='
[TR][TD]
'
HTML+='
'$SRC_LOGO'
[/TD]'
HTML+='[TD]
'
HTML+="${arr['cn']} - ${arr['title']}
тел: ${arr["telephoneNumber"]} доб.${arr["pager"]} моб: ${arr["mobile"]}"
HTML+="
e-mail: ${ac}
${arr['postalCode']} ${arr['st']} ${arr['l']} ${arr['street']}

[/TD][/TR]​
"
unset arr

# Set signature for account $ac and obtain signature id account
sign_id=$(/opt/zimbra/bin/zmprov csig $ac $SIGN_NAME zimbraPrefMailSignatureHTML "$HTML")
# Obtain delegates mailbox accounts
mapfile -t ARRAY < opt/zimbra/bin/zmprov gid $ac name | cut -d " " -f 3-7 | grep -P '[^.*]')
for gid in "${ARRAY[@]}" ; do
# Set defalt signature position (outlook (before) or internet (after attachments)) for each account
/opt/zimbra/bin/zmprov modifyIdentity $ac "$gid" zimbraPrefDefaultSignatureId $sign_id zimbraPrefForwardReplySignatureId $sign_id zimbraPrefMailSignatureStyle outlook
done
echo "done!"

передаем данный скрипт на хостовую машину, любым Вам известным способом.

Помещаем в папку /usr/local/bin… или создаем файл zm_sign_html.sh по этому пути и copy/paste…


sudo -i
# ввести пароль от sudo user
# создать файл /usr/local/bin/zm_sign_html.sh
touch /usr/local/bin/zm_sign_html.sh
# открыть любым редактором copy/paste
# сделать исполняемым
chmod 755 /usr/local/bin/zm_sign_html.sh


Описание работы скрипта


  1. проверяем запущен ли скрипт от пользователя zimbra ( команды CLI выполняются от пользователя zimbra).
    возможно сделать и по-другому… использовать команду runuser и запускать скрипт из-под root.
  2. получаем все активные пользовательские аккаунты в нужном домене.

    У нас в организации приняты следующие шаблоны именования пользователей:

    [email protected] или [email protected]

    где: family — фамилия Пользователя транслитерацией.
    in — инициалы Пользователя
    in_jr — инициалы Пользователя с дополнением (для Пользователей у которых совпали Фамилия.Инициалы).

    Отсылка к статье на Хабре:

    Соответственно, ящик [email protected] попадет в список для генерации подписи, а служебный ящик [email protected] будет проигнорирован.

    За это отвечает регулярка grep -P "(\b[A-z]+)\.(\D{2,5}@).*" в строке скрипта


    accounts=`zmaccts | grep 'active'| grep $DOMEN | grep -P "(\b[A-z]+)\.(\D{2,5}@).*" | awk '{print $1}'`


  3. удаляем подпись с Названием SIGN_NAME ( если такой подписи нет — будет ошибка в этой CLI команде, и скрипт пойдет далее )
  4. Перебираем Пользователей.

    Забираем нужные поля для текущего Пользователя с LDAP, собираем в массив, собираем HTML подпись (переменная HTML в скрипте).



    mapfile -t ARRAY < opt/zimbra/bin/zmprov ga $ac | egrep "(^cn|^title|^mobile|^zimbraPrefFromAddress|^st|^l|^street|^telephoneNumber|^pager|^postalCode)" | sed 's/: /:/')


    Здесь, как видно я собираю данные из полей: cn, title и т.д.

    Название полей можно посмотреть в Админке:

    nn5omyx3rvtqijf5a9263b9w_-a.jpeg


    • Получаем аккаунты делегированных ящиков (отправить от имени, отправить как) для текущего Пользователя.

      Чтобы было понятнее для чего это делается, покажу на Скриншоте (Настройки — Подписи).

      nkozucxqh0t_fjxjnkojxznlelk.jpeg


      Допустим, у Вас есть доп профиль (здесь он называется «Ит отдел», в которых настроена возможность «отправлять от Имени» или «Отправлять как»).

      Тогда мы получаем все доп. профили и для Них устанавливаем подпись.

      Расположение подписи настраивается так:


      /opt/zimbra/bin/zmprov modifyIdentity $ac "$gid" zimbraPrefDefaultSignatureId $sign_id zimbraPrefForwardReplySignatureId $sign_id zimbraPrefMailSignatureStyle outlook

      Последний параметр zimbraPrefMailSignatureStyle: outlook — перед вложенными сообщениями, internet — после…

      Сами профили настраиваем в Настройки — Учетные Записи:

      s-rkviskxcpk8utlk_uskj6miue.jpeg
    • устанавливаем подпись.
    • переходим к следующему Пользователю.

Описание параметров


SRC_LOGO» — ссылка на логотип организации.

Создаём ящик отдела ИТ ([email protected]). В Zimbra есть встроенный сервис хранения документов (Портфель). В ящике отдела ИТ в Портфеле, создаем папку LOGO, в неё помещаем логитип Нашей организации.

Разрешаем доступ к данной папке.

jobcfousehzm16ceypi9vysqily.jpeg


Теперь логотип Нашей организации доступен по адресу:


SRC_TXT=«ЛОГО Организации» — текстовое пояснение, если отключена загрузка изображений в браузере.

SIGN_NAME=«Организация» — Название подписи ( можно транслитом, можно по-русски).

DOMEN=«domen.ru» — почтовый домен, для которого будем устанавливать подписи.

Автоматизация выполнения


Настраиваем crontab от пользователя zimbra:


sudo su zimbra
crontab -e


Будьте внимательны, в crontabe данного Пользователя выполняются фоновые задания zimbra (между секциями ZIMBRA_START и ZIMBRA_END).

Дописываем Наше задание в конец файла… не забываем оставить пустую строку в конце!

Запускаем скрипт /usr/local/bin/zimbra/zm_sign_html.sh каждый день в 6:00.

Пример файла crontab:


#
35 3 * * * /opt/zimbra/bin/zmcbpadmin --cleanup >/dev/null 2>&1
# ZIMBRAEND -- DO NOT EDIT ANYTHING BETWEEN THIS LINE AND ZIMBRASTART
0 6 * * * /usr/local/bin/zm_sign_html.sh


Заключение


На этом пока все. Можно дописать отсылку на e-mail. Если это кому-то необходимо — дополню.
Пишите в комментах…

Всем хорошего настроения! И не болеть!

Ссылки на используемые статьи





P.S.: Отдельная благодарность Шульц Денису ( ) за помощь в отладке скрипта и работе с документацией Zimbra CLI.
 
Сверху Снизу