Необходимо отказаться от писем, отправляемых и заканчивающихся определенным TLD, но имеющих проблему, пример фильтра:
if first_delivery
and ("$h_to:, $h_cc:" contains ".win$")
or ("$h_from:" contains ".win$")
then
seen finish
endif
Проблема в том, что это не только совпадения
user@domain.win
но также
что-то.выигратьtest@domain.com
Как мы можем написать это так, чтобы оно влияло только на сам TLD?
Прежде всего, contains
не поддерживает регулярные выражения.
Кроме того, вам нужно правильно экранировать любые символы, которые имеют особое значение на этапе раскрытия переменной exim (например, $
и \
), который должен оставаться на фактическом этапе сравнения.
(Предположительно причина, по которой ваш фильтр вообще чему-либо соответствует, заключается в том, что $
интерпретируется как несуществующая переменная и просто исчезает на этапе раскрытия переменной, который происходит перед сравнением строк.)
Варианты, которые выглядят так, как будто они должны работать: ends
(сравнение конца строки) и matches
(совпадение с регулярным выражением).
Например
if $h_from: ends ".win"
или
if $h_from: matches \\.win\$
или (если вы хотите использовать кавычки, например, если бы в выражении были пробелы)
if $h_from: matches "\\\\.win\\$"
См. Раздел 22. Условия тестирования строки раздел в руководстве по фильтру Exim для подробностей.