Exim filter TLD block is blocking more than just the TLD

Need to discard emails to and from ending in a specific TLD but having an issue, example of a filter:

if first_delivery
and ("$h_to:, $h_cc:" contains ".win$")
or ("$h_from:" contains ".win$")
then
seen finish
endif

The problem with this is, it not only matches

user@domain.win

but also

something.wintest@domain.com

How can we write it so it only affects the TLD itself?

0
задан 2 November 2018 в 02:45
1 ответ

Прежде всего, содержит не поддерживает регулярные выражения.

Кроме того, вам нужно правильно экранировать любые символы, которые имеют особое значение на этапе раскрытия переменной exim ( такие как $ и \ ), которые должны оставаться на фактическом этапе сравнения.

(Вероятно, причина, по которой ваш фильтр вообще что-либо соответствует, заключается в том, что $ интерпретируется как несуществующая переменная и просто исчезает на этапе раскрытия переменных, который происходит перед сравнением строк.)

Параметры, которые выглядят так, как будто они должны работать, - это концы (сравнение строк для конец строки) и соответствует (соответствие регулярному выражению).

Например,

if $h_from: ends ".win"

или

if $h_from: matches \\.win\$

или (если вы хотите использовать кавычки, например, если в выражении будут пробелы)

if $h_from: matches "\\\\.win\\$"


См. Раздел 22. Подробности см. В разделе «Условия тестирования строки» в руководстве по фильтру exim.

1
ответ дан 4 December 2019 в 15:49

Теги

Похожие вопросы