具体的には、日本語ファイル名・英語ファイル名にかかわらず、
「添付ファイル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