Страница 1 из 1
Exim4 forward for all unknown users
Добавлено: 2008-03-12 17:07:37
kortes
Всем привет! Тут такое дело... В общем подскажите советом или решением?
Дело такое - сидел я до этого на сендмейле. Сейчас всю почтовую систему надо перенести на новый сервер. Заодно решил избавиться от этого бронтозавра в пользу exim'а.
Засада №1.
Есть в сендмыле такая опция, как LUSER_RELAY. Задаёт имя пользователя, на которого будут перенаправляться все письма, которые не нашли своего конечного получателя. Не получается у меня реализовать такое же в экзиме. Насколько почитал тут похожие вопросы, необходимо использовать механизм catch-all. Но я так и не понял, как всё это настроить.

Причем мне не нужно, чтоб письма пересылались на другой сервер, мне нужно именно чтоб они складывались в почтовый ящик пользователя, скажем mailprocess.
Заранее спасибо, если кто что сможет посоветовать.
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-12 17:40:47
dikens3
Незнаю, может и сработает:
http://www.lissyara.su/?id=1214
Код: Выделить всё
unknown_username” - смысл соответствует названию опции
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 9:18:20
Urgor
Задаёт имя пользователя, на которого будут перенаправляться все письма
Код: Выделить всё
unknownuser:
driver = redirect
allow_fail
allow_defer
condition = ${if eq{} {${lookup mysql{SELECT home FROM users \
WHERE (id='${quote_mysql:$local_part@$domain}' OR \
id='${quote_mysql:@$domain}') AND \
active='Y'}}}{yes}{no}}
data = ящик@куда.слать
Перед "mysqluser:"....
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 9:19:59
kortes
Хм... Это опция используется вроде, когда не задано имя отправителя...
Код: Выделить всё
Когда exim создаёт адрес отправителя для локально сгенерированных сообщений, он использует форму:
<user name> <login@qualify_domain>
Например:
Zaphod Beeblebrox <zaphod@end.univ.example>
Имя пользователя получается из установки “ -F ” командной строки (если установлено), или, иначе, путём поиска вызвавшего пользователя “ getpwuid() ” и извлечения поля “gecos” из вхождения пароля. Если поле “gecos” содержит символ “&”, он заменяется на логин с первой буквой в верхнем регистре, как обычно во множестве операционных систем. Смотрите опцию “ gecos_name ” для способа приспособить обработку поля “gecos”. Опция “ unknown_username ” может использоваться для задания имени пользователя в случаях, когда в файле паролей нет вхождения.
Или я что-то путаю?
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 9:31:22
kortes
Urgor писал(а):
Код: Выделить всё
unknownuser:
driver = redirect
allow_fail
allow_defer
condition = ${if eq{} {${lookup mysql{SELECT home FROM users \
WHERE (id='${quote_mysql:$local_part@$domain}' OR \
id='${quote_mysql:@$domain}') AND \
active='Y'}}}{yes}{no}}
data = ящик@куда.слать
Перед "mysqluser:"....
О! Ок, попробую так. Спасибо!
Правда пользователей я не в скуле храню, ну это вроде не особо проблема...
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 14:07:32
faust
Если ничего не напутал, то предложенный выше метод будет копировать абсолютно всю почту на указанный ящик, а автору нужно копировать лишь те, которые направленный для несуществующего аккаунта. Верно? Сам не так давно реализовал подобное у себя, чтобы не возникло случаев, что допустили ошибку в названии мыла, а переслать возможности нет.
Если я всё верно понял, то привожу пример из своего конфига(практически ничем не отличается от конфига лиссяры):
Код: Выделить всё
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}'}}
dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}'}{YES}{NO}}
transport = dovecot_delivery
unknown_account:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
`address`='${quote_mysql:@$domain}'}}
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 15:00:26
Urgor
faust писал(а):Если ничего не напутал, то предложенный выше метод будет копировать абсолютно всю почту на указанный ящик, а автору нужно копировать лишь те, которые направленный для несуществующего аккаунта. Верно?
Нет не верно. Всю он будет копировать в этом случае:
Код: Выделить всё
unknownuser:
driver = redirect
data = ящик@куда.слать
Чтобы он копировал только те мессаги у которых адресат не найден и добавлено спец. условие:
Код: Выделить всё
condition = ${if eq{} {${lookup mysql{SELECT home FROM users \
WHERE (id='${quote_mysql:$local_part@$domain}' OR \
id='${quote_mysql:@$domain}') AND \
active='Y'}}}{yes}{no}}
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 18:30:55
kortes
Кстати, совсем забыл спросить. Если пользователей держать в скуле - можно ли будет тогда выборочно назначать им пересылку на другой сервер? У меня некоторым пользователем приходиться пересылать почту на сервер лотуса домино, а некоторые забирают по pop3. На данный момент у меня это всё реализуется через файл procmail. Тем пользователем, которым необходимо пересылка на лотусный сервак, я просто в домашнем каталоге, в файле .procmail указываю, на чьё имя пересылать. Если всех пользователей загнать в скуль - где тогда указывать, кому пересылать почту, а кому ожидать, пока не заберут по pop3 ?
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 18:32:28
dikens3
Если всех пользователей загнать в скуль - где тогда указывать, кому пересылать почту, а кому ожидать, пока не заберут по pop3 ?
Ну поле какое-нибудь завести?
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 19:10:31
kortes
dikens3 писал(а):Если всех пользователей загнать в скуль - где тогда указывать, кому пересылать почту, а кому ожидать, пока не заберут по pop3 ?
Ну поле какое-нибудь завести?
Хм... И по этому полю потом завести признак пересылать-не пересылать письма? А если ещё для какого пользователя потребуется какая-нить извращённая пересылка?

Видимо, не судьба мне юзеров держать в скуле...

Re: Exim4 forward for all unknown users
Добавлено: 2008-03-13 19:18:03
dikens3
kortes писал(а):dikens3 писал(а):Если всех пользователей загнать в скуль - где тогда указывать, кому пересылать почту, а кому ожидать, пока не заберут по pop3 ?
Ну поле какое-нибудь завести?
Хм... И по этому полю потом завести признак пересылать-не пересылать письма? А если ещё для какого пользователя потребуется какая-нить извращённая пересылка?

Видимо, не судьба мне юзеров держать в скуле...

Одно поле может содержать все необходимые данные, в числовом,текстовом и т.п. виде, необязательно делать кучу полей. Сделай цифровое и по умолчанию 0. Если будет 1 - адрес для этого, 2 - для того, 3 - для сего и т.д. Или из одной буквы:
Код: Выделить всё
active='Y'
active='S'
active='N'
active='P'
active='K'
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-14 8:18:51
Urgor
kortes писал(а):Если пользователей держать в скуле - можно ли будет тогда выборочно назначать им пересылку на другой сервер?
Можно, пересылай

Вообще Exim весьма гибок. Можно реализовать любое решения, все зависит от твоих знаний и умений.
В твоем случае в базу надо создать доп. поле (ящик куда пересылать) и роутер (естессно до мусклделивери):
Код: Выделить всё
userforward:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT userfwd FROM users \
WHERE (id='${quote_mysql:$local_part@$domain}' OR \
id='${quote_mysql:@$domain}') AND \
active='Y'}}
Если поле userfwd содержит значение, то произойдет пересылка мессаги на этот ящик, если пусто -- то нет. Можно добавить еще одно флаговое поле если юзеру часто надо установить/снять пересылку...
А если ещё для какого пользователя потребуется какая-нить извращённая пересылка?
Пример в студию!

Re: Exim4 forward for all unknown users
Добавлено: 2008-03-14 14:47:57
kortes
Urgor писал(а):
Можно, пересылай

Вообще Exim весьма гибок. Можно реализовать любое решения, все зависит от твоих знаний и умений.
Мдя... Ключево слово - умения и знания. Чем больше разбираешься, тем больше понимаешь, что ничего не знаешь.

До сих пор не могу нормально разобраться в этих выражениях экзима..

Типа:
Код: Выделить всё
${if eq{} {${lookup mysql{SELECT home FROM users \
WHERE (id='${quote_mysql:$local_part@$domain}' OR \
id='${quote_mysql:@$domain}') AND \
active='Y'}}}{yes}{no}}
А если ещё для какого пользователя потребуется какая-нить извращённая пересылка?
Пример в студию!


Ещё не придумал.
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-14 23:55:04
Alex Keda
а чё непонятного?
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-17 8:39:09
kortes
lissyara писал(а):а чё непонятного?
Ну вот пример..
Код: Выделить всё
${if eq{} {${lookup mysql{SELECT home FROM users WHERE (id='${quote_mysql:$local_part@$domain}' OR id='${quote_mysql:@$domain}') AND \ active='Y'}}}{yes}{no}}
Т.е. здесь задаётся условие, но смысл мне не совсем ясен.

Если функция eq{}... А вот что она если? Равна или задана? Далее задаётся поиск в базе мускула, таблице user, в поле home, где id равен.. Пока не понял, что есть quote_mysql и local_part@$domain. Далее идёт условие или и опять эти же переменные. Ну и в конце ещё одно условие active='Y'}}}{yes}{no}} Тоже не понял к чему оно относится.

Re: Exim4 forward for all unknown users
Добавлено: 2008-03-17 11:39:24
Urgor
Смысл становится кристально ясен после прочтения спец. доков. Напиример
здесь лежит нужная часть руководства по эксиму в переводе Лиссяры. Странно, как не ознакомившись с литературой по настройке можно что-то настроить????

Re: Exim4 forward for all unknown users
Добавлено: 2008-03-17 14:18:10
kortes
Urgor писал(а):Смысл становится кристально ясен после прочтения спец. доков. Напиример
здесь лежит нужная часть руководства по эксиму в переводе Лиссяры.
О! До 11 части я ещё не успел дочитать. Спасибо!
Urgor писал(а): Странно, как не ознакомившись с литературой по настройке можно что-то настроить????

Ммм... Для простенькой настройки вовсе не обязательно перелопачивать весь мануал. Как нистранно, но можно настроить использую конфигуратор exim4-config. Другой вопрос, что так можно настроить именно для решения простых задач...
В общем, спасибо ещё раз!

Re: Exim4 forward for all unknown users
Добавлено: 2008-03-24 14:07:36
kortes
Народ, опять нужна ваша помощь. Пытаюсь сделать пересылку с ящика на другой ящик (который находиться на другом сервере). В конфиге экзима добавил вот такой роутер по совету Urgor'а:
Код: Выделить всё
userforward:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT userfwd FROM exim.mailbox \
WHERE (userfwd='${quote_mysql:$local_part@$domain}' OR \
userfwd='${quote_mysql:@$domain}') AND \
active='1'}}
поле userfwd у меня находиться в таблице mailbox базы данных exim. в мускуле в этом поле просто указал адрес, на который нужно пересылать.
судя по логу он просто игнорирует этот роутер.
Код: Выделить всё
2008-03-24 13:33:16 1JdjzQ-0008Ou-Rm <= test@mydomain.ru H=([192.168.50.5]) [192.168.50.5] I=[192.168.0.129]:25 P=esmtpa A=auth_plain:te
st@mydomain.ru S=519 id=200803241331.50049.test@mydomain.ru from <test@mydomain.ru> for test1@mydomain.ru
2008-03-24 13:33:16 1JdjzQ-0008Ou-Rm => test1 <test1@mydomain.ru> R=dovecot_user T=dovecot_delivery
2008-03-24 13:33:16 1JdjzQ-0008Ou-Rm Completed
это при том, что у пользователя
test1@mydomain.ru в поле userfwd указан адрес
test1@local.mydomain.ru
роутеры в конфиге указаны вот в таком порядке:
Код: Выделить всё
begin routers
smarthost_routes:
driver = manualroute
transport = remote_smtp
route_data = ${lookup{$domain}partial-lsearch{/etc/exim4/smarthosts}}
userforward:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT userfwd FROM exim.mailbox \
WHERE (userfwd='${quote_mysql:$local_part@$domain}' OR \
userfwd='${quote_mysql:@$domain}') AND \
active='1'}}
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}' OR \
`address`='${quote_mysql:@$domain}'}}
dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT `goto` FROM \
`alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}' OR \
`address`='${quote_mysql:@$domain}'}{yes}{no}}
transport = dovecot_delivery
unknownuser:
driver = redirect
allow_fail
allow_defer
data = mailprocessing@mydomain.ru
роутер smarthost нужен как раз для того, чтоб работала пересылка на local.mydomain.ru
подскажите, плиз, где копать?
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-24 14:11:44
Alex Keda
в дебаге
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-24 15:03:43
kortes
lissyara писал(а):в дебаге
в дебаге хорошо ковыряться, если что-то не работает. а тут всё работает, но не так, как хотелось бы....
Re: Exim4 forward for all unknown users
Добавлено: 2008-03-24 16:09:44
kortes
В общем пришлось специально сделать ошибку в синтаксисе команды, что увидеть работает она или нет.

Изменил роутер на такой:
Код: Выделить всё
userforward:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT userfwd FROM exim.mailbox \
WHERE (username='${quote_mysql:$local_part@$domain}' AND domain='${domain}')}}
Ошибка в скулевском запросе была... Учить и учить ещё мне скуль.
