Недавно понадобилось настроить автоответчик для почтового сервера Postfix.

Задача: если человек уходит в отпуск или на больничный, он должен иметь возможность повесить автоответчик на своё корпоративное мыло, но так, чтобы каждый адресат этот ответ получал всего 1 раз (то есть, только на первое письмо).

050


Я нашёл ряд якобы решений, которые с поставленной задачей полностью не справлялись. Отвечать один раз без обработки напильником они не могли, а текст сообщения и у кого включён автоответчик - это надо было мне постоянно прописывать в нужные файлы.

В общем, неудобно и как-то слабовато. Но дальше я начал искать по отдельным компонентам из уже имеющегося материала и нашёл достаточно интересную и полную статью по комплексной настройке почтового сервера, где было несколько строк и про автоответчик.

Всё оказалось очень просто и удобно. В качестве веб-интерфейса для управления атвоответчиком используется postfixadmi! В нём же есть всё необходимой для настройки: скрипт на Perl и документация, как его использовать. В Debian всё это добро находится тут:

/usr/share/doc/postfixadmin/examples/VIRTUAL_VACATION


а в интернете можно взять с svn:

https://postfixadmin.svn.sourceforge.net/svnroot/postfixadmin/trunk/VIRTUAL_VACATION/


Итак, postfixadmin должен быть уже установлен и настроен.

Далее необходимо установить несколько модулей для Perl:

aptitude install libmime-encwords-perl libmail-sendmail-perl libdbd-pg-perl libemail-valid-perl libmime-perl liblog-log4perl-perl libgetopt-argvfile-perl libmime-charset-perl liblog-dispatch-perl


После этого устанавливаем vacation.pl в нужное место:

mkdir -p /etc/postfix/vacation<br>сd /etc/postfix/vacation<br>wget https://postfixadmin.svn.sourceforge.net/svnroot/postfixadmin/trunk/VIRTUAL_VACATION/vacation.pl<br>(или cp /usr/share/doc/postfixadmin/examples/VIRTUAL_VACATION/vacation.pl.gz ./ && gunzip vacation.pl.gz)<br>chown -R vmail /etc/postfix/vacation<br>chmod 700 vacation.pl


(пользователь vmail был создан во время настройки почтового сервера)

Теперь отредактируем vacation.pl внеся в него данные для подключения к БД. Если posttfix настроен в связке с MySQL, то необходимо закомментировать строку (добавить # вначале строки):

our $db_type = 'Pg';


и расскомментировать (убрать # перед):

#our $db_type = 'mysql';


и вносим свои данные ниже:

our $db_host = 'localhost';<br><br># connection details<br>our $db_username = 'user';<br>our $db_password = 'password';<br>our $db_name     = 'postfix';


Не забываем указать домен автоответчика:

our $vacation_domain = 'autoreply.zenway.ru';


Если в локальной сети авторизации нет на smtp-сервере, то делаем значения пустыми:

our $smtp_auth = '';<br>our $smtp_authid = '';<br>our $smtp_authpwd = '';


Только ни в коем случае совсем не убирайте эти строки!

А вот то, что меня интересовало в первую очередь после удобного интерфейса:

# notification interval, in seconds<br># set to 0 to notify only once<br># e.g. 1 day ...<br>#my $interval = 60*60*24;<br># disabled by default<br>our $interval = 0;


Значение "0" как раз то, которое мне необходимо - отвечать 1 раз. Либо можно указать нужный интервал в секундах, через который автоответчик снова ответит одному и тому же адресату.

Это основные настройки скрипта. Настало время настроить postfixadmin. Для этого редактируем файл config.inc.php в кго корне. В дебиане это:

/etc/postfixadmin/config.inc.php


У всех параметров ниже должно быть значение "YES":

$CONF['vacation'] = 'YES';<br>$CONF['vacation_control'] ='YES';<br>$CONF['vacation_control_admin'] = 'YES';


А тут прописываем свой домен для автоответчика, который мы уже упоминали выше:

$CONF['vacation_domain'] = 'autoreply.zenway.ru';


Осталось прописать наш домен в hosts (дополнительная настройка DNS не требуется!). Добавляем в /etc/hosts строку типа:

127.0.0.1 autoreply.zenway.ru


Почти всё. На очереди сам postfix.

Создаём файл /etc/postfix/vacation/transport содержащей следующую строку:

autoreply.zenway.ru        vacation:


И выполняем команду:

postmap hash:/etc/postfix/vacation/transport


а в /etc/postfix/main.cf дописываем:

transport_maps = hash:/etc/postfix/vacation/transport


Осталось прописать наш скрипт в /etc/postfix/main.cf:

vacation unix - n n - - pipe<br> flags=Rq user=vmail argv=/etc/postfix/vacation/vacation.pl -f ${sender} -- ${recipient}


После этого просим postfix перечитать конфиги:

postfix reload


и берёмся за настройку автоответчика через веб-интерфейс postfixadmin. Теперь каждый пользователь вашего сервера имеет доступ к этим настройкам по адресу:
http://ВАШ_ДОМЕН/postfixadmin/users/


053

Вот так выглядит активация самого виновника:

050

То есть, остяётся лишь вставить даты и приписать что хочется ;) Всё это может делать простой пользователь, не дёргая вас постоянно ;)

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

051

На самом деле, всё просто - скачать скрипт, прописать в нём свои данные, указать его postfix'у и включить автоответчик в postfixadmin'е. Жаль только, что скрипт не работает с ldap'ом :(