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

Помогите написать роутер в EXIM.

Добавлено: 2010-05-13 10:19:14
Roman B
Есть два внутренних почтаря обслуживающих один домен.
Как написать роутер, который бы письма для конкретных ящиков перечисленных в файле-списке направлял на специальный сервер, а всю остальную почту на домен к основному почтарю.
Надеюсь задал вопрос доходчиво.
Спасибо.

Re: Помогите написать роутер в EXIM.

Добавлено: 2010-05-13 11:27:43
dikens3
Копирование или перенаправление?

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

А вообще, что не получилось?
http://www.lissyara.su/doc/exim/4.62/th ... ct_router/

Re: Помогите написать роутер в EXIM.

Добавлено: 2010-05-13 12:28:16
Roman B
Мне нужно перенаправление.

Пример:

recipient-to: vasya-pupkin@example.com

example_com_route:
если vasya-pupkin@example.com в списке ( файле ) или в LDAP
manualroute example.com 192.168.0.2

example_com_route:
manualroute example.com 192.168.0.3

Re: Помогите написать роутер в EXIM.

Добавлено: 2010-05-13 12:59:04
dikens3
ну так попробуй..

Re: Помогите написать роутер в EXIM.

Добавлено: 2010-05-13 13:41:36
Roman B
Так я бы попробовал. Я не пойму никак название команды.
Что нужно прописать?

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

#как должен выглядеть роутер перед умолчальным на домен?
special_route:
  driver = manualroute
  #  domains = ! +local_domains
  resipients = /usr/local/etc/exim/special_recipients_list              # <- вот так что-ли указать? так не работает :)
  transport = remote_smtp
  route_list = example.com 192.168.1.2

#вот роутер на домен по умолчанию
example_route:
  driver = manualroute
  domains = ! +local_domains
  transport = remote_smtp
  route_list = example.com 192.168.1.3

просто я прошу ткнуть меня в механизм через который это сделать правильно.
опции rsipients я в роутере не нашел и думаю exim меня не поймет...

Re: Помогите написать роутер в EXIM.

Добавлено: 2010-05-13 16:35:48
dikens3
Exim очень просто в понимании. Смотрите как устроен роутер.
Сначала его нужно назвать, например:

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

special_route:
Далее нужно определиться, что он должен делать, например:
Роутер “manualroute” назван таким образом потому что он предоставляет возможность “ручной” маршрутизации (manual routing) адреса в соответствии с его доменом.
таким образом получаем:

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

driver = manualroute
Далее думаем в каких случаях он будет срабатывать.

Например у нас есть файл с пользователями в виде:

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

user1@example.com
user2@example.com
user3@example.com
...
Если полистать документацию, найдём там:
condition routers‡ string† незадана

Эта опция определяет главный тест предварительного условия, который должен быть успешным, для вызова роутера. Опция “condition” - последнее предварительное условие, для оценки (смотрите раздел 3.12). Строка раскрывается, и если результат принудительно неудачен, или пустая строка, или одна из строк “0”, или “no”, или “false” (проверяется без учёта регистра), роутер пропускается, и адрес предлагается следующему.
Если результат - любое другое значение, роутер запускается (поскольку это - последнее предварительное условие для оценки, все другие предварительные условия должны быть истинными).

http://www.lissyara.su/doc/exim/4.62/ge ... r_routers/
Значит следующая строка будет

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

condition = условие, которое проверяет требуемые E-Mail'ы.
Нам требуется использовать поиск в файле. Ищем в документации как сделать какой-либо поиск. Найдя поиск который нам подходит (или переделав файл источник под один из них), создаём условие.

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

condition = ${lookup{$local_part@$domain}lsearch{/путь/файл_со_списоком_пользователей}}
Далее определяемся с транспортом/дополнительными опциями и т.п.

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

route_list = example.com 192.168.1.2
transport = remote_smtp
Вообще поиск можно наверное сразу в route_list засунуть.

С поиском не знаю, будет работать или нет, попробуй. Я не помню уже что и как там.

Итого:

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

special_route:
driver = manualroute
condition = {${lookup{$local_part@$domain}lsearch{/путь/файл_со_списоком_пользователей}}{Yes}{No}}
route_list = example.com 192.168.1.2
transport = remote_smtp

Re: Помогите написать роутер в EXIM.

Добавлено: 2010-05-13 16:37:55
Morty
Roman B писал(а):Так я бы попробовал. Я не пойму никак название команды.
Что нужно прописать?

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

#как должен выглядеть роутер перед умолчальным на домен?
special_route:
  driver = manualroute
  #  domains = ! +local_domains
  resipients = /usr/local/etc/exim/special_recipients_list              # <- вот так что-ли указать? так не работает :)
  transport = remote_smtp
  route_list = example.com 192.168.1.2

#вот роутер на домен по умолчанию
example_route:
  driver = manualroute
  domains = ! +local_domains
  transport = remote_smtp
  route_list = example.com 192.168.1.3

просто я прошу ткнуть меня в механизм через который это сделать правильно.
опции rsipients я в роутере не нашел и думаю exim меня не поймет...
попробуй

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

 resipients = /usr/local/etc/exim/special_recipients_list   
поменять на

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

condition = {${lookup{$recipient_address}lsearch{../file}{True}{False}

Re: Помогите написать роутер в EXIM.

Добавлено: 2010-05-13 16:38:21
Morty
оо меня опередили :good: