Такое выражение:
exim -be -d+all '${if forany { :Mail:Admin:test:: } {inlisti
{$item}{test}}}'
Т.е. список начинается с пустого значения и заканчивается двумя пустыми
значениями.
И вот в конце два пустых значения подряд не обрабатывает.
12:25:11 11880 forany: $item = ""
12:25:11 11880 forany: $item = "Mail"
12:25:11 11880 forany: $item = "Admin"
12:25:11 11880 forany: $item = "test:"
Суть всего этого - отсекание спама с моими доменами в поле "От:" в
конверте, не в адресе.
Например:
"Mail-Admin mydomain.ua" <ri...@pramac.cam>
Варианты могут быть с разделением через пробел, дефис, косую черту ...
Это решил через sg и extract.
А вот с forany засада получается :(
Вот полное условие:
condition = ${if forany {<;
${sg{${extract{1}{<}{$h_From:}}}{\N"|\s+|-|\/\N}{;}} } {match_domain
{$item}{+virtual_domains}}}
P.S. Exim version 4.95 #1 (FreeBSD 12.3)
_______________________________________________
Exim-users mailing list
Exim-...@mailground.net
http://mailground.net/mailman/listinfo/exim-users
доброго
> Такое выражение:
> exim -be -d+all '${if forany { :Mail:Admin:test:: } {inlisti
> {$item}{test}}}'
>
> Т.е. список начинается с пустого значения и заканчивается двумя пустыми
> значениями.
по идее, в конце там не два пустых значения. задвоение двоеточия
позволяет указать, что двоеточие является частью элемента списка.
6.20 List construction
----------------------
...
If a colon is actually needed in an item in a list, it must be
entered as two colons.
> И вот в конце два пустых значения подряд не обрабатывает.
> 12:25:11 11880 forany: $item = ""
> 12:25:11 11880 forany: $item = "Mail"
> 12:25:11 11880 forany: $item = "Admin"
> 12:25:11 11880 forany: $item = "test:"
>
> Суть всего этого - отсекание спама с моими доменами в поле "От:" в
> конверте, не в адресе.
это не конверт. по крайней мере не то, что в SMTP называется envelope.
и как спам-то отсекается в данном случае? это способ поиска слова "test"
в заголовке From перед адресом?
> Например:
> "Mail-Admin mydomain.ua" <ri...@pramac.cam>
>
> Варианты могут быть с разделением через пробел, дефис, косую черту ...
> Это решил через sg и extract.
>
> А вот с forany засада получается :(
>
> Вот полное условие:
> condition = ${if forany {<;
> ${sg{${extract{1}{<}{$h_From:}}}{\N"|\s+|-|\/\N}{;}} } {match_domain
> {$item}{+virtual_domains}}}
>
> P.S. Exim version 4.95 #1 (FreeBSD 12.3)
--
Best wishes Victor Ustugov
mailto:vic...@corvax.kiev.ua
JID: vic...@corvax.kiev.ua
public GnuPG/PGP key: https://victor.corvax.kiev.ua/corvax.asc
{\N["\s-/]+\N}
On 27.01.2022 13:16, Victor Ustugov wrote:
> Mikhail Golub wrote on 27.01.2022 12:31:
>> Доброго времени суток.
>
> доброго
>
>> Такое выражение:
>> exim -be -d+all '${if forany { :Mail:Admin:test:: } {inlisti
>> {$item}{test}}}'
>>
>> Т.е. список начинается с пустого значения и заканчивается двумя пустыми
>> значениями.
>
> по идее, в конце там не два пустых значения. задвоение двоеточия
> позволяет указать, что двоеточие является частью элемента списка.
>
>
> 6.20 List construction
> ----------------------
> ...
> If a colon is actually needed in an item in a list, it must be
> entered as two colons.
Так тоже не исправляет ситуацию:
exim -be '${if forany {<; ;Mail;Admin;test;; } {inlisti {$item}{test}}}'
Именно в конце списка такое поведение. Делимитер роли не играет (что
";", что запятая).
>
>
>> И вот в конце два пустых значения подряд не обрабатывает.
>> 12:25:11 11880 forany: $item = ""
>> 12:25:11 11880 forany: $item = "Mail"
>> 12:25:11 11880 forany: $item = "Admin"
>> 12:25:11 11880 forany: $item = "test:"
>>
>> Суть всего этого - отсекание спама с моими доменами в поле "От:" в
>> конверте, не в адресе.
>
> это не конверт. по крайней мере не то, что в SMTP называется envelope.
Да, это "From:", не envelope-from:
>
> и как спам-то отсекается в данном случае? это способ поиска слова "test"
> в заголовке From перед адресом?
Да, поиск своего домена в поле "От:" перед адресом.
Это фишинговые письма ...
Правилом ниже вот такие From: отсекаются.
From: Documents-mydomain.ua <in...@bgvillas.cam>
А вот так уже нет.
From: "Mail-Admin mydomain.ua" <us...@duchemfrwd.cam>
Потому как в конце кавычки и пробел, что дает "два пустых значения" в
списке.
Можно, конечно, перед обработкой удалять кавычки ...
Но может как-то изхитриться с forany можно?
>
>> Например:
>> "Mail-Admin mydomain.ua" <ri...@pramac.cam>
>>
>> Варианты могут быть с разделением через пробел, дефис, косую черту ...
>> Это решил через sg и extract.
>>
>> А вот с forany засада получается :(
>>
>> Вот полное условие:
>> condition = ${if forany {<;
>> ${sg{${extract{1}{<}{$h_From:}}}{\N"|\s+|-|\/\N}{;}} } {match_domain
>> {$item}{+virtual_domains}}}
>>
>> P.S. Exim version 4.95 #1 (FreeBSD 12.3)
>
>
>>> Такое выражение:
>>> exim -be -d+all '${if forany { :Mail:Admin:test:: } {inlisti
>>> {$item}{test}}}'
>>>
>>> Т.е. список начинается с пустого значения и заканчивается двумя пустыми
>>> значениями.
>>
>> по идее, в конце там не два пустых значения. задвоение двоеточия
>> позволяет указать, что двоеточие является частью элемента списка.
>>
>>
>> 6.20 List construction
>> ----------------------
>> ...
>> If a colon is actually needed in an item in a list, it must be
>> entered as two colons.
>
> Так тоже не исправляет ситуацию:
> exim -be '${if forany {<; ;Mail;Admin;test;; } {inlisti {$item}{test}}}'
так замена разделителя ничего не даст. под "задвоением двоеточия"
подразумевалось "задвоение разделителя списка".
> Именно в конце списка такое поведение. Делимитер роли не играет (что
> ";", что запятая).
не только в конце списка такое поведение.
если список указать не в виде
;Mail;Admin;test;;
, а в виде
;Mail;Admin;;test;;
, то последним элементом списка будет Admin;test;
--
Best wishes Victor Ustugov
mailto:vic...@corvax.kiev.ua
JID: vic...@corvax.kiev.ua
public GnuPG/PGP key: https://victor.corvax.kiev.ua/corvax.asc
_______________________________________________
Вернее так:
{\N["\s/-]+\N}
а там точно минус нужен?
он может быть частью названия домена из +virtual_domains
--
Best wishes Victor Ustugov
mailto:vic...@corvax.kiev.ua
JID: vic...@corvax.kiev.ua
public GnuPG/PGP key: https://victor.corvax.kiev.ua/corvax.asc
_______________________________________________
On 27.01.2022 14:09, Victor Ustugov wrote:
> Le...@lena.kiev.ua wrote on 27.01.2022 14:06:
>>>> {\N"|\s+|-|\/\N}
>>>
>>> {\N["\s-/]+\N}
>>
>> Вернее так:
>> {\N["\s/-]+\N}
>
> а там точно минус нужен?
> он может быть частью названия домена из +virtual_domains
Так адрес же отсекается через extract по разделителю "<".
extract отсекает из заголовка From адрес отправителя.
а я имею ввиду, что минус может быть частью названия домена из
именованного списка +virtual_domains, т. е. частью названия одного из
доменов получателей.
тогда при использовании минуса в качестве одного из возможных
разделителей текста из From такой домен будет разделён на две части.
т. е. если в +virtual_domains присутствует домен my-domain.ua, а
заголовок From выглядит как
"Mail-Admin my-domain.ua" <ri...@pramac.cam>
, то при использовании минуса в качестве разделителя текста из From на
части получится
# exim -be '${sg{${extract{1}{<}{"Mail-Admin my-domain.ua"
<ri...@pramac.cam>}}}{\N["\s/-]+\N}{;}}'
;Mail;Admin;my;domain.ua;
и на наличие в +virtual_domains домен my-domain.ua проверен не будет.
будут проверены отдельно my и domain.ua
--
Best wishes Victor Ustugov
mailto:vic...@corvax.kiev.ua
JID: vic...@corvax.kiev.ua
public GnuPG/PGP key: https://victor.corvax.kiev.ua/corvax.asc
_______________________________________________
кстати, не факт, что это тоже удачная идея
например, для вот такого случая:
From: "Mail-Admin <mail...@mydomain.ua>" <ri...@pramac.cam>
в том же Thunderbird и в списке писем и при просмотре письма в колонке и
соответственно поле "От" будет указано:
Mail-Admin <mail...@mydomain.ua>
если пытаться сооружать длинную конструкцию, которая будет из $h_From:
убирать не просто первую встретившуюся открывающуюся угловую скобку и
всё за ней, а то, то находится между последней открывающейся угловой
скобкой и последней закрывающейся, а также все пробельные символы до и
после, то при интерпретации всей конструкции (включая forany) в exim -be
тот может выдать вот такое сообщение об ошибке:
exim: length limit exceeded (286 > 256) for: recipient
всё зависит от общей длины конструкции, которая зависит от длины
заголовка From. но даже не очень длинные заголовки проверить не получилось.
как вариант - можно вынести логику получения текста перед адресов
отправителя из заголовка From в отдельный acl.
acl_addr_text:
accept message = ${if match{$acl_arg1}\
{\N^\s*(.*)\s*<[^<>]+@[^<>]>\s*$\N}\
{$1}\
{${if match{$acl_arg1}{\N^\s*(.*)\s\S+?\s*$\N}{$1}{}}}}
тогда само условие будет выглядеть как-то так:
condition = ${if forany {<; \
${sg{${acl{acl_addr_text}{$h_From:}}}{\N[@"'\s/<>]+\N}{;}}\
}{match_domain{$item}{+virtual_domains}}}
такое условие отловит и текст в виде полноценных почтовых адресов перед
адресом отправителя и минусы в названиях доменов.
Я на столько не успел заморочиться :(
Что в голову пришло - сделал. Спам, который шел в то время, был отсеян.