procmail фильтрация почты с subj в utf-8

Клиенты и серверы

Модератор: /dev/random

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

procmail фильтрация почты с subj в utf-8

Сообщение drBatty »

часто в почте сабж такой:

Код: Выделить всё

Subject: =?UTF-8?B


можно его как-то отлавливать procmail'ом?

как оно вообще расшифровывается?

PS: гуглил, не смог найти ничего путного ☹
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: procmail фильтрация почты с subj в utf-8

Сообщение Hephaestus »

Вообще, похоже на представление двухбайтовых символов в однобайтовой кодировке.
Само письмо вроде как в KOI8, а поле subject, видать, в другой кодировке.
Но смысла, правда, немного.
Это от кого такие приходят?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5102
ОС: Gentoo

Re: procmail фильтрация почты с subj в utf-8

Сообщение /dev/random »

drBatty писал(а):
28.08.2014 10:31
можно его как-то отлавливать procmail'ом?

В каком смысле, отлавливать? По стандарту в заголовке должны быть только 7-битные ASCII символы, всё остальное кодируется именно так: rfc2047. Ну, "отловите" вы его, и что дальше? Во что перекодировать, если это единственный допустимый по стандарту формат?

Upd: или вы имели в виду, что самой темы нет, и что на этом символе "B" заголовок обрывается? Если так, то сообщение битое, и тут ничего не поделать.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: procmail фильтрация почты с subj в utf-8

Сообщение drBatty »

Спасибо за rfc, с форматом я разобрался. Вот что выяснил:

вот что за хрень мне приехала:

Код: Выделить всё

Subject: =?UTF-8?B?0JLQsNGI0LAg0LLQtdGA0YHQuNGPIFNreXA=?= =?UTF-8?B?ZSDQtNC70Y8gTGludXgg0YPRgdGC0LA=?= =?UTF-8?B?0YDQtdCy0LDQtdGCLiDQntCx0L3QvtCy0LjRgtC1?= =?UTF-8?B?INC10LUg0L/RgNGP0LzQviDRgdC10LnRh9Cw0YEh?=

тут

Код: Выделить всё

=?UTF-8?

означает кодировку

означает base64 http://tools.ietf.org/html/rfc2045

а дальше можно раскодировать:

$

echo "?0JLQsNGI0LAg0LLQtdGA0YHQuNGPIFNreXA=?" | base64 -di Ваша версия Skyp


(это требование обновить skype, которым я давно уже не пользуюсь)

Вопрос заключается в том, что я не могу понять, как мне декодировать сабж ДО procmail'а? Во что-то такое, что можно парсить регулярками.

Я почитал RFC2047 про "Q" encoding, мне это подойдёт. Например "Ф" будет закодирована в

это я уже смогу распарсить.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: procmail фильтрация почты с subj в utf-8

Сообщение drBatty »

Hephaestus писал(а):
28.08.2014 10:44
Это от кого такие приходят?

да это везде так. Речь идёт о сырой почте, ДО MUA. Вот например только что отсюда(с UFO) приехало:

Код: Выделить всё

Subject: =?windows-1251?Q?=D3=E2=E5=E4=EE=EC=EB=E5=ED=E8=E5=20=EE=E1=20=EE=F2=E2=E5=F2=E5=20=E2=20=F2=E5=EC=E5=20(=20unixforum.org=20)?=

это MUA расшифровал

Код: Выделить всё

Subject: Уведомление об ответе в теме ( unixforum.org )

но распарсить можно оригинал, т.к. там Q encoding
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5102
ОС: Gentoo

Re: procmail фильтрация почты с subj в utf-8

Сообщение /dev/random »

Можете попробовать выдрать раскодированный текст с помощью https://github.com/akkana/scripts/blob/master/decodemail.py, прописать его с помощью formail во временный заголовок, отфильтровать сообщение по нему и затем удалить временный заголовок, чтобы письмо вновь стало валидным.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: procmail фильтрация почты с subj в utf-8

Сообщение drBatty »

/dev/random
спасибо. А что вы думаете, если я перед запуском procmail'а запущу простую утилитку, которая перекодирует в письме сабж из Bencoding в Qencoding? Так наверное попроще ведь будет?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5102
ОС: Gentoo

Re: procmail фильтрация почты с subj в utf-8

Сообщение /dev/random »

drBatty писал(а):
28.08.2014 12:03
/dev/random
спасибо. А что вы думаете, если я перед запуском procmail'а запущу простую утилитку, которая перекодирует в письме сабж из Bencoding в Qencoding? Так наверное попроще ведь будет?

Ещё эта утилита должна будет перевести из cp1251/koi8r/чего-там-ещё в utf8, чтобы правила работали даже если сменится кодировка. И не забудьте, что в Q у вас уйдёт по 6 байт на русскую букву, это не более 12 букв в строке, если хотите, чтобы письмо оставалось валидным. Я не помню, procmail умеет фильтровать по многострочным заголовкам? По-моему, нет. А так - да, попроще.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: procmail фильтрация почты с subj в utf-8

Сообщение drBatty »

/dev/random писал(а):
28.08.2014 12:20
Ещё эта утилита должна будет перевести из cp1251/koi8r/чего-там-ещё в utf8, чтобы правила работали даже если сменится кодировка.

это не проблема, есть iconv(3).
/dev/random писал(а):
28.08.2014 12:20
И не забудьте, что в Q у вас уйдёт по 6 байт на русскую букву, это не более 12 букв в строке, если хотите, чтобы письмо оставалось валидным.

как вы думаете, mutt сможет работать с инвалидными письмами? Если сможет, то меня это устроит
/dev/random писал(а):
28.08.2014 12:20
Я не помню, procmail умеет фильтровать по многострочным заголовкам? По-моему, нет.

по многострочным вроде умеет, ведь зачем-то он умеет многострочные регулярки: http://pm-doc.sourceforge.net/doc/#procmai...ti_line_matches

А как такое письмо должно выглядеть? Сейчас попробую себе отправить письмо с большим сабжем...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: procmail фильтрация почты с subj в utf-8

Сообщение Bizdelnick »

drBatty писал(а):
28.08.2014 13:19
А как такое письмо должно выглядеть?

ЕМНИП каждая следующая строка заголовка должна начинаться с пробела.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5102
ОС: Gentoo

Re: procmail фильтрация почты с subj в utf-8

Сообщение /dev/random »

drBatty писал(а):
28.08.2014 13:19
как вы думаете, mutt сможет работать с инвалидными письмами? Если сможет, то меня это устроит

Да, mutt сможет.

drBatty писал(а):
28.08.2014 13:19
А как такое письмо должно выглядеть? Сейчас попробую себе отправить письмо с большим сабжем...

Заголовок разбивается на строки в произвольных местах (в т.ч. посреди слова), каждая кодируется отдельно от других (в том числе, получает собственные =?UTF-8?Q? и ?=), и все, кроме первой, начинаются с пробела. Удачи с написанием многострочной регулярки.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: procmail фильтрация почты с subj в utf-8

Сообщение drBatty »

Bizdelnick писал(а):
28.08.2014 13:24
ЕМНИП каждая следующая строка заголовка должна начинаться с пробела.

именно так.
/dev/random писал(а):
28.08.2014 13:29
Удачи с написанием многострочной регулярки.

да, с этим проблема: я выяснил, что procmail умеет многострочные регулярки, Проблема в том, что непонятно, как выдернуть сам Subject? Если писать ^Subject, то матчится только первая строка, т.к. в других строках в начале идёт пробел, а procmail ищет ^Subject в начале _каждой_ строки.

В sed для этого есть \', которое матчится только с началом первой строки, но в procmail это не работает.

Короче разбивать строки это не вариант, попробую длинной строкой.

PS: выяснил, что в procmail самое первое начало строки матчится с ^^
но не проверил ещё.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: