Почти домучал свой почтовик, но возникли проблемы, решение которых я не могу найти уже 3 день.
Прикрутил к экзиму софтину spamprobe, которая в письма сует заголовки с оценкой спама по баесу. Прикручена она через system filter.
Из-за этого, насколько я понял из документации, в роутере недоступны переменные $local_part и $domain. Точнее они содержат пустые значения. Как роутить в этом случае письма я так и не догнал. У меня стоит роутер:
Код: Выделить всё
spam_check_router:
driver = accept
domains = +local_domains
# Кондишн проверяет условия и если они выполнены - письмо "доверенное", то есть в любом случае не спам.
condition = ${if or{{match{$h_X-SpamProbe:}{GOOD}}{match_domain{$sender_address_domain}{+local_domains}}{eqi{${lookup pgsql{POSTGRESSQL_TEST_WHITE_OUT}}}{yes}}}{no}{yes}}
transport = spam_check_delivery
Код: Выделить всё
POSTGRESSQL_TEST_WHITE_OUT = select 'yes' AS answer from white_list where local_mail = \
'${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and \
remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and \
expire_date >= current_date
Код: Выделить всё
dovecot_user:
driver = accept
transport = dovecot_delivery
cannot_route_message = Unknown user
В debug'е экзима узрел что при попытке раскрыть $local_part, $domain, $sender_address_local_part, $sender_address_domain в кондишине spam_check_router экзим получает пустые переменные. Как решить данную проблему?
Вот debug экзима:
Код: Выделить всё
1577 --------> spam_check_router router <--------
1577 local_part=ldap domain=domain.ru
1577 checking domains
1577 domain.ru in "domain.ru"? yes (matched "domain.ru")
1577 domain.ru in "+local_domains"? yes (matched "+local_domains")
1577 checking "condition"
1577 expanding: $h_X-SpamProbe:
1577 result: SPAM 0,8284405 094ac894e95fe167eaf4d72c3b47822e
1577 expanding: GOOD
1577 result: GOOD
1577 expanding: $sender_address_domain
1577 result: domain.ru
1577 expanding: +local_domains
1577 result: +local_domains
1577 domain.ru in "domain.ru"? yes (matched "domain.ru")
1577 domain.ru in "+local_domains"? yes (matched "+local_domains")
1577 expanding: ${local_part}
1577 result:
1577 skipping: result is not used
1577 expanding: @
1577 result: @
1577 skipping: result is not used
1577 expanding: ${domain}
1577 result:
1577 skipping: result is not used
1577 expanding: ${sender_address_local_part}
1577 result:
1577 skipping: result is not used
1577 expanding: @
1577 result: @
1577 skipping: result is not used
1577 expanding: ${sender_address_domain}
1577 result:
1577 skipping: result is not used
1577 expanding: select 'yes' AS answer from white_list where local_mail = '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and expire_date >= current_date
1577 result: select 'yes' AS answer from white_list where local_mail = '' and remote_mail = '' and expire_date >= current_date
1577 skipping: result is not used
1577 expanding: ${lookup pgsql{select 'yes' AS answer from white_list where local_mail = '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and expire_date >= current_date}}
1577 result:
1577 skipping: result is not used
1577 expanding: yes
1577 result: yes
1577 skipping: result is not used
1577 condition: or{{match{$h_X-SpamProbe:}{GOOD}}{match_domain{$sender_address_domain}{+local_domains}}{eqi{${lookup pgsql{select 'yes' AS answer from white_list where local_mail = '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and expire_date >= current_date}}}{yes}}}
1577 result: true
1577 expanding: no
1577 result: no
1577 expanding: yes
1577 result: yes
1577 skipping: result is not used
1577 expanding: ${if or{{match{$h_X-SpamProbe:}{GOOD}}{match_domain{$sender_address_domain}{+local_domains}}{eqi{${lookup pgsql{select 'yes' AS answer from white_list where local_mail = '${quote_pgsql:${local_part}}${quote_pgsql:@}${quote_pgsql:${domain}}' and remote_mail = '${quote_pgsql:${sender_address_local_part}}${quote_pgsql:@}${quote_pgsql:${sender_address_domain}}' and expire_date >= current_date}}}{yes}}}{no}{yes}}
1577 result: no
1577 spam_check_router router skipped: condition failure