Привет. Обратились ко мне с просьбой настроить почтовый сервер так, что бы сервер сам добавлял подписи к письмам пользователей. Хочу рассказать вам, как я эту задачу решил.
У меня имеется — настроенный и рабочий SMTP сервер postfix, который работает на Ubuntu Server 16.04. Добавлять подписи будем при помощи altermime.
Перейдем в режим суперпользователя:
sudo su
Обновим список пакетов:
apt update
Установим altermime:
apt install altermime
Добавим пользователя для altermime:
useradd -r -c "Postfix Filters" -d /var/spool/filter filter
Создадим для него директорию и зададим на нее необходимые разрешения:
mkdir /var/spool/filter
chown filter:filter /var/spool/filter/
chmod 755 /var/spool/filter/
Создаем скрипт обработки писем:
nano /etc/postfix/disclaimer
Его содержимое:
#!/bin/sh
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
DISCLAIMERS=/etc/postfix/disclaimers
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15
# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
from_address=`echo "$from_address" | sed "s/From: //g"`
if [ -f $DISCLAIMERS/$from_address ] ; then
/usr/bin/altermime --input=in.$$ \
--disclaimer=$DISCLAIMERS/${from_address} \
--disclaimer-html=$DISCLAIMERS/${from_address} || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
$SENDMAIL -oi "$@" <in.$$
exit $?
Задаем нужные права на этот файл:
chgrp filter /etc/postfix/disclaimer
chmod 750 /etc/postfix/disclaimer
Создаем папку, где у нас будут храниться файлы с подписями:
mkdir /etc/postfix/disclaimers
И в ней создадим файлы с подписями для каждого адреса, которому нужно добавить подпись:
echo "подпись для ящика test@mytechnote.ru" >> /etc/postfix/disclaimers/test@mytechnote.ru
echo "подпись для ящика test1@mytechnote.ru" >> /etc/postfix/disclaimers/test1@mytechnote.ru
Как видно — имя файла с подписью должно совпадать с адресом отправителя.
Опять меняем права:
chgrp -R filter /etc/postfix/disclaimers
chmod -R 750 /etc/postfix/disclaimers
Осталось только внести изменения в конфиг Postfix:
nano /etc/postfix/master.cf
Здесь после сточки с smtp нужно добавить параметр — -o content_filter=dfilt:
Должно получиться что то вроде:
smtp inet n — y — — smtpd
-o content_filter=dfilt:
Пробелы в начале второй строки — важны.
И в конец файла добавляем:
dfilt unix — n n — — pipe
flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} — ${recipient}
Перезапускаем postfix:
/etc/init.d/postfix restart
Вот и всё, теперь все сообщения, которые будут отправляться с адресов указанных в disclaimers будут дополняться подписью.
Единственный момент — если вы будете отправлять письма в текстовом виде (без html), практически наверняка будут проблемы с кодировкой подписи.
По умолчанию это UTF-8. Если ваш почтовый клиент не воспринимает ее, то изменить кодировку файла можно такими командами:
iconv -f UTF-8 -t cp1251 test\@fl-mon.com > tmp
mv tmp test\@fl-mon.com
Соответсвенно cp1251 — нужно изменить на ту, в которой по умолчанию показывает почтовая программа.
Если же в заголовке письма указано, что в письме есть html код, то проблем с кодировкой быть не должно.
