URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 40671
[ Назад ]

Исходное сообщение
"Изменение поля Subject с помощью procmail"

Отправлено none , 17-Фев-04 13:32 
Давно спрашивал как Subject в письмах из quoted-printable декодировать. Дали ссылку на пример, но там выделяется поле Subject, декодируется и помещается в переменную SUBJECT. А как теперь в письме заменить Тему этой переменной?

Содержание

Сообщения в этом обсуждении
"Изменение поля Subject с помощью procmail"
Отправлено chip , 17-Фев-04 16:18 
>Давно спрашивал как Subject в письмах из quoted-printable декодировать. Дали ссылку на
>пример, но там выделяется поле Subject, декодируется и помещается в переменную
>SUBJECT. А как теперь в письме заменить Тему этой переменной?

судя по всему понадобилось это для получения писем с форума ;-) ? Напиши мне  на мыло chip-set(a)mail(.)ru

Вместе разберемся.


"Изменение поля Subject с помощью procmail"
Отправлено dev , 18-Фев-04 00:06 
>Давно спрашивал как Subject в письмах из quoted-printable декодировать. Дали ссылку на
>пример, но там выделяется поле Subject, декодируется и помещается в переменную
>SUBJECT. А как теперь в письме заменить Тему этой переменной?

man procmailex
/formail

man formail


"Изменение поля Subject с помощью procmail"
Отправлено none , 18-Фев-04 11:26 
Как я понял надо сделать вот так:

########################################################
# === Выделение заголовка Subject:
#
GETTEXT="[ ]*\/[^ ].*"
:0ch:
* ^Subject:
* $^Subject:${GETTEXT}
/dev/null

SUBJECT=`/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"
#
#######################################################

Но почему-то ничего не работает (не перекодирует в смысле).


"Изменение поля Subject с помощью procmail"
Отправлено dev , 18-Фев-04 14:28 
> Но почему-то ничего не работает (не перекодирует в смысле).

А что не работает: перекодировка заголовка или подстановка нового заголовка?
М.б. проще все это записать в отдельный скрипт и вызывать его из .procmailrc?


"Изменение поля Subject с помощью procmail"
Отправлено none , 18-Фев-04 16:30 
>А что не работает: перекодировка заголовка или подстановка нового заголовка?

Перекодировка не работает по-видимому. Потому что пробовал "formail -ISubject: $SUBJECT" заменить на "formail -ISubject: Test", и Subject в письмах заменялся на "Test". А всё остальное (то что выше) я взял из http://groups.google.com.ru/groups?th=72b8c498628e86fd&rnum=4 (это здесь же посоветовали)

>М.б. проще все это записать в отдельный скрипт и вызывать его из
>.procmailrc?

А чем проще то? да и не сложнее. Результат от этого не изменится.


"Изменение поля Subject с помощью procmail"
Отправлено dev , 19-Фев-04 15:33 
>>А что не работает: перекодировка заголовка или подстановка нового заголовка?
>
>Перекодировка не работает по-видимому. Потому что пробовал "formail -ISubject: $SUBJECT" заменить на
>"formail -ISubject: Test", и Subject в письмах заменялся на "Test". А
>всё остальное (то что выше) я взял из http://groups.google.com.ru/groups?th=72b8c498628e86fd&rnum=4 (это здесь
>же посоветовали)

Ну так и отладь шаг за шагом.

>>М.б. проще все это записать в отдельный скрипт и вызывать его из
>>.procmailrc?
>
>А чем проще то? да и не сложнее. Результат от этого не
>изменится.

Отлаживать легче.


"Изменение поля Subject с помощью procmail"
Отправлено none , 20-Фев-04 22:03 
В общем получил следующую вещь.
Когда я смотрю письма в 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"`