Exim4 forward for all unknown users

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-12 17:07:37

Всем привет! Тут такое дело... В общем подскажите советом или решением?
Дело такое - сидел я до этого на сендмейле. Сейчас всю почтовую систему надо перенести на новый сервер. Заодно решил избавиться от этого бронтозавра в пользу exim'а.
Засада №1.
Есть в сендмыле такая опция, как LUSER_RELAY. Задаёт имя пользователя, на которого будут перенаправляться все письма, которые не нашли своего конечного получателя. Не получается у меня реализовать такое же в экзиме. Насколько почитал тут похожие вопросы, необходимо использовать механизм catch-all. Но я так и не понял, как всё это настроить. :( Причем мне не нужно, чтоб письма пересылались на другой сервер, мне нужно именно чтоб они складывались в почтовый ящик пользователя, скажем mailprocess.

Заранее спасибо, если кто что сможет посоветовать.

Хостинговая компания 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: Exim4 forward for all unknown users

Непрочитанное сообщение dikens3 » 2008-03-12 17:40:47

Незнаю, может и сработает: http://www.lissyara.su/?id=1214

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

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

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение Urgor » 2008-03-13 9:18:20

Задаёт имя пользователя, на которого будут перенаправляться все письма

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

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:"....
Последний раз редактировалось Urgor 2008-03-13 9:20:06, всего редактировалось 1 раз.
Власть в руках у чужаков, и ты им платишь дань...

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-13 9:19:59

dikens3 писал(а):Незнаю, может и сработает: http://www.lissyara.su/?id=1214

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

unknown_username” - смысл соответствует названию опции
Хм... Это опция используется вроде, когда не задано имя отправителя...

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

Когда exim создаёт адрес отправителя для локально сгенерированных сообщений, он использует форму:
<user name>  <login@qualify_domain>

   Например:
Zaphod Beeblebrox <zaphod@end.univ.example>

   Имя пользователя получается из установки “ -F ” командной строки (если установлено), или, иначе, путём поиска вызвавшего пользователя “ getpwuid() ” и извлечения поля “gecos” из вхождения пароля. Если поле “gecos” содержит символ “&”, он заменяется на логин с первой буквой в верхнем регистре, как обычно во множестве операционных систем. Смотрите опцию “ gecos_name ” для способа приспособить обработку поля “gecos”. Опция “ unknown_username ” может использоваться для задания имени пользователя в случаях, когда в файле паролей нет вхождения.
Или я что-то путаю?

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-13 9:31:22

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:"....
О! Ок, попробую так. Спасибо!
Правда пользователей я не в скуле храню, ну это вроде не особо проблема...

faust
проходил мимо
Сообщения: 6
Зарегистрирован: 2007-08-31 12:26:18

Re: Exim4 forward for all unknown users

Непрочитанное сообщение faust » 2008-03-13 14:07:32

Если ничего не напутал, то предложенный выше метод будет копировать абсолютно всю почту на указанный ящик, а автору нужно копировать лишь те, которые направленный для несуществующего аккаунта. Верно? Сам не так давно реализовал подобное у себя, чтобы не возникло случаев, что допустили ошибку в названии мыла, а переслать возможности нет.
Если я всё верно понял, то привожу пример из своего конфига(практически ничем не отличается от конфига лиссяры):

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

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}'}}

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение Urgor » 2008-03-13 15:00:26

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}}
Власть в руках у чужаков, и ты им платишь дань...

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-13 18:30:55

Кстати, совсем забыл спросить. Если пользователей держать в скуле - можно ли будет тогда выборочно назначать им пересылку на другой сервер? У меня некоторым пользователем приходиться пересылать почту на сервер лотуса домино, а некоторые забирают по pop3. На данный момент у меня это всё реализуется через файл procmail. Тем пользователем, которым необходимо пересылка на лотусный сервак, я просто в домашнем каталоге, в файле .procmail указываю, на чьё имя пересылать. Если всех пользователей загнать в скуль - где тогда указывать, кому пересылать почту, а кому ожидать, пока не заберут по pop3 ?

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

Re: Exim4 forward for all unknown users

Непрочитанное сообщение dikens3 » 2008-03-13 18:32:28

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

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-13 19:10:31

dikens3 писал(а):
Если всех пользователей загнать в скуль - где тогда указывать, кому пересылать почту, а кому ожидать, пока не заберут по pop3 ?
Ну поле какое-нибудь завести?
Хм... И по этому полю потом завести признак пересылать-не пересылать письма? А если ещё для какого пользователя потребуется какая-нить извращённая пересылка? :)
Видимо, не судьба мне юзеров держать в скуле... :(

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

Re: Exim4 forward for all unknown users

Непрочитанное сообщение dikens3 » 2008-03-13 19:18:03

kortes писал(а):
dikens3 писал(а):
Если всех пользователей загнать в скуль - где тогда указывать, кому пересылать почту, а кому ожидать, пока не заберут по pop3 ?
Ну поле какое-нибудь завести?
Хм... И по этому полю потом завести признак пересылать-не пересылать письма? А если ещё для какого пользователя потребуется какая-нить извращённая пересылка? :)
Видимо, не судьба мне юзеров держать в скуле... :(
Одно поле может содержать все необходимые данные, в числовом,текстовом и т.п. виде, необязательно делать кучу полей. Сделай цифровое и по умолчанию 0. Если будет 1 - адрес для этого, 2 - для того, 3 - для сего и т.д. Или из одной буквы:

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

active='Y'
active='S'
active='N'
active='P'
active='K'
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение Urgor » 2008-03-14 8:18:51

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 содержит значение, то произойдет пересылка мессаги на этот ящик, если пусто -- то нет. Можно добавить еще одно флаговое поле если юзеру часто надо установить/снять пересылку...
А если ещё для какого пользователя потребуется какая-нить извращённая пересылка?
Пример в студию! :)
Власть в руках у чужаков, и ты им платишь дань...

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-14 14:47:57

Urgor писал(а): Можно, пересылай :)
Вообще Exim весьма гибок. Можно реализовать любое решения, все зависит от твоих знаний и умений.
Мдя... Ключево слово - умения и знания. Чем больше разбираешься, тем больше понимаешь, что ничего не знаешь. :oops: До сих пор не могу нормально разобраться в этих выражениях экзима.. :? Типа:

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

${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}}
А если ещё для какого пользователя потребуется какая-нить извращённая пересылка?
Пример в студию! :)
:) Ещё не придумал.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение Alex Keda » 2008-03-14 23:55:04

а чё непонятного?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-17 8:39:09

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}} Тоже не понял к чему оно относится. :oops:
Последний раз редактировалось Alex Keda 2008-03-17 10:34:05, всего редактировалось 1 раз.
Причина: кнопачга [code] - для кого?!

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение Urgor » 2008-03-17 11:39:24

Смысл становится кристально ясен после прочтения спец. доков. Напиример здесь лежит нужная часть руководства по эксиму в переводе Лиссяры. Странно, как не ознакомившись с литературой по настройке можно что-то настроить???? :twisted:
Власть в руках у чужаков, и ты им платишь дань...

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-17 14:18:10

Urgor писал(а):Смысл становится кристально ясен после прочтения спец. доков. Напиример здесь лежит нужная часть руководства по эксиму в переводе Лиссяры.
О! До 11 части я ещё не успел дочитать. Спасибо!
Urgor писал(а): Странно, как не ознакомившись с литературой по настройке можно что-то настроить???? :twisted:
Ммм... Для простенькой настройки вовсе не обязательно перелопачивать весь мануал. Как нистранно, но можно настроить использую конфигуратор exim4-config. Другой вопрос, что так можно настроить именно для решения простых задач...

В общем, спасибо ещё раз! :P

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-24 14:07:36

Народ, опять нужна ваша помощь. Пытаюсь сделать пересылку с ящика на другой ящик (который находиться на другом сервере). В конфиге экзима добавил вот такой роутер по совету 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

подскажите, плиз, где копать?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение Alex Keda » 2008-03-24 14:11:44

в дебаге
Убей их всех! Бог потом рассортирует...

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-24 15:03:43

lissyara писал(а):в дебаге
в дебаге хорошо ковыряться, если что-то не работает. а тут всё работает, но не так, как хотелось бы....

Аватара пользователя
kortes
рядовой
Сообщения: 41
Зарегистрирован: 2008-03-12 10:12:25
Откуда: г. Астрахань
Контактная информация:

Re: Exim4 forward for all unknown users

Непрочитанное сообщение kortes » 2008-03-24 16:09:44

В общем пришлось специально сделать ошибку в синтаксисе команды, что увидеть работает она или нет. :)
Изменил роутер на такой:

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

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}')}}
Ошибка в скулевском запросе была... Учить и учить ещё мне скуль. :(