Правильный PCRE в файле пользовательского фильтра Exim

echoвыводит строку, которую вы используете в качестве аргумента, а затем добавляет символ новой строки в конце выводимой строки, чтобы завершить строку.

С

echo "string"

вы получите stringи новую строку в конце.

Следовательно, с

echo -e "\n"

вы получите свою новую строку и новую строку в конце (т.е. две пустые строки ).

Если вам не нужен дополнительный перевод строки (, т. е. чтобы вывести непрерывающуюся строку ), используйте echoс опцией -nили, в этом случае, когда вы просто хотите вставить пустую строку, просто используйте echo ""или echoвообще без аргументов.

Из help echoвbash:

Options:
  -n        do not append a newline
  -e        enable interpretation of the following backslash escapes

Если вам нужно что-то переносимое на другие оболочки помимо bash, используйте вместо этого printf:

printf '\n' >>file.txt
printf 'bbbb\n' >>file.txt

Или,другой способ выполнения этих двух операторов с одним перенаправлением:

{
    printf '\n'
    printf 'bbbb\n'
} >>file.txt

Или просто

printf '\nbbbb\n' >>file.txt

Связанные:

0
10.05.2019, 16:24
1 ответ

Правильный способ - использовать ACL exim'а вместо фильтрации.
Найдите часть конфига, начинающуюся с такой строчки:

acl_rcpt:

Ваш конфиг может быть другим, но должны присутствовать acl, rcpt и точка с запятой. Затем должен быть ряд блоков, начиная с принятия, отказа, требования и других глаголов.
Вы должны добавить новый блок:

deny condition = ${lookup{$sender_address}nwildlsearch{/path/black.list}{yes}} 
       message = Not that time, sorry.

Файл /path/black.list должен содержать запрещенные адреса и/или регулярные выражения, по одному на строку:

## You can block the certain sender
^some_spammer@domain\.icu
## Or everybody from some domain
^.*@domain\.icu
## Or even all top-level domain at once
^.*@.*\.icu

Здесь .— это токен PCRE, который означает any symbol, .*означает any number of any symbols, а \.означает the dot. Строго говоря, шаблон ^.*@domain\.icuозначает:

Sender address starting with any number (0..n) of any symbols,
then symbol '@', 
then 'domain' substring,
and ending with '.icu' symbols

Строка ugly_spammer_from@domain.icuбудет соответствовать этому RE.

Помните, что правила ACL применяются в том порядке, в котором они определены в файле конфигурации. Те ACL, которые вы хотите внедрить, должны быть помещены в начало определений ACL для этапа RCPT.

Перезапустить exim после реконфигурации.

1
28.01.2020, 02:40

Теги

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