Вы здесь

Добавляем подпись в письма при помощи сервера (Postfix)


Добавляем подпись в письма при помощи сервера (Postfix)

Привет. Обратились ко мне с просьбой настроить почтовый сервер так, что бы сервер сам добавлял подписи к письмам пользователей. Хочу рассказать вам, как я эту задачу решил.

У меня имеется — настроенный и рабочий 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 "подпись для ящика [email protected]" >> /etc/postfix/disclaimers/[email protected]
echo "подпись для ящика [email protected]" >> /etc/postfix/disclaimers/[email protected]

Как видно — имя файла с подписью должно совпадать с адресом отправителя.

Опять меняем права:

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 код, то проблем с кодировкой быть не должно.

0 0

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<