Помогите пожалуйста с autoreply. Выходит не то что хочется.

Общие вопросы по установке и настройке сервера Postfix.
Писать в этот форум могут только зарегистрированные пользователи.

Модераторы: prefer, alexandrnew, ALex_hha, Roman, Axel

Esquire
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 25
Зарегистрирован: 06 июл 2006, 15:26

Помогите пожалуйста с autoreply. Выходит не то что хочется.

Сообщение Esquire » 12 янв 2009, 21:30

Делал все по
http://www.opennet.ru/base/net/postfix_ ... y.txt.html
Изменил юзера user= , check_recipient_access перед hash: поставил и скриптик не такой, а что то типа
echo "болею" | /usr/sbin/sendmail -f $2 $1
Все отсылается, уведомление, о том что я приболел, отправителю приходит :), но в ящик, куда изначально шло, почта не падает. А очень хочется ...
Подскажите пожалуйста что можно сделать? Что то я сам не догоняю ... Есть мысль, что надо класть этим же скриптом например с помощью procmail, но терзают смутные сомнения ... Буду премного благодарен за любые советы.

Esquire
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 25
Зарегистрирован: 06 июл 2006, 15:26

Сообщение Esquire » 13 янв 2009, 17:46

попробовал с помошью прокмайла раскладывать из скрипта. Сомнения терзали не зря :(
Теперь проблема в том, что в pipe нельзя ставить user=postfix, но именно его права на директориях с письмами. Прокмайл стартует от указанного юзера, говорит что правов ему недостаточно и кладет в место куда мне совершенно не нужно.
Что делать? Ума не приложу ...

Аватара пользователя
Виктор
Член клуба
Член клуба
Сообщения: 832
Зарегистрирован: 02 июн 2006, 15:54
Откуда: Южно-Сахалинск

Re: Помогите пожалуйста с autoreply. Выходит не то что хочет

Сообщение Виктор » 13 янв 2009, 20:18

Esquire писал(а):Делал все по
http://www.opennet.ru/base/net/postfix_ ... y.txt.html
Изменил юзера user= , check_recipient_access перед hash: поставил и скриптик не такой, а что то типа
echo "болею" | /usr/sbin/sendmail -f $2 $1
Все отсылается, уведомление, о том что я приболел, отправителю приходит :), но в ящик, куда изначально шло, почта не падает. А очень хочется ...
Подскажите пожалуйста что можно сделать? Что то я сам не догоняю ... Есть мысль, что надо класть этим же скриптом например с помощью procmail, но терзают смутные сомнения ... Буду премного благодарен за любые советы.
Коллега не надо таки сразу: "ой чегото мне нехорошо!"
Мы и опеннет не всегда читаем.
Раскажите Вашу проблему с самого начала.
Подробненько. Мы тут покумекаем. Может ктото из коллег уже имел эти грабли. И кстати тут как сказал один тофарищ -"не телепаты"
Так что просьба Логи в студию.
чем. толще наши морды. тем теснее наши ряды.

Esquire
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 25
Зарегистрирован: 06 июл 2006, 15:26

Сообщение Esquire » 13 янв 2009, 21:01

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

Ну в общем расскажу с начала. Письмо принимает один постфикс. Отбивает там всякие неправильные письма по ..._restrictions = и в этом роде и передает на другую машину на другой постфикс на порт 10025 который тоже что то там делает но главное он

-o content_filter=lmtp:unix:/var/run/dspam/dspam.sock

То есть отдает письмо на проверку дспаму
дспам соответственно метит все как положено и обратно отдает постфиксу

DeliveryHost 127.0.0.1
DeliveryPort 10026
DeliveryIdent localhost
DeliveryProto SMTP

который пущен как

localhost:10026 inet n - n - - smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

Который и раскладывает по маилдирам пользователей (все виртуальные)

Вот в этот то самый момент, когда спам весь ушел в карантин, и хотелось бы некоторым пользователям иметь возможность отправить автореплей но с сохранением письма в ящик. И вот это то у меня никак не получается. Кроме перечисленного выше (а оно все работает и ошибок не выдает, но вот только не кладет в ящик!) я пробовал сегодня еще модернизировать способ из документации
http://www.postfix.org/VIRTUAL_README.html
в самом низу - Autoreplies
приделывал к 10026 вот так вот алиасы

-o virtual_alias_maps=hash:/mnt/md1/etc/postfix-in/valiases10026

и далее по доке. Но ничего путного тоже не вышло.

Да! При этом отсылать письма должен еще отдельный постфикс который висит на этой же машине но на 25 порту.
Пожалуйста не спрашивайте почему именно такая схема. Она на самом деле еще хуже :) Это я еще упростил. Но надо именно так ...

Ну и еще раз спасибо за то что вообще обратили на меня внимание. Бесконечно признателен.

Аватара пользователя
Виктор
Член клуба
Член клуба
Сообщения: 832
Зарегистрирован: 02 июн 2006, 15:54
Откуда: Южно-Сахалинск

Сообщение Виктор » 13 янв 2009, 21:17

Esquire писал(а):Спасибо что откликнулись :) А то я уж отчаиваться начал, что мол никому меня не жалко :)
Про телепатов вы совершенно верно. Просто у меня все работает и я то думал, что в схеме самой не предусмотрено что бы письмо оставалось (несмотря на уверения автора. Правда если учесть сколько там ошибок ... ) оттого и не привел логов и конфигов...

Ну в общем расскажу с начала. Письмо принимает один постфикс. Отбивает там всякие неправильные письма по ..._restrictions = и в этом роде и передает на другую машину на другой постфикс на порт 10025 который тоже что то там делает но главное он

-o content_filter=lmtp:unix:/var/run/dspam/dspam.sock

То есть отдает письмо на проверку дспаму
дспам соответственно метит все как положено и обратно отдает постфиксу

DeliveryHost 127.0.0.1
DeliveryPort 10026
DeliveryIdent localhost
DeliveryProto SMTP

который пущен как

localhost:10026 inet n - n - - smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

Который и раскладывает по маилдирам пользователей (все виртуальные)

Вот в этот то самый момент, когда спам весь ушел в карантин, и хотелось бы некоторым пользователям иметь возможность отправить автореплей но с сохранением письма в ящик. И вот это то у меня никак не получается. Кроме перечисленного выше (а оно все работает и ошибок не выдает, но вот только не кладет в ящик!) я пробовал сегодня еще модернизировать способ из документации
http://www.postfix.org/VIRTUAL_README.html
в самом низу - Autoreplies
приделывал к 10026 вот так вот алиасы

-o virtual_alias_maps=hash:/mnt/md1/etc/postfix-in/valiases10026

и далее по доке. Но ничего путного тоже не вышло.

Да! При этом отсылать письма должен еще отдельный постфикс который висит на этой же машине но на 25 порту.
Пожалуйста не спрашивайте почему именно такая схема. Она на самом деле еще хуже :) Это я еще упростил. Но надо именно так ...

Ну и еще раз спасибо за то что вообще обратили на меня внимание. Бесконечно признателен.
Изложено неплохо но я Пас.
В master.conf ничего не трогаю.
Есть очень спец -префер.
Надеюсь на Вашу проблему он ответит.
чем. толще наши морды. тем теснее наши ряды.

Esquire
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 25
Зарегистрирован: 06 июл 2006, 15:26

Сообщение Esquire » 13 янв 2009, 21:26

Я тоже очень надеюсь :)
А вам все равно большое спасибо хоть вы и "пас".

У меня есть один рабочий вариант. В первой конфигурации класть скриптом письма туда куда он положить сможет, а уж потом по крону перекладывать куда надо и менять права. Работать будет, но чуткая моя поэтическая душа не принимает такой кривизны :) по крайней мере пока нет точной уверенности что нельзя как то по другому ... попрямее ...

Аватара пользователя
Виктор
Член клуба
Член клуба
Сообщения: 832
Зарегистрирован: 02 июн 2006, 15:54
Откуда: Южно-Сахалинск

Сообщение Виктор » 13 янв 2009, 21:42

Esquire писал(а):Я тоже очень надеюсь :)
А вам все равно большое спасибо хоть вы и "пас".

У меня есть один рабочий вариант. В первой конфигурации класть скриптом письма туда куда он положить сможет, а уж потом по крону перекладывать куда надо и менять права. Работать будет, но чуткая моя поэтическая душа не принимает такой кривизны :) по крайней мере пока нет точной уверенности что нельзя как то по другому ... попрямее ...
конечно проблема у Вас интересная, однако подождите всетаки
гуру этого форума.
Может придется ждать и неделю.
Всетаки это форум взаимопомощи как бы...
чем. толще наши морды. тем теснее наши ряды.

Аватара пользователя
prefer
Site Admin
Site Admin
Сообщения: 2341
Зарегистрирован: 08 июн 2007, 09:41

Сообщение prefer » 14 янв 2009, 12:52

Приведу работающий тестовый вариант.

master.cf

autoreply unix - n n - - pipe
flags= user=nobody argv=/usr/local/etc/postfix/autoreply $sender $mailbox

main.cf

virtual_mailbox_maps = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
transport_maps = hash:/usr/local/etc/postfix/transport

transport

autoreply.example.ru autoreply:

mysql base

address goto

mailbox@example.ru mailbox@example.ru,mailbox@example.ru@autoreply.example.ru

autoreply

#!/bin/sh
/usr/sbin/sendmail -f $2 $1 < /usr/local/etc/postfix/autoreply.txt

autoreply.txt

This is a autoreply text
I am absent
Send mail later
I prefer Postfix

Esquire
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 25
Зарегистрирован: 06 июл 2006, 15:26

Сообщение Esquire » 14 янв 2009, 16:55

prefer писал(а):Приведу работающий тестовый вариант.
.........
Большое спасибо за ваш вариант. Безусловно дает, так сказать, пищу для размышления. Но к сожалению, мне кажется, что я не смогу применить его к своим нуждам без существенных доработок. На которые мне не хватает знаний :(

Опишу более точно в чем загвоздка.

постфикс над которым следует произвести это надругательство имеет вот такой конфиг
(немного сократил)

main.cf

inet_interfaces = 192.168.1.1 # (10025 port)
local_recipient_maps =
mynetworks = 127.0.0.0/8
relayhost = 192.168.1.1
home_mailbox = Maildir/
mail_spool_directory = /var/vspool/mail
syslog_name = pf-IN
virtual_mailbox_base = /var/vspool/mail/vhosts
virtual_mailbox_maps = mysql:/etc/postfix-in/mysql/mysql-virtual-maps.cf
transport_maps = mysql:/etc/postfix-in/mysql/mysql-transport.cf
virtual_minimum_uid = 1000
virtual_uid_maps = static:1003
virtual_gid_maps = static:103
virtual_mailbox_domains = hash:/etc/postfix-in/virtual_mailbox_domains
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination

master.cf

# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
10025 inet n - n - - smtpd
-o content_filter=lmtp:unix:/var/run/dspam/dspam.sock
-o smtpd_client_connection_count_limit=0

localhost:10026 inet n - n - - smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o syslog_name=pf-LOCAL

autoreply unix - n n - - pipe
flags=R user=dspam argv=/etc/postfix-out/bin/autoreply.sh ${sender} ${recipient}

Dspam возвращает письмо на localhost:10026 в случае если оно не спам. Спам раскладывает сам
с помощью прокмайла.
Идея заключается в том что бы сделать все что вы привели, но на localhost:10026. (Зачем отвечать на спам?)
Я пробовал приписать ему
-o virtual_alias_maps=hash:/etc/postfix-in/valiases10026
в valiases10026
mailbox@example.ru mailbox@example.ru mailbox@example.ru@autoreply.example.ru
но ничего не произошло. В логах пусто. Письмо ложиться в ящик как будто ничего и не приписывал

По варианту из статьи делал
в main.cf
local_restrictions = check_recipient_access hash:/mnt/md1/etc/postfix-in/rcpt_redirect
в master.cf
-o smtpd_recipient_restrictions=${local_restrictions},permit_mynetworks,reject
в rcpt_redirect
mailbox@example.ru FILTER autoreply:
Это все работает но в ящик не кладет и заставить без кривизны не знаю как ...

Буду бесконечно благодарен за любые мысли...

Аватара пользователя
prefer
Site Admin
Site Admin
Сообщения: 2341
Зарегистрирован: 08 июн 2007, 09:41

Сообщение prefer » 15 янв 2009, 10:08

"Знание принципов даёт свободу действий"

Рене Генон
Рассмотрим как работает вышеприведенный тестовый вариант.

Например:
Отправитель (sener) - user@yahoo.com
Получатель (recipient) - mailbox@example.ru
Автоответчик (autoreply) - autoreply.example.ru

Postfix можно рассматривать как маршрутизатор почтовых сообщений.
Т.е. нужно указать Postfix какую почту куда и как доставлять.
Это достигается использованием классов адресов и механизма транспорт.

Изображение

Для маршрутизации сообщений направляемых на example.ru мы использовали виртульный класс адресов.
Для маршрутизации сообщений направляемых на автоответчик используем механизм транспорт.

transport

autoreply.example.ru autoreply:

Так как мы хотим чтобы Postfix не только доставил сообщение на mailbox@example.ru но и отправил сообщение на автоответчик создадим алиас:

mailbox@example.ru -> mailbox@example.ru,mailbox@example.ru@autoreply.example.ru

Что значит "странный адрес" mailbox@example.ru@autoreply.example.ru ?
Дело в том что нам необходимо как сохранить адрес получателя (mailbox@example.ru) так и указать признак автоответчика (autoreply.example.ru).
Как будет использован такой адрес будет показано далее.

Обработка сообщения направленного на адрес mailbox@example.ru очевидна.
Рассмотрим обработку сообщения направленного на адрес mailbox@example.ru@autoreply.example.ru.
В соответствии с настройкой transport данное сообщение будет обработано сервисом autoreply.
То есть использована выделенная часть адреса mailbox@example.ru@autoreply.example.ru.

master.cf

autoreply unix - n n - - pipe flags= user=nobody argv=/usr/local/etc/postfix/autoreply $sender $mailbox

Теперь нам надо выделить из "странного адреса" адрес получателя сообщения (mailbox@example.ru).
Это делается при помощи макроса $mailbox. Он выделяет локальную часть адреса. В качестве которой у нас фигурирует адрес получателя.
То есть использована выделенная часть адреса mailbox@example.ru@autoreply.example.ru.

Таким образом для выражения autoreply $sender $mailbox сформирован вызов вида autoreply user@yahoo.com mailbox@example.ru.
И на адрес user@yahoo.com от имени mailbox@example.ru придет сообщение вида:

This is a autoreply text
I am absent
Send mail later
I prefer Postfix

Esquire
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 25
Зарегистрирован: 06 июл 2006, 15:26

Сообщение Esquire » 15 янв 2009, 14:15

prefer писал(а):
"Знание принципов даёт свободу действий"

Рене Генон
Рассмотрим как работает вышеприведенный тестовый вариант.
Спасибо за такое подробное разъяснение.
Попробовал сделать так как вы написали. письмо в ящик легло. Но при этом скрипт autoreply вызвался 2 раза. Все три письма были проверенны дспамом. К сожалению в какой последовательности я установить не в силах. То есть не понимаю будет ли реплеиться спам или нет. В условиях когда на одно письмо приходит двести писем спама отвечать на него почему то не хочется.
Вот лог

Jan 15 13:28:40 mailsrv pf-IN/smtpd[7725]: connect from SMTPsrv[1.1.1.1]
Jan 15 13:28:40 mailsrv pf-IN/smtpd[7725]: B53465BFE1E: client=SMTPsrv[1.1.1.1]
Jan 15 13:28:40 mailsrv pf-IN/cleanup[7728]: B53465BFE1E: message-id=<200901151328.41653@local.mail>
Jan 15 13:28:40 mailsrv pf-IN/qmgr[7723]: B53465BFE1E: from=<SENDER@MAIL>, size=550, nrcpt=2 (queue active)
Jan 15 13:28:40 mailsrv pf-IN/smtpd[7725]: disconnect from SMTPsrv[1.1.1.1]
Jan 15 13:28:40 mailsrv pf-LOCAL/smtpd[7731]: connect from localhost[127.0.0.1]
Jan 15 13:28:40 mailsrv pf-LOCAL/smtpd[7731]: D071C5BFE5D: client=localhost[127.0.0.1]
Jan 15 13:28:40 mailsrv pf-IN/cleanup[7728]: D071C5BFE5D: message-id=<200901151328.41653@local.mail>
Jan 15 13:28:40 mailsrv pf-IN/qmgr[7723]: D071C5BFE5D: from=<SENDER@MAIL>, size=1767, nrcpt=1 (queue active)
Jan 15 13:28:40 mailsrv pf-IN/pipe[7732]: D071C5BFE5D: to=<RCPT@MAIL@autoreply.MAIL>, relay=autoreply, delay=0.13, delays=0.12/0.01/0/0, dsn=2.0.0, status=sent (delivered via autoreply service)
Jan 15 13:28:40 mailsrv pf-IN/qmgr[7723]: D071C5BFE5D: removed
Jan 15 13:28:40 mailsrv pf-LOCAL/smtpd[7731]: disconnect from localhost[127.0.0.1]
Jan 15 13:28:40 mailsrv pf-LOCAL/smtpd[7731]: connect from localhost[127.0.0.1]
Jan 15 13:28:41 mailsrv pf-LOCAL/smtpd[7731]: 0D3005BFE5D: client=localhost[127.0.0.1]
Jan 15 13:28:41 mailsrv pf-IN/cleanup[7728]: 0D3005BFE5D: message-id=<200901151328.41653@local.mail>
Jan 15 13:28:41 mailsrv pf-IN/qmgr[7723]: 0D3005BFE5D: from=<SENDER@MAIL>, size=1648, nrcpt=2 (queue active)
Jan 15 13:28:41 mailsrv pf-IN/pipe[7732]: 0D3005BFE5D: to=<RCPT@MAIL@autoreply.MAIL>, orig_to=<RCPT@MAIL>, relay=autoreply, delay=0.13, delays=0.12/0/0/0, dsn=2.0.0, status=sent (delivered via autoreply service)
Jan 15 13:28:41 mailsrv pf-IN/virtual[7737]: 0D3005BFE5D: to=<RCPT@MAIL>, relay=virtual, delay=0.14, delays=0.12/0.01/0/0.02, dsn=2.0.0, status=sent (delivered to maildir)
Jan 15 13:28:41 mailsrv pf-IN/qmgr[7723]: 0D3005BFE5D: removed
Jan 15 13:28:41 mailsrv pf-LOCAL/smtpd[7731]: disconnect from localhost[127.0.0.1]
Jan 15 13:28:41 mailsrv pf-IN/lmtp[7729]: B53465BFE1E: to=<RCPT@MAIL@autoreply.MAIL>, orig_to=<RCPT@MAIL>, relay=192.168.1.1[/var/run/dspam/dspam.sock], delay=0.44, delays=0.01/0.01/0/0.42, dsn=2.6.0, status=sent (250 2.6.0 <"RCPT@MAIL"@autoreply.MAIL> Message accepted for delivery)
Jan 15 13:28:41 mailsrv pf-IN/lmtp[7729]: B53465BFE1E: to=<RCPT@MAIL>, relay=192.168.1.1[/var/run/dspam/dspam.sock], delay=0.44, delays=0.01/0.01/0/0.42, dsn=2.6.0, status=sent (250 2.6.0 <RCPT@MAIL> Message accepted for delivery)
Jan 15 13:28:41 mailsrv pf-IN/qmgr[7723]: B53465BFE1E: removed

Esquire
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 25
Зарегистрирован: 06 июл 2006, 15:26

Сообщение Esquire » 15 янв 2009, 14:46

prefer писал(а):
"Знание принципов даёт свободу действий"

Рене Генон
Рассмотрим как работает вышеприведенный тестовый вариант.

Например:
Спам тоже весь попадает в автореплай .. Доказано опытным путем ... Но! только один экземпляр :)

Аватара пользователя
prefer
Site Admin
Site Admin
Сообщения: 2341
Зарегистрирован: 08 июн 2007, 09:41

Сообщение prefer » 15 янв 2009, 14:51

Мои два сообщения написаны для изложения тестового примера и его объяснения.
Надо понять как это работает и применить для своей схемы.
I prefer Postfix

Esquire
Внёс свой вклад...
Внёс свой вклад...
Сообщения: 25
Зарегистрирован: 06 июл 2006, 15:26

Сообщение Esquire » 15 янв 2009, 15:01

prefer писал(а):Мои два сообщения написаны для изложения тестового примера и его объяснения.
Надо понять как это работает и применить для своей схемы.
к сожалению у меня проблема не в понимании как это работает в примере. А в том как это заставить работать в одном постфиксе и после дспама. Похоже что без поднятия еще одного постфикса не обойтись.
Спасибо большое за участие и помощь.

Аватара пользователя
prefer
Site Admin
Site Admin
Сообщения: 2341
Зарегистрирован: 08 июн 2007, 09:41

Сообщение prefer » 16 янв 2009, 08:43

Попробовал сделать так как вы написали. письмо в ящик легло. Но при этом скрипт autoreply вызвался 2 раза.
Необходимо до проверок на спам отключить address_mappings - в данном контексте обработку alias.
После проверок на спам включить address_mappings.
I prefer Postfix

Ответить