Переадресация exim.
Добавлено: 2010-09-21 10:39:33
Доброго времени суток!
Нужна помощь зала как никогда.
Итак, задача состоит в следующем:
Нужно организовать переадресацию с ящика пользовтаеля нескольким получателям с возможностью копирования писем на изначальные ящики (которые идут в загловках письма).
Тут я буду описывать три способа
Способ первый.
Задачу шал следющим образом:
1.Создал таблицу в mysql:
2. Написал в системном фильтре следующее:
Всё работает но есть большое НО, а именно переадресация НЕ работает когда письмо направляется на несколько адресов, разделённых через запятую, потому что переменная $recipients - это список адресов через запятую.
Способ второй.
Немного подумав, я решил сделать по другому свой системный фильтр:
Переадресация работал на Ура , письма уходили и на переад. ящики и на ящики, с которых нет переадреции, но тут был косяк - тело письма почему то изменялось, а именно, удалялись символы перевода строк. Тело письма выглядело одной сторокой.
Способ третий.
Поматерившись, решил сделать по - другому:
Но и тут был косяк, так как почему обрабатывался только один первый адрес. Остальные же тупо игнорировались. Цикл выполнялся ровно один раз, хотя в доках написано, что foranyaddress служит для ЦИКЛИЧЕСКОЙ обработки сообщений.
Я уже выбился из сил и решил попросить помощь Зала, ибо уже не вмоготу.
Нужна помощь зала как никогда.
Итак, задача состоит в следующем:
Нужно организовать переадресацию с ящика пользовтаеля нескольким получателям с возможностью копирования писем на изначальные ящики (которые идут в загловках письма).
Тут я буду описывать три способа
Способ первый.
Задачу шал следющим образом:
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 |
+--------+-------------+------+-----+-------------------+-----------------------------+Код: Выделить всё
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
Способ второй.
Немного подумав, я решил сделать по другому свой системный фильтр:
Код: Выделить всё
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Я уже выбился из сил и решил попросить помощь Зала, ибо уже не вмоготу.