Pull to refresh

Автоответчик в postfix

Reading time 3 min
Views 7.7K
Приветствую читателей сего сайта.

Тема, которую я собираюсь поднять, здесь не нова, но, может быть, кому-то поможет.

Итак…

Дано:
1. Настроенный postfix+cyrus-imap+sasl2. Почтовый сервер обслуживает 3 домена (domain1.ru, domain2.ru, domain3.ru)

Задача:
Сделать «автоответчик» отправителю. То есть, если получатель письма на больничном и ему приходит письмо, то письмо должно оказаться в его же ящике, а отправителю должен быть ответ что, мол, «Иванов на больничном, по всем вопросам обращаться к Петрову».

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

Решение:
1. Создаем файл сообщения /etc/postfix/script/ivanov@domain1.ru.msg с содержимым:
Добрый день. С 01.01.2016 по 15.01.2016 я буду на больничном, по всем вопросам обращаться по телефону 3432142345435. Спасибо.

2. /etc/postfix/master.cf добавляем следующее
autoreply_ivanov_domain1
        unix    -       n       n       -       -       pipe
        flags=F user=nobody   argv=/etc/postfix/script/autoreply_ivanov_domain1 ${sender} ${recipient}


3. /etc/postfix/main.cf добавляем
virtual_alias_maps = hash:/etc/postfix/virtual_alias_maps
transport_maps = hash:/etc/postfix/transport


4. /etc/postfix/transport

ivanov.autoreply.domain1.ru     autoreply_ivanov_domain1:

# здесь мы определяем транспорт для несуществующего домена ivanov.autoreply.domain1.ru. Домен этот нужен для того что бы однозначно определить юзера в определенном домене.


5. /etc/postfix/virtual_alias_maps

 ivanov@domain1.ru ivanov@domain1.ru, ivanov@domain1.ru@autoreply@ivanov.autoreply.domain1.ru
# здесь мы указыаем что пришедшую почту на  ivanov@domain1.ru надо доставить ему же и на ящик autoreply@ivanov.autoreply.domain1.ru(домен которого будет обслуживаться по правилам указанным в master.cf согласно транспорту указанному в transport)


6. Готовим скрипт ответа на сообщение:
/etc/postfix/script/autoreply_ivanov_domain1 с содержимым
#!/bin/bash
1. sender=`echo $1`
2. recipient=`echo $2`
3. name1=`echo $recipient | cut -d @ -f 1`
4. name2=`echo $recipient | cut -d @ -f 2`
5. name=`echo $name1@$name2`
6. text=`cat /etc/postfix/script/$name.msg`
7. /etc/postfix/script/sendEmail/sendEmail -o tls=no -f "REPLY <autoreply@domain1.ru>" -t $sender -u reply -o message-charset=utf-8 -m $text -s 192.168.1.1  -xu autoreply@domain1.ru -xp "111"

# пояснение. Цифры номеров строк надо конечно же удалить.


1-2. Присваиваем переменным значения других переменных, полученных от postfix. Эти переменные окажутся здесь вот из этой строки файла master.cf argv=/etc/postfix/script/autoreply_ivanov_domain1 ${sender} ${recipient}
3-4. Переменная recipient будет равна «ivanov@domain1.ru@autoreply@ivanov.autoreply.domain1.ru» и отсюда нам надо выдернуть «ivanov@domain1.ru»что мы и делаем. Сначала дергаем первое поле «ivanov »до первого разделителя а потом второе поле «domain1.ru»
5. После выполнения этой строки переменная name будет иметь вид ivanov@domain1.ru.
6. Переменной text присваивается значение содержимого файла ivanov@domain1.ru.msg
7. Собственно посылаем ответ отправителю. Я думаю, с этой строкой все понятно, от кого, кому, что посылаем, через какой smtp, логин и пароль для ящика autoreply@domain1.ru, который, кстати, должен быть, естественно, создан.

Чтобы сделать автоответчик для других юзеров/доменов — все то же самое, только надо правильно именовать файлы.

Всем спасибо.
Tags:
Hubs:
+2
Comments 2
Comments Comments 2

Articles