7th
Gnus, attachment, RFC 2231
Использую Gnus на протяжении нескольких месяцев. За это время успел приучить себя к этому MUA, и немного приучить Gnus ко мне.. Но, не так давно обнаружил неприятность, которая заставила меня поломать голову.
Суть вот в чём: если отправлять аттачментом файл в названии которого присутствуют скобки, то те респонденты, которые используют Outlook или The Bat получают аттачмент, но с поломанным именем.
Gmail справляется чуть лучше, и только Mozilla Thunderbird показывает имя правильно.
MS Outlook Express: ATT03114.odt
The Bat: Часть.odt
Gmail: us-ascii''Text%20%28by%20Demyan%29.odt
Thunderbird: Text (by Demyan).odt
Покопавшись немного в исходника Gnus нашёл виновника проблемы - функцию rfc2231-encode-string из rfc2231.el
Именно на эту функцию задан алиас “mail-header-encode-parameter” в файле mail-parse.el
И даже более того, код говорит вот о чем:
;(defalias 'mail-header-encode-parameter 'rfc2045-encode-string)
(defalias 'mail-header-encode-parameter 'rfc2231-encode-string)
Делаю такую проверку:
(rfc2231-encode-string "filename" "Test (by Demyan).odt")
; возвращает "filename*=us-ascii''Test%20%28by%20Demyan%29.odt"
(rfc2045-encode-string "filename" "Test (by Demyan).odt")
; возвращает "filename=\"Test (by Demyan).odt\""
Такие дела… Боюсь мне не хватит квалификации на то, чтобы рассуждать на тему корректности имплементации RFC 2231 в Gnus и в другие MUA, но вот что показывают опыты:
Gnus кодирует параметр содержащий не ascii символы так:
utf-8''%d1%82%d0%b5%d1%81%d1%82.txt
Thunderbird так:
UTF-8''%D1%82%D0%B5%D1%81%D1%82%2E%74%78%74
Gnus кодирует ascii строку со скобками так:
us-ascii''Text%20%28by%20Demyan%29.odt
Thunderbird так:
"Test (by Demyan).odt"
Другие MUA не тестировал, но делаю выводы, что Thunderbird работа с именами файла в аттачменте продумана немного лучше, чем в Gnus.
Теперь вопросы: 1) Как правильней решить проблему? 2) Имеет ли смысл вешать баг майнтайнерам Gnus? 3) Какой же MUA правильней всех потдерживает RFC 2231?
p.s.: Для себя сделал такую запись в .emacs:
(add-hook 'message-mode-hook
'(lambda ()
(defalias 'mail-header-encode-parameter 'rfc2045-encode-string)))