Portál AbcLinuxu, 15. července 2025 10:10


Dotaz: regulární výrazy header_checks

6.10.2014 19:46 chinook | skóre: 28
regulární výrazy header_checks
Přečteno: 287×
Odpovědět | Admin
Je nějaká možnost jak filtorvat zprávy které mají určité slovo v předmětu? Problém nastává v tom, když tam je diakritika. Potřebuji zahazovat předmět s textem níže. Bez diakritiky to je v pohodě, ale když se to přeloží do UTF 8 tak to projde. v postfix main.cf

pcre:/etc/postfix/header_checks

v

/etc/postfix/header_checks

/^Subject: .*Možnost výdělku*./i DISCARD

Na straně klienta to filtrovat nechci a sieve filtry nemám.
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

xkucf03 avatar 6.10.2014 20:21 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: regulární výrazy header_checks
Odpovědět | | Sbalit | Link | Blokovat | Admin

1) *. → .*
2) DISCARD → REJECT (když je budeš v tichosti zahazovat, může se ztratit legitimní e-mail – takhle se o tom aspoň odesílatel dozví)

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
wamba avatar 6.10.2014 22:21 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: regulární výrazy header_checks
Odpovědět | | Sbalit | Link | Blokovat | Admin
v postfix se nevyznám, ale problém bude asi v nepodpoře utf8

viz
perl -CS  -nE 'say $_ if /^Subject: .*Možnost výdělku.*/i' <<EOF
Subject: Možnost výdělku 
EOF
vs
perl -CS -Mutf8 -nE 'say $_ if /^Subject: .*Možnost výdělku.*/i' <<EOF
Subject: Možnost výdělku 
EOF
pokud postfix používa balíček pcre, tak by se podpora utf8 měla dát zjistit pomocí pcretest -C.

řešením je použít pcre s podporou utf8 nebo používat místo ne ASCII znaků \x{...}, popř. \N{...}

Ps. možná může pro váš případ stačit místo Možnost výdělku psát Mo.nost v.d.lku :)
This would have been so hard to fix when you don't know that there is in fact an easy fix.
6.10.2014 22:43 chinook | skóre: 28
Rozbalit Rozbalit vše Re: regulární výrazy header_checks
Jenže on ten mail vypadá když se tam dá diakritika takhle :(
Subject: Fwd: =?UTF-8?B?TW/Fvm5vc3QgdsO9ZMSbbGt1IHZlIHTFmWVjaCBqZWRub2R1Yw==?=
Přece to musí jít nějak přeložit, když to dokáže klient.
xkucf03 avatar 6.10.2014 22:45 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: regulární výrazy header_checks

Ten regulární výraz se bohužel vyhodnocuje nad zakódovanými hlavičkami – viz header_checks:

If text in the message body is encoded (RFC 2045) then the rules need to be specified for the encoded form.

Likewise, when message headers are encoded (RFC 2047) then the rules need to be specified for the encoded form.

Jedna tečka místo písmena s diakritikou tedy nestačí, protože ta hlavička bude vypadat třeba takhle:

Subject: [Admini] =?utf-8?q?N=C3=A1vrh_na_anketu?=

Tohle řešení má prostě určitá omezení, ale zase má výhodu, že se vyhodnocuje už během SMTP relace, takže můžeš zprávu odmítnout a server odesílatele se o tom hned dozví. Nebudou ti zprávy v tichosti mizet v /dev/null.

Takže musíš to potenciální kódování zahrnout do regulárního výrazu nebo použít jiné řešení (typicky nějaký milter), které regulární výraz aplikuje až na dekódovaný text (při správně dimenzovaném HW by ani tohle neměl být problém dělat hned během SMTP relace).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.