base64 и фильтрация в exim
краткая резолюция - все должно и так работать.
The whole item, including the terminating colon, is replaced by the contents of the message header line. If there is more than one header line with the same name, their contents are concatenated. For header lines whose data consists of a list of addresses (for example, From: and To a comma and newline is inserted between each set of data. For all other header lines, just a newline is used.
Leading and trailing white space is removed from header line data, and if there are any MIME “words” that are encoded as defined by RFC 2047 (because they contain non-ASCII characters they are decoded and translated, if possible, to a local character set. Translation is attempted only on operating systems that have the iconv function. This makes the header line look the same as it would when displayed by an MUA. The default character set is ISO-8859-1, but this can be changed by means of the headers command (see below).
If you want to see the actual characters that make up a header line, you can specify $rheader_ instead of $header_. This inserts the “raw” header line, unmodified.
There is also an intermediate form, requested by $bheader_, which removes leading and trailing space and decodes MIME “words”, but does not do any character translation. If an attempt to decode what looks superficially like a MIME “word” fails, the raw string is returned. If decoding produces a binary zero character, it is replaced by a question mark.
http://www.rldp.ru/articles/exim46r/glava54.htm
Весь элемент, включая завершающее двоеточие, заменяется содержимым строки заголовка. Если есть более одного заголовка с одним и тем же именем, их содержимое объединяется. Для строк заголовков, чьи данные состоят из списка адресов (например, From: и To запятые и символы новой строки вставляются между каждым набором адресов. Для всех других строк заголовоков используется лишь символ новой строки.
Начальное и завершающее пустое пространство удаляется из данных строки заголовка, и если в них есть любые слова MIME, которые закодированы как задано в RFC 2047 (поскольку они содержат не-ASCII символы они декодируются и переводятся, если возможно, в локальную кодировку. Попытка перевода предпринимается лишь в операционных системах, которые обладают функцией iconv. Это создаёт такой же поиск по строкам заголовков, как и при показе MUA. Кодировка по умолчанию устанвливается в ISO-8859-1, но это может быть изменено посредством команды headers (смотрите ниже).
Если Вы хотите видеть фактическую кодировку, в которой созданы строки заголовков, можете определить $rheader_ вместо $header_. Этим вставляются немодифицированные строки заголовков.
Также есть промежуточная форма, запрашиваемая путём $bheader_, с удалёнными начальными и конечными пробелами и декодированными словами MIME, но не переведённой кодировкой. Если попытка декодирования того, что на первый взгляд показалось словами MIME, неудачна, возвращается сырая строка. Если декодирование производит бинарные нули, они заменяются знаком вопроса.
Как я понял, тут говорится просто про разные кодировки, а не про base64.
может у тебя проблема как раз в том что кодировка файла .filter не совпадает с той, в которой запущен exim?
http://ftp.exim.org/pub/exim/ChangeLogs/NewStuff-4.24
P.S. в принципе выше это и было написано, но тут в более явной форме, и вчера ночью в ту формулировку я не вкурил.
думаю вопрос можно снять, у экзима есть разные хедеры - $bheader_ и $header_, первый производит перевод из base64, а второй может менять кодировки. Я использовал $header_subject. Взято от сюда 13. The way that the $h_ (and $header_) expansions work has been changed by the
addition of RFC 2047 decoding. There are now three forms:
$rh_xxx: and $rheader_xxx: give the original content of the header
line(s with no processing at all.
$bh_xxx: and $bheader_xxx: remove leading and trailing white space, and
then decode base64 or quoted-printable "words" within the header text,
but do not do charset translation. If decoding of what looks
superficially like a "word" fails, the raw string is returned. If
decoding produces a binary zero character, it is replaced by a question
mark - this is what Exim does for binary zeros that are actually
received in header lines.
$h_xxx: and $header_xxx: attempt to translate the $bh_ string to a
standard character set. If this translation fails, the $bh_ string is
returned. Translation is attempted only on operating systems that have
the iconv function. This is indicated by the compile-time macro
HAVE_ICONV.
P.S. в принципе выше это и было написано, но тут в более явной форме, и вчера ночью в ту формулировку я не вкурил.
эмм, я конечно может совсем не знаю английский, но вроде как в твоей цитате написано, что $header - это $bheader, перекодированный в локальную кодировку, нет? т.е. у тебя проблема как раз в несовпадении где-то кодировок.
Зато вылез трабл с длиной темы, при очень длинной теме фильтрация не происходила, помогло дописывание check_rfc2047_length=false в конфиг экзима. Мб кому пригодится.
Оставить комментарий
SergeRRRRRR
Настроил файл .forward в exim (точнее написал веб-интерфейс для создания файлов фильтров всплыла следующая проблема - если в письме, например тема, закодирована в base64, то фильтрация по теме работать не будет.Как-нибудь можно настроить exim, чтобы он переводил всю инфу в письме из base64 в обычный текст?