!Mail.appの添付ファイルをMewで読む Mewを使ってメールを読んでいると, macOSのMail.appを使ってる人からの添付ファイルが読めないことがあった. メール本文を全部保存して対象のMIMEパートを取得, decodeしてファイルを取り出していたのですが,ちょっと不便. 中身をみてみると, boundary="Apple-Mail=_126A74B5-1B5D-4DB5-8B6B-2CB862261D4C" --Apple-Mail=_126A74B5-1B5D-4DB5-8B6B-2CB862261D4C --Apple-Mail=_126A74B5-1B5D-4DB5-8B6B-2CB862261D4C Content-Type: multipart/related; type="text/html"; boundary="Apple-Mail=_4011702D-3406-4339-AAD5-3772513E8D44" --Apple-Mail=_4011702D-3406-4339-AAD5-3772513E8D44 --Apple-Mail=_4011702D-3406-4339-AAD5-3772513E8D44 --Apple-Mail=_4011702D-3406-4339-AAD5-3772513E8D44-- --Apple-Mail=_126A74B5-1B5D-4DB5-8B6B-2CB862261D4C-- こんな感じで,multipartが階層的になっていた. 階層的なのはいいとして,multipart/relatedというのをMewが解析できてなさそう. Mew-6.8のコードをみてみると mew-const.el に, (defconst mew-ct-mla "Multipart/Alternative") という定義があったので,これを, (defconst mew-ct-mla "multipart/related") に変更してみた. これで,問題のメールの添付ファイルにMewでアクセスできるようになった, よかった. "Multipart/Alternative"は同じように扱える方がいいようなあ,と, mew-ct-mlrという名前で"multipart/related"を定義して, mew-ct-mlrが使われてるところでパラにできるようにしてみた. が,これだと上手く動かない...継続調査だなあ. 変更箇所は次の通り. diff --git a/mew-const.el b/mew-const.el index ba6e97e..57863e9 100644 --- a/mew-const.el +++ b/mew-const.el @@ -108,6 +108,7 @@ (defconst mew-ct-sts "Message/Delivery-Status") (defconst mew-ct-mlm "Multipart/Mixed") (defconst mew-ct-mla "Multipart/Alternative") +(defconst mew-ct-mlr "multipart/related") (defconst mew-ct-mls "Multipart/Signed") (defconst mew-ct-mle "Multipart/Encrypted") (defconst mew-ct-mld "Multipart/Digest") diff --git a/mew-decode.el b/mew-decode.el index cc74a74..841281b 100644 --- a/mew-decode.el +++ b/mew-decode.el @@ -885,7 +885,7 @@ Return a part syntax after moving the beginning of the content body." (boundary (mew-syntax-get-param ctl "boundary")) (count 0) (parts []) part - (use-alt (and (mew-dinfo-get-use-alt) (string= ct mew-ct-mla))) + (use-alt (and (mew-dinfo-get-use-alt) (or (string= ct mew-ct-mla) (string= ct mew-ct-mlr)))) prefpart lastpref lastatpref bregex start break) (unless boundary diff --git a/mew-syntax.el b/mew-syntax.el index 9a6ea2f..6784dbd 100644 --- a/mew-syntax.el +++ b/mew-syntax.el @@ -634,7 +634,7 @@ system." (cnt mew-syntax-magic) (num 1) (len (length syntax)) - (mew-inherit-alt (string= mew-ct-mla ct)) + (mew-inherit-alt (or (string= mew-ct-mla ct) (string= mew-ct-mlr ct))) strpart subsyntax) ;; multipart itself is displayed only when encoding. (if dec diff --git a/mew-vars2.el b/mew-vars2.el index 4f1f5dd..7f13e9f 100644 --- a/mew-vars2.el +++ b/mew-vars2.el @@ -213,7 +213,7 @@ for privacy reasons.") (mew-case-equal ct mew-ct-msg))) ;; xxx mew-ct-messagep? (defvar mew-mime-content-type-multipart-list - `(,mew-ct-mlm ,mew-ct-mla) + `(,mew-ct-mlm ,mew-ct-mlr) "Candidate of 'Content-Type: Multipart/' when CT: is changed in draft buffer.")