Pull to refresh

Унифицированная динамическая корпоративная подпись с логотипом Postfix + alterMIME + addAttachFilter + Active Directory или MySQL

Reading time 6 min
Views 16K

Введение


Практически в любой компании руководство требует соблюдать тот или иной формат деловой переписки, где почтовой подписи отводится особая роль. Часто бывает так, что руководство компании обязывает всех ставить унифицированную корпоративную подпись, но на практике большинство сотрудников игнорируют данное обязательство по разным причинам, либо структура подписи отличается от корпоративной (шрифтом, цветом, шаблоном текста).

Разумеется, практически вся работа по выполнению этой задачи ложится на плечи системного администратора. Это хорошо, когда в компании работают пара десятков сотрудников и единожды добавить корпоративную подпись не составит большого труда. Но что делать, когда в вашей компании работают более 50 человек, которые могут использовать разные почтовые клиенты, и которым периодически требуется замена программного обеспечения?

Получается, что в долгосрочной перспективе, выполнить это требование практически не возможно. Как результат, руководству приходится время от времени пинать своих подчиненных, что может вызвать гнев в сторону провинившегося сотрудника, а также всего отдела IT. В лучшем случае кто-то получит замечание, в худшем — лишится премии.

В этой статье расскажу, как можно реализовать поставленную задачу, с какими сложностями придется столкнуться, и как эти сложности преодолеть.

Задача и проблемы ее реализации


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

Возможно многие из вас уже пробовали справится с этой задачей, использую связку alterMIME + addAttachFilter, но бросали эту затею по многим причинам. Как правило, чтобы вы не делали, структура писем или подписи становится не читаемая, особенно при активной переписке, а также если кто-то использует Microsoft Outlook. Что же, давайте разберем все эти проблемы…

Реализация поставленной задачи


Для начала вам потребуется полностью настроенный почтовый сервер Postfix с настроенной авторизацией Active Directory или MySQL. В моем случае было использовано следующее программное обеспечение:
  • Debian 7.x
  • Postfix 2.x
  • alterMIME 0.3.10
  • addAttachFilter
  • Active Directory

alterMIME — программа, которая меняет MIME
addAttachFilter — скрипт, который добавляет логотип

Установить alterMIME для Debian можно так:
  • apt-get install altermime

Либо скачайте и установите его с официального сайта: www.pldaniels.com/altermime

Также установите addAttachFilter с официального сайта: addattachfilter.sourceforge.net

Для начала настройте alterMIME и addAttachFilter строго по инструкции с этих сайтов:

Данные статьи на английском языке, но они интуитивно понятные. Если вы все сделали правильно по этим инструкциям, то первой реакцией будет улыбка до ушей с криком Yahooo при отправки тестового письма. Вот только радоваться вы будете не долго. С этого момента настройка только начинается…

«Подводные камни»


Думаю, что многие из вас самостоятельно доходили до этого момента, но на этом все и заканчивалось, после чего приходилось делать откат настроек.

Первый подводный камень, с которым мне пришлось столкнуться, это отсутствие возможности добавить логотип как base64 внутри HTML-тэга IMG SRC. Проблема заключается в том, что большинство почтовых клиентов, включая Outlook, не распознают данный тэг с форматом картинки base64. Также нельзя использовать внешние ссылки на картинку, так как во всех почтовых клиентах, настроенных по-умолчанию, будет блокироваться такой логотип. Поэтому данную проблему мы будем решать при помощи perl скрипта addAttachFilter.

Второй подводный камень. Это не регулярная вставка подписи в письма. Дело в том, что когда формируется письмо, то поле "From: " может быть с простым значением почтового адреса, то есть оно формируется как From: ivan.ivanov@your.domain, хотя у многих эта строчка будет выглядеть как From: «Ivan Ivanov» <ivan.ivanov@your.domain>.

Чтобы решить эту проблему замените строчку в скрипте disclaimer:
  • from_address=`grep -m 1 «From:» in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`

Этой строчкой:
  • from_address=`grep -m 1 «From:» in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1 | sed 's/^From: //g'`

Третий подводный камень. Если все делать точно по 2ум предыдущим инструкциям, то при переписке можно увидеть много странностей. Все эти «странности» будут видны как при отображении текста, так и при отображении подписи в разных почтовых клиентах, включая Outlook. Перечислять их нет смысла, вы сами все увидите. Дело в том, что при такой конфигурации ваш почтовый сервер будет всегда вставлять логотип в каждое письмо, даже отправленное другим сервером какому-либо сотруднику в вашей компании. Таким образом вам нужно изменить скрипт disclaimer.

Удалите строчку:
  • cat | /var/spool/filter/addAttachFilter.pl > in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

Добавьте строчку вместо нее:
  • cat > in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

Этим действием вы возвращаете настройки скрипта disclaimer к первичной настройке.

После этого замените строчку:
  • trap «rm -f in.$$» 0 1 2 3 15

Строчкой:
  • trap «rm -f in.$$; rm -f pic.$$» 0 1 2 3 15

И после строчки:
  • if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then

Добавьте 2 строчки:
  • cat in.$$ | $INSPECT_DIR/addAttachFilter.pl > pic.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
  • cat pic.$$ > in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

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

Четвертый подводный камень заключается в почтовом клиенте Outlook. Если он используется в вашей компании, то в зависимости от его настроек, почтовый клиент может добавлять расширенные данные в письмо. Эти данные идут в прикрепленном файле winmail.dat. При добавлении этого файла на многих клиентах не отображается корпоративная подпись. Чтобы этого избежать нужно добавить в реестр один ключ DisableTNEF=1 (DWORD). Настоятельно рекомендую добавить это значение на всех компьютерах, где установлена любая версия Microsoft Outlook. Подробнее о проблеме и пути ее устранения вы можете прочитать здесь www.slipstick.com/problems/outlook-is-sending-winmail-dat-attachments

Пятый подводный камень (косметический). Суть данной проблемы заключается в том, что корпоративная подпись будет добавляться всегда снизу и ее никак невозможно добавить после вашего ответа. Так как данное письмо формируется на сервере, и сервер просто не знает куда поставить подпись, в отличие от любого почтового клиента, когда вы сами форматируете письмо. Это может создать проблему при длительной переписке. Решение довольно простое — создайте минимальную текстовую подпись, например:

  • __
  • Best Regards,
  • Ivan Ivanov

Таким образом, при длительной переписке у вас всегда будет вставляться две подписи, корпоративная и минимальная (для разделения ответов).

"Динамический" подводный камень. Давайте разберем последний подводный камень, связанный с динамическим составлением списка сотрудников. Как вы уже заметили, подпись добавляется только у тех сотрудников, которые прописаны в файле disclaimer_addresses. Несложно догадаться, что вам потребуется регулярно следить за этим файлом, если вы редактируете его вручную. Хорошо, если в вашей компании работают пара десятков сотрудников… Для того, чтобы решить эту проблему, поставьте в cron скрипт, который будет формировать этот список. Думаю, что выполнение этого скрипта 1-2 раз в сутки решит проблему со списком. Пример скрипта:

  • /usr/bin/ldapsearch -D USER@YOUR.DOMAIN -w PASSWORD -LLL -h 192.168.1.100 -p 3268 -S mail -N -b dc=YOUR,dc=DOMAIN "(mail=*@*)" mail | grep «mail:» | cut -d " " -f 2 > /etc/postfix/disclaimer_addresses

где 192.168.1.100, IP вашего домен контроллера

Также вам понадобится пакет ldap-utils для выполнения этой команды.

Динамическая подпись


Теперь мы подошли к заключительному этапу. Здесь мы рассмотрим как можно менять подпись динамически. В моем случае мне приходится менять Имя, Фамилию и Телефон сотрудника. Сделать это можно при помощи данных, которые используются в Active Directory или MySQL. Для этого вам понадобится снова утилита ldapsearch. Суть использования этой утилитой сводится к тому, чтобы считать поле displayName и поле telephoneNumber. После чего нужно сформировать переменную с этими значениями и подставить в подпись. Пример скрипта, как можно получить displayName:

  • DisplayName=`ldapsearch -D USER@YOUR.DOMAIN -w PASSWORD -LLL -h 192.168.1.100 -p 3268 -N -b dc=YOUR,dc=DOMAIN "(mail=*$from_address*)" displayName`

где переменная $from_address уже находится в скрипте disclaimer

Не буду приводить полный текст моего скрипта disclaimer, который формирует динамическую подпись. Так как в основном он состоит из подготовки HTML «шапки». В целом, динамическое формирование подписи сводится к составлению «шапки» и данных, полученных из Active Directory или MySQL.

Заключение


На данный момент добавление унифицированной динамической корпоративной подписи работает отлично. Протестировано с различными почтовыми клиентами, включая разные версии Outlook. Не исключаю, что могут остаться еще какие-либо проблемы с данной реализацией. Если таковые и есть, то прошу отписываться в комментариях, и о вашем способе их решения.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+14
Comments 9
Comments Comments 9

Articles