Diary/2021-3-24
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.")