приветствую
еще в начале года на bugs.exim.org была зарегистрирована бага, касающая
отсутствия поддержки RFC 2231 в exim:
http://bugs.exim.org/show_bug.cgi?id=466
вопрос касается имен аттачей с 8-битными ситволами, кодированные не в
quoted-printable и/или base64 по RFC 2047, а кодированные отдельным
способом, который и описан в RFC 2231.
Кистнер что-то не особо спешил реализовать поддержку RFC 2231, хотя для
него там реально было бы работы на два часа. т. к. имена аттачей,
кодированные в RFC 2231, можно привести к кодированию в quoted-printable
(для это есть и название набора символов и 16-ричные коды символов) и
для декодирования использовать уже имеющиеся средства (${rfc2047d:s} или
rfc2047_decode()).
нужно только учесть, что длинное имя файла будет разбито на несколько
частей, название каждой будет начинаться с "filename*", потом будет идти
порядкойвый номер части и еще одна звездочка. и декодировать части имени
придется отдельно, сливая результаты декодирования воедино.
все это не позволит использовать схему обработки параметров Кистнера с
mime_parameter_list, но не на столько, чтобы не вписаться в 5 килобайт
патча.
итак, сам патч:
http://mta.org.ua/exim-4.67-conf/patches/exim-4.68-rfc2231/patch-src::rfc2231.patch
патч позволяет переменной $mime_filename присваивать значение
декодированного имени прикрепленного файла, закодированных согласно RFC
2231. если при раскодировании возникли ошибки, переменной $mime_filename
будет присвоено недекодированное имя файла. если имя файла имеет
достаточно большую длину и было разбито на несколько параметров
filename* поля Content-Disposition, то тогда переменной $mime_filename
будет присвоено значение, полученное в результате конкатенации всех
частей имени файла.
для использования патча подправлены spec файл для RedHat/Fedora и
механизм сборки порта на FreeBSD:
http://mta.org.ua/exim-4.67-conf/redhat/exim-4.68-1.corvax/http://mta.org.ua/exim-4.67-conf/ports/exim-4.68/
для сборки exim с указанным патчем на RedHat/Fedora нужно в файл
redhat/exim-4.68-1.corvax/Makefile.local добавить строку
RPMBUILD_OPTIONS+= --with experimental_rfc2231_support
для сборки exim с указанным патчем на FreeBSD нужно в файл
ports/exim-4.68/Makefile.local добавить строку
WITH_EXPERIMENTAL_RFC2231_SUPPORT=YES
далее сборка exim под этими OS производится как обычно
--
Best wishes Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ: 77186900, 32418694 CRV2-RIPE, CRV-UANIC