Переадресация exim.

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Дмитрий
рядовой
Сообщения: 29
Зарегистрирован: 2007-12-24 1:21:04
Откуда: Рязань
Контактная информация:

Переадресация exim.

Непрочитанное сообщение Дмитрий » 2010-09-21 10:39:33

Доброго времени суток!
Нужна помощь зала как никогда.

Итак, задача состоит в следующем:
Нужно организовать переадресацию с ящика пользовтаеля нескольким получателям с возможностью копирования писем на изначальные ящики (которые идут в загловках письма).

Тут я буду описывать три способа

Способ первый.
Задачу шал следющим образом:
1.Создал таблицу в mysql:

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

+--------+-------------+------+-----+-------------------+-----------------------------+
| Field  | Type        | Null | Key | Default           | Extra                       |
+--------+-------------+------+-----+-------------------+-----------------------------+
| id     | int(11)     | NO   | PRI | NULL              | auto_increment              | 
| adress | varchar(40) | NO   |     | NULL              |                             | 
| goto   | varchar(40) | NO   |     | NULL              |                             | 
| copy   | tinyint(1)  | NO   |     | 0                 |                             | 
| date   | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
+--------+-------------+------+-----+-------------------+-----------------------------+
2. Написал в системном фильтре следующее:

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

if $recipients is "${lookup mysql{SELECT adress  FROM `forward` WHERE \
                   adress='$recipients' AND `copy`=1 LIMIT 0,1}}"
then 
         unseen deliver "${lookup mysql{SELECT `goto` FROM `forward` WHERE \
                           adress='$recipients' LIMIT 0,1}}"
endif

if $recipients is "${lookup mysql{SELECT adress  FROM `forward` WHERE \
                   adress='$recipients' AND `copy`=0 LIMIT 0,1}}"
then 
         deliver "${lookup mysql{SELECT `goto` FROM `forward` WHERE \
                           adress='$recipients' LIMIT 0,1}}"
endif
Всё работает но есть большое НО, а именно переадресация НЕ работает когда письмо направляется на несколько адресов, разделённых через запятую, потому что переменная $recipients - это список адресов через запятую.

Способ второй.
Немного подумав, я решил сделать по другому свой системный фильтр:

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

if $recipients is "${lookup mysql{SELECT  '$recipients' FROM `forward` WHERE \
                    FIND_IN_SET(`adress`,'$recipients') AND `copy`=0 LIMIT 0,1}}"
then

#для адресов, с которых есть переадресация
       mail from $header_from  subject $header_subject text $message_body to
               "${lookup mysql{SELECT group_concat(`goto`) FROM `forward` WHERE \
                FIND_IN_SET(`adress`,replace('$recipients',' ','')) }}"  extra_headers "Content-Type:$header_content-type\nContent-Transfer-Encoding: 8bit"

#для адресов, с которых нет переадресации
       mail from $header_from  subject $header_subject text $message_body to
               "${lookup mysql{SELECT group_concat(`username`) FROM `mailbox` WHERE \
                username not in (select adress from forward) and FIND_IN_SET(`username`,replace('$recipients',' ','')) }}" extra_headers "Content Type:$header_content-type\nContent-Transfer-Encoding: 8bit"

endif
Переадресация работал на Ура , письма уходили и на переад. ящики и на ящики, с которых нет переадреции, но тут был косяк - тело письма почему то изменялось, а именно, удалялись символы перевода строк. Тело письма выглядело одной сторокой.

Способ третий.
Поматерившись, решил сделать по - другому:

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

if  foranyaddress "$recipients" ( $thisaddress is "${lookup mysql{SELECT adress FROM `forward` WHERE adress='$thisaddress'}}" )
     
        then     deliver "${lookup mysql{SELECT goto FROM `forward` WHERE adress='$thisaddress' }}"
        else 
            deliver $thisaddress        
        endif
Но и тут был косяк, так как почему обрабатывался только один первый адрес. Остальные же тупо игнорировались. Цикл выполнялся ровно один раз, хотя в доках написано, что foranyaddress служит для ЦИКЛИЧЕСКОЙ обработки сообщений.

Я уже выбился из сил и решил попросить помощь Зала, ибо уже не вмоготу. :st:

Хостинговая компания 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/

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

Re: Переадресация exim.

Непрочитанное сообщение Alex Keda » 2010-09-27 16:15:48

отладочку юзаем.
смотрим чё происходит
Убей их всех! Бог потом рассортирует...

Дмитрий
рядовой
Сообщения: 29
Зарегистрирован: 2007-12-24 1:21:04
Откуда: Рязань
Контактная информация:

Re: Переадресация exim.

Непрочитанное сообщение Дмитрий » 2010-09-30 12:46:26

А по - подробнее можно?

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

Re: Переадресация exim.

Непрочитанное сообщение Alex Keda » 2010-09-30 19:03:31

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

Дмитрий
рядовой
Сообщения: 29
Зарегистрирован: 2007-12-24 1:21:04
Откуда: Рязань
Контактная информация:

Re: Переадресация exim.

Непрочитанное сообщение Дмитрий » 2010-10-08 13:03:49

Не понял в какой теме... Дайте пожалуйста ссылку на неё.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Переадресация exim.

Непрочитанное сообщение hizel » 2010-10-08 16:18:06

В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Дмитрий
рядовой
Сообщения: 29
Зарегистрирован: 2007-12-24 1:21:04
Откуда: Рязань
Контактная информация:

Re: Переадресация exim.

Непрочитанное сообщение Дмитрий » 2010-10-18 7:48:32

Спасибо!!!
Ларчик, как всегда, просто открылся:

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

forwarding_no_copy:
  driver      = redirect
  data = ${lookup mysql{SELECT goto  FROM `forwardnew` WHERE  adress='${quote_mysql:$local_part@$domain}' AND `copy`=2 }}

forwarding_copy:
  driver  = redirect
  unseen
  data = ${lookup mysql{SELECT goto  FROM `forwardnew` WHERE  adress='${quote_mysql:$local_part@$domain}' AND `copy`=3 }}