2010年11月27日土曜日

Emacs + Wanderlust の添付ファイル


このエントリーをはてなブックマークに追加


今まで、NTEmacs上のメールでAPEL/FLIM/SEMI/WLという組み合わせで使ってきたけど、どうもこちらが送信したメールの添付ファイルが、特定メールクライアントでみるとおかしくなる現象が発生した。

具体的には、日本語ファイル名・英語ファイル名にかかわらず、

「添付ファイル1_20101125.xls」 みたいなファイル名だと、

 ・ァイル1_20101125.xls
 ・_20101125.xls
 ・xls

こんな感じで、ファイル名の前半が切れて見えるようだ。
特にNotesクライアントのメーラーでよく発生するようで、企業では結構Notesメール使ってるところも多い事を考えると、なんとか対策したいところ。


WLから送信して、
 → WL受信:正常
 → Outlook:稀におかしい
 → ThunderBird:正常
 → Notesメール:かなりの確率で発生する。

という感じ。

受信側でメールのプレーンテキストを見てみると、添付ファイル名のデコードがうまくいってない感じ。

今まではFLIMを使って、ここを参考に、.emacsへ以下を追記して使っていた。
:;; 日本語の添付ファイル名を正しく表示。これがないと化ける。
(defvar my-mime-filename-coding-system-for-decode
  '(iso-2022-jp japanese-shift-jis japanese-iso-8bit))
(defun my-mime-decode-filename (filename)
  (let ((rest (eword-decode-string filename)))
   (or (when (and my-mime-filename-coding-system-for-decode
                  (string= rest filename))
         (let ((dcs (mapcar (function coding-system-base)
                            (detect-coding-string filename))))
           (unless (memq 'emacs-mule dcs)
             (let ((pcs my-mime-filename-coding-system-for-decode))
               (while pcs
                 (if (memq (coding-system-base (car pcs)) dcs)
                     (setq rest (decode-coding-string filename (car pcs))
                           pcs nil)
                   (setq pcs (cdr pcs))))))))
       rest)))
(eval-after-load "mime"
 '(defadvice mime-entity-filename (after eword-decode-for-broken-MUA activate)
    "Decode encoded file name for BROKEN MUA."
    (when (stringp ad-return-value)
      (setq ad-return-value (my-mime-decode-filename ad-return-value)))))
(require 'std11)

;;; ファイル名が日本語の添付ファイルをエンコードする [semi-gnus-ja: 6046]
(eval-after-load "std11"
 '(defadvice std11-wrap-as-quoted-string 
    (before encode-string activate)
    "Encode a string."
    (require 'eword-encode)
    (ad-set-arg 0 (eword-encode-string (ad-get-arg 0)))))

これでは受信メールの日本語は正しく取り扱えても、送信メールでうまくいかな事があるので、FLIMからLIMITに変える事で対策した。

方法については以前の記事を修正しておいたので、そちらを参照。

 参照>> Emacs仕事術(5)メールとWEB