divert(-1) # # Copyright (c) 2003, 2004 Victor Ustugov # This hack is under BSD License # Redistributions of source code must retain the above copyright notice # # hacks disscussion's maillist - http://www.mta.org.ua/mailman/listinfo/sendmail-conf # # # Check header Content-Transfer-Encoding # Проверка поля Content-Transfer-Encoding # # проверка корректности значения поля Content-Transfer-Encoding при наличии # кириллических чарсетов в поле Content-Type # dnl # отвергать письма: dnl # 1. Content-Type: text/(html|plain); charset="(Windows-1251|koi8-r)" dnl # Content-Transfer-Encoding: 7bit dnl # 2. Content-Type: text/(html|plain); charset="(Windows-1251|koi8-r)" dnl # без Content-Transfer-Encoding вообще dnl # dnl # для исключения из проверки писем, созданных в определенных MUA: dnl # HACK(`check_transfer_encoding', `My.Cool.Mailer') dnl # dnl # для использования определенных сообщений об ошибке в зависимости от MUA: dnl # HACK(`check_transfer_encoding', `PocoMail', `Ask PocoMail author fix the lame encoding definition') dnl # dnl # MUA следует указывать в токенизированной форме dnl # при это не требуется указание полного названия, нужно лишь начало dnl # dnl # исключение из проверки соответствия полей Content-Type, содержащих кириллические чарсеты, и Content-Transfer-Encoding dnl # NO - не делать исключений dnl # AUTH - делать исключение для аутентифицированных клиентов dnl # OUTGOING - делать исключение для исходящих сообщний dnl # define(`confCHECK_TRANSFER_ENCODING_SKIP', `AUTH OUTGOING')dnl dnl # несколько значений можно указывать в виде списка, элементы разделяются проблемами dnl # ifdef(`_CHECK_TRANSFER_ENCODING_', `dnl', `dnl divert(0) VERSIONID(`$Id: check_transfer_encoding.m4,v 8.12-07 2004/07/28 09:24:54 corvax Exp $')dnl divert(-1) dnl define(`_CHECK_TRANSFER_ENCODING_')dnl dnl dnl LOCAL_CONFIG dnl dnl C{CYR_CHARSETS}koi8-r windows-1251 iso-8859-5 C{CYR_CHARSETS_QUOTED}"koi8-r" "windows-1251" "iso-8859-5" dnl dnl LOCAL_RULESETS dnl dnl SLocal_check_mail # Clear the macro for the next message R $* $: $(macro {Header_Content_Type} $) $1 R $* $: $(macro {Header_Content_TransEnc} $) $1 HContent-Type: $>+Check_Content_Type dnl SCheck_Content_Type R $* $: $(macro {Header_Content_Type} $@ $1 $) $1 HContent-Transfer-Encoding: $>+Check_Content_Transfer_Encoding dnl SCheck_Content_Transfer_Encoding R $* $: $(macro {Header_Content_TransEnc} $@ $1 $) $1 dnl Scheck_eoh dnl R $* $: $1 $| CHECK dnl ifelse_strstr(confCHECK_TRANSFER_ENCODING_SKIP, `OUTGOING', `dnl R $* $| CHECK $: $1 $| $&{IsOutgoing} R $* $| YES $: $1 R $* $| $* $: $1 $| CHECK ') dnl ifelse_strstr(confCHECK_TRANSFER_ENCODING_SKIP, `AUTH', `dnl R $* $| CHECK $: $1 $| $&{auth_type} R $* $| $+ $: $1 R $* $| $: $1 $| CHECK ') dnl R $* $| CHECK $: $1 $| $&{Header_Content_Type} $| $&{Header_Content_TransEnc} dnl ifelse_strstr(confCHECK_TRANSFER_ENCODING, `8BIT', `dnl R $* $| $* $={CYR_CHARSETS_QUOTED} $* $| 7bit $: $1 $| WRONG R $* $| $* $={CYR_CHARSETS} $* $| 7bit $: $1 $| WRONG ') dnl ifelse_strstr(confCHECK_TRANSFER_ENCODING, `EXIST', `dnl R $* $| $* $={CYR_CHARSETS_QUOTED} $* $| $: $1 $| WRONG R $* $| $* $={CYR_CHARSETS} $* $| $: $1 $| WRONG ') dnl R $* $| WRONG $: $1 $| WRONG $| $>check_encoding_by_mailer $&{Header_X_Mailer} $| " wrong charset/encoding definition" R $* $| WRONG $| $#$* $#$2 R $* $| WRONG $| SKIP $: $1 R $* $| WRONG $| $* $#error 5.7.1. $: "554 wrong charset/encoding definition" R $* $| $* $: $1 Scheck_encoding_by_mailer ')dnl dnl ifelse(len(X`'_ARG_),`1',`dnl', `dnl dnl dnl LOCAL_RULESETS dnl dnl ifdef(`_CHECK_TRANSFER_ENCODING_MAILER_', `dnl', `dnl dnl define(`_CHECK_TRANSFER_ENCODING_MAILER_')dnl dnl SLocal_check_mail # Clear the macro for the next message R $* $: $(macro {Header_X_Mailer} $) $1 HX-Mailer: $>+Check_X_Mailer HX-Server: $>+Check_X_Mailer HX-mail-agent: $>+Check_X_Mailer HX-Newsreader: $>+Check_X_Mailer HUser-Agent: $>+Check_X_Mailer dnl SCheck_X_Mailer R $* $: $(macro {Header_X_Mailer} $@ $1 $) $1 ') dnl Scheck_encoding_by_mailer ifelse(len(X`'_ARG2_), `1', `dnl R _ARG_ $* $| $* $@ SKIP ', `dnl R _ARG_ $* $| $* $#error 5.7.1. $: 554 _ARG2_ R _ARG_ $* $| $+ $#error 5.7.1. $: 554 $2 ') ')