Давно спрашивал как Subject в письмах из quoted-printable декодировать. Дали ссылку на пример, но там выделяется поле Subject, декодируется и помещается в переменную SUBJECT. А как теперь в письме заменить Тему этой переменной?
>Давно спрашивал как Subject в письмах из quoted-printable декодировать. Дали ссылку на
>пример, но там выделяется поле Subject, декодируется и помещается в переменную
>SUBJECT. А как теперь в письме заменить Тему этой переменной?судя по всему понадобилось это для получения писем с форума ;-) ? Напиши мне на мыло chip-set(a)mail(.)ru
Вместе разберемся.
>Давно спрашивал как Subject в письмах из quoted-printable декодировать. Дали ссылку на
>пример, но там выделяется поле Subject, декодируется и помещается в переменную
>SUBJECT. А как теперь в письме заменить Тему этой переменной?man procmailex
/formailman formail
Как я понял надо сделать вот так:########################################################
# === Выделение заголовка Subject:
#
GETTEXT="[ ]*\/[^ ].*"
:0ch:
* ^Subject:
* $^Subject:${GETTEXT}
/dev/nullSUBJECT=`/bin/echo ${MATCH}|/bin/grep -v \?KOI8-R\?`
SUBJECT_BASE64=`/bin/echo ${MATCH}|/bin/grep -q \?KOI8-R\?B\? &&
/bin/echo ${MATCH}|/bin/cut -d '?' -f 4 | /usr/bin/mimencode -u`
SUBJECT_QOUTED=`/bin/echo ${MATCH}|/bin/grep -q \?KOI8-R\?Q\? &&
/bin/echo ${MATCH}|/bin/cut -d '?' -f 4 | /usr/bin/mimencode -u -q`
SUBJECT=${SUBJECT}${SUBJECT_BASE64}${SUBJECT_QOUTED}:0 fhw
| formail -I "Subject: $SUBJECT"
#
#######################################################Но почему-то ничего не работает (не перекодирует в смысле).
> Но почему-то ничего не работает (не перекодирует в смысле).А что не работает: перекодировка заголовка или подстановка нового заголовка?
М.б. проще все это записать в отдельный скрипт и вызывать его из .procmailrc?
>А что не работает: перекодировка заголовка или подстановка нового заголовка?Перекодировка не работает по-видимому. Потому что пробовал "formail -ISubject: $SUBJECT" заменить на "formail -ISubject: Test", и Subject в письмах заменялся на "Test". А всё остальное (то что выше) я взял из http://groups.google.com.ru/groups?th=72b8c498628e86fd&rnum=4 (это здесь же посоветовали)
>М.б. проще все это записать в отдельный скрипт и вызывать его из
>.procmailrc?А чем проще то? да и не сложнее. Результат от этого не изменится.
>>А что не работает: перекодировка заголовка или подстановка нового заголовка?
>
>Перекодировка не работает по-видимому. Потому что пробовал "formail -ISubject: $SUBJECT" заменить на
>"formail -ISubject: Test", и Subject в письмах заменялся на "Test". А
>всё остальное (то что выше) я взял из http://groups.google.com.ru/groups?th=72b8c498628e86fd&rnum=4 (это здесь
>же посоветовали)Ну так и отладь шаг за шагом.
>>М.б. проще все это записать в отдельный скрипт и вызывать его из
>>.procmailrc?
>
>А чем проще то? да и не сложнее. Результат от этого не
>изменится.Отлаживать легче.
В общем получил следующую вещь.
Когда я смотрю письма в mutt (или открываю ящик просто как текстовый файл, например, с помощью less), то поле Subject имеет следующий вид:1) "=?KOI8-R?Q?=E9=DA=CD=C5=CE=C5=CE=C9=C5 =D0=CF=CC=D1 Subject =D3 =D0=CF=CD=CF=DD=D8=C0 procmail?="
А при приёме почты (на этапе procmail) перекодирующему скрипту поле Subject передаётся в следующем виде:
2) "=?koi8-r?B?PT9LT0k4LVI/UT89RTk9REE9Q0Q9?= =?koi8-r?B?QzU9Q0U9QzU9Q0U9Qzk9Qw==?= =?koi8-r?Q?5?= =D0=CF=CC=D1 Subject =D3 =D0=CF=CD=CF=DD=D8=C0 procmail?=
Строку 1) скрипт перекодирует ПРАВИЛЬНО!!!, а строку 2) он вообще не трогает (ну это вполне естественно - в оригинальном решении я заменил "=?koi8-r?" на "=?KOI8-R?") Пробовал вернуть оригинальное решение - тогда строка 2) перекодируется в следующее:
"=?KOI8-R?Q?=E9=DA=CD=PT9LT0k4LVI/UT89RTk9REE9Q0Q9"
==============
Поле Subject получаю (.procmailrc) либо так:0
* .*
{
SUBJECT=`formail -xSubject:`
}либо так
GETTEXT="[ ]*\/[^ ].*"
:0ch:
* ^Subject:
* $^Subject:${GETTEXT}
/dev/null
SUBJECT=$MATCH
(результат одинаковый)
и передаю скрипту так:SUBJECT=`$HOME/bin/decodemail "$SUBJECT"`