untitled RSS

undefined

Archive

Jul
7th
Mon
permalink

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)))