Страница 1 из 1

Exim. Проверка системного фильтра

Добавлено: 2007-06-14 17:29:55
dikens3
Прочитал документацию, сделал свой первый системный фильтр.

Код: Выделить всё

# Exim filter
if error_message then finish endif                      # Не отправляем рикошеты
# Копируем исходящую почту от этих отправителей
if $sender_address: match "(user1|user2)@mydomain.ru" or
# Копируем входящую почту для этих получателей
$recipients: match "(user1|user2)@mydomain.ru"
then
unseen deliver admin@mydomain.ru                                # Копируем на этот адрес
endif
Он работает, только при проверке вылезает это:

Код: Выделить всё

exim -bf exim-filter.conf < message
..
..

Filter error: failed to expand "$recipients" in filter file: unknown variable name "recipients"

Добавлено: 2007-06-14 18:53:32
Alex Keda
а вот х.з...
может надо до кучи задать этих самых получателей, с командной строки?

Добавлено: 2007-06-16 0:14:09
Marquez
Хороший пример, как раз сам сейчас озадачен подобной проблемой.

Доп. вопросы:

1. # Не отправляем рикошеты
if error_message then finish endif
Что есть "рикошеты"?
2. Как правильно указывать не выборочные аккаунты а весь домен - "@mydomain.ru"?
3. Какое правило добавить, что бы не только "Копируем исходящую почту от этих отправителей", но и этим получателям (нужно указать домены)?
4. Тоже самое для входящей - нужно указать домены отправителей.

Добавлено: 2007-06-16 9:48:44
dikens3
Marquez писал(а):1. # Не отправляем рикошеты
if error_message then finish endif
Что есть "рикошеты"?
Читать доку
2. Как правильно указывать не выборочные аккаунты а весь домен - "@mydomain.ru"?
Ну да, именно так, только если pcre использоваться не будет можно использовать contains вместо match.
3. Какое правило добавить, что бы не только "Копируем исходящую почту от этих отправителей", но и этим получателям (нужно указать домены)?

Код: Выделить всё

# Копируем исходящую почту от этих отправителей
if $sender_address: match "(user1|user2)@mydomain.ru" and 
# Копируем входящую почту для этих получателей
$recipients: match "(@mydomain1.ru|@mydomain2.ru|@mydomain3.ru)"

Добавлено: 2007-06-18 7:57:44
Marquez
Отлично 8) А исключение как оформить? К примеру, выбрал я домен, но хочу исключить пару адресов из выборки.

Добавлено: 2007-06-18 7:58:36
Alex Keda
вложенным условием

Добавлено: 2007-06-18 8:10:34
dikens3
Marquez писал(а):Отлично 8) А исключение как оформить? К примеру, выбрал я домен, но хочу исключить пару адресов из выборки.
А я пока не дорос. :-(

Добавлено: 2007-06-18 8:20:58
Marquez
Может так:

if
$recipients: match "(@mydomain1.ru|@mydomain2.ru|@mydomain3.ru)"
and
$recipients: match "(^anna@mydomain1.ru|sveta@2.ru)"
then...

^ - знак исключения, я не напутал? Т.е. выборка идёт по трем доменам (для примера) с исключением двух конкретных адресов.

Добавлено: 2007-06-18 8:52:53
dikens3
^ - знак начала, а не исключения. Причём у меня работать отказывался.

Прочитал за тебя доку(ссылка выше)

Код: Выделить всё

 Условию может предшествовать “not”, для его отрицания, и, также, есть некоторые отрицательные формы условия, которые более похожи на английский язык.
И отрицание должно делаться так:
$recipients: not match "(anna@mydomain1.ru|sveta@2.ru)"
В итоге должно получиться примерно следующее:

Код: Выделить всё

if
$recipients: match "(@mydomain1.ru|@mydomain2.ru|@mydomain3.ru)"
and
$recipients: not match "(anna@mydomain1.ru|sveta@2.ru)"
then... 

Добавлено: 2007-06-18 8:58:56
Marquez
Спасибо за прочтение. Я пока в процессе.

Добавлено: 2007-06-18 10:01:54
Marquez
Хм. Добавил строку, убивающую рикошеты и ещё парочку в правила. Перестала ходить почта. Не знаю из-за какой строки именно, но до вечера, откатился назад, до выяснения. Если закомментировать рикошеты и две строки, начинающиеся с "and" - всё работает. Листинг файла:

# Exim filter

#Ne otpravlyaem rikoshety
if error_message
then
finish
endif

if ${mask:$sender_host_address/24} is 192.168.0.0/24
and
$recipients: match "(@domain1.ru|@domain2.ru)"
then
unseen deliver out@mydomain.ru
endif

if
$recipients: match "@mydomain.ru"
and
$recipients: not match "postmaster@mydomain.ru"
then
unseen deliver in@mydomain.ru
endif

Добавлено: 2007-06-18 15:04:09
Гость
В общем, всё ОК. Только не просто not match, а does not match.

Добавлено: 2007-06-18 15:13:21
Alex Keda
хорошая кнопочка:

Добавлено: 2007-06-18 15:19:15
Гость
lissyara писал(а):хорошая кнопочка:

Код: Выделить всё

[/quote]
Буду иметь в виду  :) Кстати, на такой сервис от exim не стоит надеяться? (может что дополнительно прикрутить?) Отправитель высылает письмо на определенный домен, но пока ответсвенное лицо не ознакомилось с текстом письма и не дало добро (в виде отправки какого-ли бо текста на спец ящик, я фантазирую :D ), письмо никуда не уходит.

P.S. lissyara, на какой адрес пиво высылать?   :P

Добавлено: 2007-06-18 15:20:00
Гость
Забыл сделать "вход".

Добавлено: 2007-06-18 15:21:08
Marquez
Дважды. Удалите лишнее, чтобы не захламлять.

Добавлено: 2007-06-18 16:57:46
dikens3
Anonymous писал(а):В общем, всё ОК. Только не просто not match, а does not match.
:-)

Добавлено: 2007-06-18 16:58:49
dikens3
Anonymous писал(а):Отправитель высылает письмо на определенный домен, но пока ответсвенное лицо не ознакомилось с текстом письма и не дало добро (в виде отправки какого-ли бо текста на спец ящик, я фантазирую :D ), письмо никуда не уходит.
А по русски?

Добавлено: 2007-06-19 7:57:22
Marquez
А по русски?
Куда уж более. При отправке почты на определенный список адресов, письма не уходят пока ответсвенное лицо (руководство, безопасность - не важно) не ознакомились с ними и не дали виртуальное добро в виде каких-либо действий с почтой (фантазия - отсылка "1" для разрешения на определенный адрес). В любом случая, я сомневаюсь, что exim это сможет реализовать.

Добавлено: 2007-06-19 12:47:42
Alex Keda
тока внешним скриптом, которой на рас крутится к экзиму.
пишется такой скрипт тоже с полпинка.
========
тока ты не напишешь, т.к. документацию не читаешь, а выдвигаешь предположения :)

Добавлено: 2007-06-19 16:12:53
Marquez
lissyara писал(а):тока внешним скриптом, которой на рас крутится к экзиму.
пишется такой скрипт тоже с полпинка.
========
тока ты не напишешь, т.к. документацию не читаешь, а выдвигаешь предположения :)
Намёк понят :wink:

Re: Exim. Проверка системного фильтра

Добавлено: 2007-07-17 11:50:26
Marquez
В продолжение темы. Решил сделать правило: все отлупы от сторонних серверов и своего (неверный адрес и прочее) посылать копией на отдельный ящик. Как правило подобные письма приходят с адресов типа "Mailer-Daemon@". Правило:

Код: Выделить всё

if
$sender_address: match "mailer-daemon"
then
unseen deliver test@domain.ru
endif
Не работат. Что может быть не так?

Re: Exim. Проверка системного фильтра

Добавлено: 2007-07-17 12:00:09
Alex Keda
неправильно. лучше смотри на путь возврата - он пустой должен быть.

Re: Exim. Проверка системного фильтра

Добавлено: 2007-07-17 12:26:41
Marquez
lissyara писал(а):неправильно. лучше смотри на путь возврата - он пустой должен быть.
Почему неправильно, вот это мне непонятно...

Т.е. предлагаете сделать так:

Код: Выделить всё

if
[b]$Return-path: match ""[/b]
then
unseen deliver test@domain.ru
endif
"Пустой" каким образом обозначается?