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

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Roman B
проходил мимо

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

Непрочитанное сообщение Roman B » 2010-05-13 10:19:14

Есть два внутренних почтаря обслуживающих один домен.
Как написать роутер, который бы письма для конкретных ящиков перечисленных в файле-списке направлял на специальный сервер, а всю остальную почту на домен к основному почтарю.
Надеюсь задал вопрос доходчиво.
Спасибо.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

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

Непрочитанное сообщение dikens3 » 2010-05-13 11:27:43

Копирование или перенаправление?

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

А вообще, что не получилось?
http://www.lissyara.su/doc/exim/4.62/th ... ct_router/
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Roman B
проходил мимо

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

Непрочитанное сообщение Roman B » 2010-05-13 12:28:16

Мне нужно перенаправление.

Пример:

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

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

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

Непрочитанное сообщение dikens3 » 2010-05-13 12:59:04

ну так попробуй..
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Roman B
проходил мимо

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

Непрочитанное сообщение Roman B » 2010-05-13 13:41:36

Так я бы попробовал. Я не пойму никак название команды.
Что нужно прописать?

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

#как должен выглядеть роутер перед умолчальным на домен?
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 меня не поймет...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

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

Непрочитанное сообщение dikens3 » 2010-05-13 16:35:48

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
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

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

Непрочитанное сообщение Morty » 2010-05-13 16:37:55

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}

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

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

Непрочитанное сообщение Morty » 2010-05-13 16:38:21

оо меня опередили :good: